Commit graph

5 commits

Author SHA1 Message Date
BukeLy
bef7577fd9 fix: correct PostgreSQL environment variable name in E2E workflow
Why this change is needed:
E2E tests were failing with:
"ValueError: Storage implementation 'PGKVStorage' requires the following
environment variables: POSTGRES_DATABASE"

The workflow was setting POSTGRES_DB but LightRAG's check_storage_env_vars()
expects POSTGRES_DATABASE (matching ClientManager.get_config()).

How it solves it:
Changed environment variable name from POSTGRES_DB to POSTGRES_DATABASE
in the "Run PostgreSQL E2E tests" step.

Impact:
- PGKVStorage, PGGraphStorage, and PGDocStatusStorage can now properly
  initialize using ClientManager's configuration
- Fixes ValueError during LightRAG initialization

Testing:
Next E2E run should pass environment variable validation and proceed
to actual test execution.
2025-11-20 00:35:03 +08:00
BukeLy
722f639fa5 fix: remove Qdrant health check in E2E workflow
Why this change is needed:
Qdrant Docker image does not have curl or wget pre-installed,
causing health check to always fail and container to be marked
as unhealthy after timeout.

How it solves it:
Remove health check from Qdrant service container configuration.
The E2E test already has a "Wait for Qdrant" step that uses curl
from the runner environment to verify service readiness before
running tests.

Impact:
- Qdrant container will start immediately without health check delays
- Service readiness still verified by test-level wait step
- Eliminates container startup failures

Testing:
Next CI run should successfully start Qdrant container and pass
the wait/verify steps in the test workflow.
2025-11-20 00:26:36 +08:00
BukeLy
66a0dfe5b7 fix: resolve E2E test failures in CI
Why this change is needed:
E2E tests were failing in GitHub Actions CI with two critical issues:
1. PostgreSQL tests failed with "ModuleNotFoundError: No module named 'qdrant_client'"
2. Qdrant container health check never became healthy

How it solves it:
1. Added qdrant-client to PostgreSQL job dependencies
   - test_e2e_multi_instance.py imports QdrantClient at module level
   - Even with -k "postgres" filter, pytest imports the whole module first
   - Both PostgreSQL and Qdrant tests now share dependencies

2. Changed Qdrant health check from curl to wget
   - Qdrant Docker image may not have curl pre-installed
   - wget is more commonly available in minimal container images
   - New command: wget --no-verbose --tries=1 --spider

Impact:
- Fixes PostgreSQL E2E test import errors
- Enables Qdrant container to pass health checks
- Allows both test suites to run successfully in CI

Testing:
- Will verify in next CI run that both jobs complete successfully
- Health check should now return "healthy" status within retry window
2025-11-20 00:25:35 +08:00
BukeLy
dc2061583f test: refactor E2E tests using complete LightRAG instances
Replaced storage-level E2E tests with comprehensive LightRAG-based tests.

Key improvements:
- Use complete LightRAG initialization (not just storage classes)
- Proper mock LLM/embedding functions matching real usage patterns
- Added tokenizer support for realistic testing

Test coverage:
1. test_legacy_migration_postgres: Automatic migration from legacy table (1536d)
2. test_multi_instance_postgres: Multiple LightRAG instances (768d + 1024d)
3. test_multi_instance_qdrant: Multiple Qdrant instances (768d + 1024d)

Scenarios tested:
- ✓ Multi-dimension support (768d, 1024d, 1536d)
- ✓ Multi-model names (model-a, model-b, text-embedding-ada-002)
- ✓ Legacy migration (backward compatibility)
- ✓ Multi-instance coexistence
- ✓ PostgreSQL and Qdrant storage backends

Removed:
- tests/test_e2e_postgres_migration.py (replaced)
- tests/test_e2e_qdrant_migration.py (replaced)

Updated:
- .github/workflows/e2e-tests.yml: Use unified test file
2025-11-20 00:13:00 +08:00
BukeLy
c32e6a4e7b test: add E2E tests with real PostgreSQL and Qdrant services
Why this change is needed:
While unit tests with mocks verify code logic, they cannot catch real-world
issues like database connectivity, SQL syntax errors, vector dimension mismatches,
or actual data migration failures. E2E tests with real database services provide
confidence that the feature works in production-like environments.

What this adds:
1. E2E workflow (.github/workflows/e2e-tests.yml):
   - PostgreSQL job with ankane/pgvector:latest service
   - Qdrant job with qdrant/qdrant:latest service
   - Runs on Python 3.10 and 3.12
   - Manual trigger + automatic on PR

2. PostgreSQL E2E tests (test_e2e_postgres_migration.py):
   - Fresh installation: Create new table with model suffix
   - Legacy migration: Migrate 10 real records from legacy table
   - Multi-model: Two models create separate tables with different dimensions
   - Tests real SQL execution, pgvector operations, data integrity

3. Qdrant E2E tests (test_e2e_qdrant_migration.py):
   - Fresh installation: Create new collection with model suffix
   - Legacy migration: Migrate 10 real vectors from legacy collection
   - Multi-model: Two models create separate collections (768d vs 1024d)
   - Tests real Qdrant API calls, collection creation, vector operations

How it solves it:
- Uses GitHub Actions services to spin up real databases
- Tests connect to actual PostgreSQL with pgvector extension
- Tests connect to actual Qdrant server with HTTP API
- Verifies complete data flow: create → migrate → verify
- Validates dimension isolation and data integrity

Impact:
- Catches database-specific issues before production
- Validates migration logic with real data
- Confirms multi-model isolation works end-to-end
- Provides high confidence for merge to main

Testing:
After this commit, E2E tests can be triggered manually from GitHub Actions UI:
  Actions → E2E Tests (Real Databases) → Run workflow

Expected results:
- PostgreSQL E2E: 3 tests pass (fresh install, migration, multi-model)
- Qdrant E2E: 3 tests pass (fresh install, migration, multi-model)
- Total: 6 E2E tests validating real database operations

Note:
E2E tests are separate from fast unit tests and only run on:
1. Manual trigger (workflow_dispatch)
2. Pull requests that modify storage implementation files
This keeps the main CI fast while providing thorough validation when needed.
2025-11-19 23:41:40 +08:00