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

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