You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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}'