Files
next.orly.dev/scripts/DGRAPH_TESTING.md

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:

  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:

# 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}'