# Dgraph Integration Testing This directory contains scripts and configuration for testing the ORLY dgraph integration. ## Quick Start ### 1. Start Dgraph Server ```bash # 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 ```bash # Run all dgraph package tests ./scripts/test-dgraph.sh # Run tests with relay-tester ./scripts/test-dgraph.sh --relay-tester ``` ### 3. Manual Testing ```bash # 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:** ```bash 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 ```bash # 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: ```yaml # 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 ```bash 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 ```bash export TEST_LOG=1 ./scripts/test-dgraph.sh ``` ### Manual DQL Queries ```bash # 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: ```bash docker ps | grep dgraph ./scripts/dgraph-start.sh ``` ### Connection Refused Errors **Symptoms:** ``` failed to connect to dgraph at localhost:9080: connection refused ``` **Solutions:** 1. Check dgraph is running: `docker ps` 2. Check port mapping: `docker port dgraph-orly-test` 3. Check firewall rules 4. Verify ORLY_DGRAPH_URL is correct ### Schema Application Failed **Symptoms:** ``` failed to apply schema: ... ``` **Solutions:** 1. Check dgraph logs: `docker logs dgraph-orly-test` 2. Drop all data and retry: Use `dropAll` in test setup 3. Verify dgraph version compatibility ### Tests Timeout **Symptoms:** ``` panic: test timed out after 10m ``` **Solutions:** 1. Increase timeout: `go test -timeout 20m ./pkg/dgraph/...` 2. Check dgraph performance: May need more resources 3. Reduce test dataset size ## Performance Benchmarks Compare dgraph vs badger performance: ```bash # 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 ```bash # Stop and remove containers cd scripts docker-compose -f dgraph-docker-compose.yml down # Remove volumes docker volume rm scripts_dgraph-data ``` ### Reset Dgraph ```bash # 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}' ``` ## Related Documentation - [Dgraph Implementation Status](../DGRAPH_IMPLEMENTATION_STATUS.md) - [Package README](../pkg/dgraph/README.md) - [Dgraph Documentation](https://dgraph.io/docs/) - [DQL Query Language](https://dgraph.io/docs/query-language/)