5.3 KiB
5.3 KiB
Dgraph Integration Testing
This directory contains scripts and configuration for testing the ORLY dgraph integration.
Quick Start
1. Start Dgraph Server
# Using the convenience script
./scripts/dgraph-start.sh
# Or manually with docker-compose
cd scripts
docker-compose -f dgraph-docker-compose.yml up -d
# Or directly with docker
docker run -d \
-p 8080:8080 \
-p 9080:9080 \
-p 8000:8000 \
--name dgraph-orly \
dgraph/standalone:latest
2. Run Dgraph Tests
# Run all dgraph package tests
./scripts/test-dgraph.sh
# Run tests with relay-tester
./scripts/test-dgraph.sh --relay-tester
3. Manual Testing
# Start ORLY with dgraph backend
export ORLY_DB_TYPE=dgraph
export ORLY_DGRAPH_URL=localhost:9080
./orly
# In another terminal, run relay-tester
go run cmd/relay-tester/main.go -url ws://localhost:3334
Test Files
The dgraph package includes comprehensive tests:
- testmain_test.go - Test configuration and logging setup
- helpers_test.go - Helper functions for test setup/teardown
- save-event_test.go - Event storage tests
- query-events_test.go - Event query tests
All tests mirror the existing badger tests to ensure feature parity.
Test Coverage
The dgraph tests cover:
✅ Event Storage
- Saving events from examples.Cache
- Duplicate event rejection
- Deletion event validation
✅ Event Queries
- Query by ID
- Query by kind
- Query by author
- Query by time range
- Query by tags
- Event counting
✅ Advanced Features
- Replaceable events (kind 0)
- Parameterized replaceable events (kind 30000+)
- Event deletion (kind 5)
- Event replacement logic
Requirements
Dgraph Server
The tests require a running dgraph server. Tests will be skipped if dgraph is not available.
Endpoints:
- gRPC:
localhost:9080(required for ORLY) - HTTP:
localhost:8080(for health checks) - Ratel UI:
localhost:8000(optional, for debugging)
Custom Endpoint:
export ORLY_DGRAPH_URL=remote.server.com:9080
./scripts/test-dgraph.sh
Docker
The docker-compose setup requires:
- Docker Engine 20.10+
- Docker Compose 1.29+ (or docker-compose plugin)
Test Workflow
Running Tests Locally
# 1. Start dgraph
./scripts/dgraph-start.sh
# 2. Run tests
./scripts/test-dgraph.sh
# 3. Clean up when done
cd scripts && docker-compose -f dgraph-docker-compose.yml down
CI/CD Integration
For CI pipelines, use the docker-compose file:
# Example GitHub Actions workflow
services:
dgraph:
image: dgraph/standalone:latest
ports:
- 8080:8080
- 9080:9080
steps:
- name: Run dgraph tests
run: |
export ORLY_DGRAPH_URL=localhost:9080
CGO_ENABLED=0 go test -v ./pkg/dgraph/...
Debugging
View Dgraph Logs
docker logs dgraph-orly-test -f
Access Ratel UI
Open http://localhost:8000 in your browser to:
- View schema
- Run DQL queries
- Inspect data
Enable Test Logging
export TEST_LOG=1
./scripts/test-dgraph.sh
Manual DQL Queries
# Using curl
curl -X POST localhost:8080/query -d '{
q(func: type(Event)) {
uid
event.id
event.kind
event.created_at
}
}'
# Using grpcurl (if installed)
grpcurl -plaintext -d '{
"query": "{ q(func: type(Event)) { uid event.id } }"
}' localhost:9080 api.Dgraph/Query
Troubleshooting
Tests Skip with "Dgraph server not available"
Solution: Ensure dgraph is running:
docker ps | grep dgraph
./scripts/dgraph-start.sh
Connection Refused Errors
Symptoms:
failed to connect to dgraph at localhost:9080: connection refused
Solutions:
- Check dgraph is running:
docker ps - Check port mapping:
docker port dgraph-orly-test - Check firewall rules
- Verify ORLY_DGRAPH_URL is correct
Schema Application Failed
Symptoms:
failed to apply schema: ...
Solutions:
- Check dgraph logs:
docker logs dgraph-orly-test - Drop all data and retry: Use
dropAllin test setup - Verify dgraph version compatibility
Tests Timeout
Symptoms:
panic: test timed out after 10m
Solutions:
- Increase timeout:
go test -timeout 20m ./pkg/dgraph/... - Check dgraph performance: May need more resources
- Reduce test dataset size
Performance Benchmarks
Compare dgraph vs badger performance:
# Run badger benchmarks
go test -bench=. ./pkg/database/...
# Run dgraph benchmarks
go test -bench=. ./pkg/dgraph/...
Test Data
Tests use pkg/encoders/event/examples.Cache which contains:
- ~100 real Nostr events
- Various kinds (text notes, metadata, etc.)
- Different authors and timestamps
- Events with tags and relationships
Cleanup
Remove Test Data
# Stop and remove containers
cd scripts
docker-compose -f dgraph-docker-compose.yml down
# Remove volumes
docker volume rm scripts_dgraph-data
Reset Dgraph
# Drop all data (via test helper)
# The dropAll() function is called in test setup
# Or manually via HTTP
curl -X POST localhost:8080/alter -d '{"drop_all": true}'