{"id":41532589,"url":"https://github.com/inferadb/tests","last_synced_at":"2026-01-23T23:10:42.945Z","repository":{"id":328553364,"uuid":"1100913746","full_name":"inferadb/tests","owner":"inferadb","description":"InferaDB E2E tests — Engine and Control in Kubernetes","archived":false,"fork":false,"pushed_at":"2026-01-20T05:46:32.000Z","size":248,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-20T11:54:05.302Z","etag":null,"topics":["access-control","authorization","docker","e2e-testing","fine-grained-access-control","helm","inferadb","integration-testing","kubernetes","permissions","rebac","rust","zanzibar"],"latest_commit_sha":null,"homepage":"https://inferadb.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inferadb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-20T23:48:31.000Z","updated_at":"2026-01-20T05:46:36.000Z","dependencies_parsed_at":"2025-12-16T00:03:42.603Z","dependency_job_id":null,"html_url":"https://github.com/inferadb/tests","commit_stats":null,"previous_names":["inferadb/tests"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/inferadb/tests","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inferadb%2Ftests","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inferadb%2Ftests/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inferadb%2Ftests/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inferadb%2Ftests/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inferadb","download_url":"https://codeload.github.com/inferadb/tests/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inferadb%2Ftests/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28702943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["access-control","authorization","docker","e2e-testing","fine-grained-access-control","helm","inferadb","integration-testing","kubernetes","permissions","rebac","rust","zanzibar"],"created_at":"2026-01-23T23:10:39.223Z","updated_at":"2026-01-23T23:10:42.940Z","avatar_url":"https://github.com/inferadb.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n    \u003cp\u003e\u003ca href=\"https://inferadb.com\"\u003e\u003cimg src=\".github/inferadb.png\" width=\"100\" alt=\"InferaDB Logo\" /\u003e\u003c/a\u003e\u003c/p\u003e\n    \u003ch1\u003eInferaDB Integration Tests\u003c/h1\u003e\n    \u003cp\u003e\n        \u003ca href=\"https://discord.gg/inferadb\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-Join%20us-5865F2?logo=discord\u0026logoColor=white\" alt=\"Discord\" /\u003e\u003c/a\u003e\n        \u003ca href=\"#license\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg\" alt=\"License\" /\u003e\u003c/a\u003e\n    \u003c/p\u003e\n    \u003cp\u003eE2E tests for Engine and Control with Ledger storage\u003c/p\u003e\n\u003c/div\u003e\n\n\u003e [!IMPORTANT]\n\u003e Under active development. Not production-ready.\n\n## Quick Start\n\nThere are two ways to run the E2E tests:\n\n### Option 1: Docker Compose (CI-friendly)\n\nUse this for CI pipelines or when you don't have a K8s cluster:\n\n```bash\n# From the meta-repository root\ndocker compose -f docker-compose.e2e.yml up -d\n\n# Run tests\ncd tests\ncargo test --test integration -- --test-threads=1\n\n# Stop and cleanup\ndocker compose -f docker-compose.e2e.yml down -v\n```\n\nOr use the helper script:\n\n```bash\n./run-e2e.sh              # Run all tests\n./run-e2e.sh --keep       # Keep containers running after tests\n./run-e2e.sh cache        # Run only cache-related tests\n```\n\n### Option 2: Kubernetes Development Cluster\n\nUse this for development with the full Tailscale-based setup:\n\n```bash\n# Check prerequisites\ninferadb dev doctor\n\n# Start development cluster\ninferadb dev start\n\n# Run tests\ncargo test --test integration -- --test-threads=1\n\n# Stop cluster (preserves data)\ninferadb dev stop\n\n# Destroy cluster completely\ninferadb dev stop --destroy\n```\n\nRun specific suites:\n\n```bash\ncargo test --test integration auth_jwt -- --test-threads=1\ncargo test --test integration vault_isolation -- --test-threads=1\ncargo test --test integration cache -- --test-threads=1\ncargo test --test integration ledger_cache_invalidation -- --test-threads=1\n```\n\n## Test Coverage\n\n| Category                  | Tests | Scope                                           |\n| ------------------------- | ----- | ----------------------------------------------- |\n| Authentication            | 7     | JWT validation, Ed25519, expiration, scopes     |\n| Vault Isolation           | 4     | Multi-tenant separation, cross-vault prevention |\n| Cache Behavior            | 4     | Hit/miss patterns, expiration, concurrency      |\n| Ledger Cache Invalidation | 4     | Ledger watch, certificate revocation, writes    |\n| Concurrency               | 5     | Parallel requests, race conditions              |\n| E2E Workflows             | 2     | Registration → authorization flows              |\n| Management                | 5     | Org suspension, client deactivation             |\n| Resilience                | 6     | Recovery, degradation, error propagation        |\n\n## CLI Commands\n\nThe development cluster is managed via the [InferaDB CLI](https://github.com/inferadb/cli):\n\n| Command                       | Purpose                         |\n| ----------------------------- | ------------------------------- |\n| `inferadb dev doctor`         | Check development prerequisites |\n| `inferadb dev start`          | Start local Talos cluster       |\n| `inferadb dev stop`           | Pause cluster (preserves data)  |\n| `inferadb dev stop --destroy` | Destroy cluster and data        |\n| `inferadb dev status`         | Show cluster status             |\n| `inferadb dev logs`           | View cluster logs               |\n| `inferadb dev reset`          | Reset all cluster data          |\n\n## Environment\n\nTests use K8s service DNS. Override for local development:\n\n| Variable          | Default (in K8s)               | Purpose               |\n| ----------------- | ------------------------------ | --------------------- |\n| `CONTROL_URL`     | `http://inferadb-control:9090` | Control HTTP endpoint |\n| `ENGINE_URL`      | `http://inferadb-engine:8080`  | Engine HTTP endpoint  |\n| `ENGINE_GRPC_URL` | `http://inferadb-engine:8081`  | Engine gRPC endpoint  |\n| `ENGINE_MESH_URL` | `http://inferadb-engine:8082`  | Engine mesh endpoint  |\n\n## Writing Tests\n\n```rust\n#[tokio::test]\nasync fn test_my_feature() {\n    let fixture = TestFixture::create().await.expect(\"setup failed\");\n    let jwt = fixture.generate_jwt(None, \u0026[\"inferadb.check\"]).unwrap();\n\n    let response = fixture\n        .call_engine_evaluate(\u0026jwt, \"document:1\", \"viewer\", \"user:alice\")\n        .await\n        .unwrap();\n\n    assert_eq!(response.status(), StatusCode::OK);\n}\n```\n\n## Troubleshooting\n\n| Issue                 | Solution                                                                               |\n| --------------------- | -------------------------------------------------------------------------------------- |\n| Services not starting | `inferadb dev status` or `inferadb dev logs`                                           |\n| Port in use           | `inferadb dev stop --destroy \u0026\u0026 inferadb dev start`                                    |\n| Tests timing out      | Ensure Docker has 4GB+ RAM; check `inferadb dev logs`                                  |\n| Prerequisites missing | Run `inferadb dev doctor` to check requirements                                        |\n\n## Community\n\nJoin us on [Discord](https://discord.gg/inferadb) for questions, discussions, and contributions.\n\n## License\n\nDual-licensed under [MIT](LICENSE-MIT) or [Apache 2.0](LICENSE-APACHE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finferadb%2Ftests","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finferadb%2Ftests","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finferadb%2Ftests/lists"}