| name | test-with-spanner |
|---|---|
| description | Run unit tests that require the Spanner emulator. Use this skill when the user wants to run tests in packages like satellite/metabase, satellite/metainfo, or any other tests that interact with Spanner. Automatically handles checking for and configuring the Spanner emulator environment. |
| allowed_tools | go |
| allowed_prompts | [{"tool": "Bash", "prompt": "run unit tests with spanner"}] |
Run Unit Tests with Spanner
You are helping run unit tests that require the Spanner emulator.
Instructions
The Storj test framework automatically manages the Spanner emulator lifecycle using the run: prefix in the STORJ_TEST_SPANNER environment variable.
To run tests automatically spanner_emulator binary needs to be on PATH.
Running Tests
-
If test name is provided in arguments: - Find the package containing the test using Grep - Run the test with the auto-managed emulator
-
If only package path is provided: - Run all tests in that package with the auto-managed emulator
-
Command format:
bash STORJ_TEST_SPANNER='run:spanner_emulator' go test -v ./package/path -run TestName
The run: prefix tells the test framework to:
- Automatically start the Spanner emulator before tests
- Configure the connection for each test
- Clean up and stop the emulator after tests complete
- Report test results: - Show whether tests passed or failed - List all subtests that ran - If tests failed, offer to help investigate the failures
Common test paths
Some common test paths in the Storj codebase:
- ./satellite/metabase - Metabase tests
- ./satellite/metainfo - Metainfo API tests
- ./satellite/satellitedb - Database tests
Example Usage
# Run a specific test
STORJ_TEST_SPANNER='run:spanner_emulator' go test -v ./satellite/metainfo -run TestEndpoint_Object_No_StorageNodes
# Run all tests in a package
STORJ_TEST_SPANNER='run:spanner_emulator' go test -v ./satellite/metabase
# Run tests with timeout
STORJ_TEST_SPANNER='run:spanner_emulator' go test -v -timeout 10m ./satellite/metabase -run TestLoop
Notes
- Each test gets its own emulator instance that's automatically managed
- No manual cleanup is required - the framework handles emulator lifecycle
- The
run:prefix is the recommended approach used in Storj's CI/CD (see Jenkinsfile.verify and Jenkinsfile.public) - Alternative: If
STORJ_TEST_SPANNERis already set to a running emulator, tests will use that instead