Choose the right test boundary
Test one mapping locally
The example below tests an application that uses the AWS S3 API while Google Cloud Storage holds the objects. Read the S3 service-adapter page first and choose an operation that its Google Cloud target profile covers. The shared steps start that one mapping withtensor9 adapt svc run in single-binary mode.
Install or update the Tensor9 CLI
tensor9 is already installed, run brew upgrade tensor9 instead of the install command.Confirm the directed service mapping
Prepare target-cloud access
Start the service adapter
Copy the listening endpoint
Run one bounded request
T9_CLOUD_ADAPTER_ENDPOINT, then perform one operation whose target effect you can verify independently.Check both sides: read the origin-shaped response and inspect the native target resource. A successful client response alone does not prove that the target state is correct.Stop the local adapter
x-t9-explain-* receipt headers before stopping the process.Point only the service under test at the adapter
For an AWS SDK or the AWS CLI, use the native per-service endpoint setting so unrelated clients keep their normal destinations:Define the contract before running it
Write down the behavior your application depends on. “The request succeeded” is too weak because the target can differ in consistency, conditional writes, retries, metadata, pagination, quotas, and asynchronous completion. For each operation, record:Exercise more than the happy path
Run a small, deterministic suite against the foreground adapter:Verify native target access
Run one successful lifecycle
Run one expected failure
Exercise retry and idempotency behavior
Request an explanation
tensor9 explain to inspect the static mapping. For a covered runtime request, use the signed x-t9-explain control and retain its report ID with the application and target request identifiers. An explanation receipt identifies diagnostic evidence; it does not prove success or completion.Clean up and verify absence
Repeat the test in a BYOC test install
The installed test proves the boundaries the local process intentionally omits.Use a representative target
Compile and review the application
Deploy a test release
Run from the application boundary
Compare all three observations
Test restart and update behavior
Remove the test install
Keep an evidence packet
A useful test result can be reviewed without access to the original environment. Record:- Application release and service-adapter version.
- Origin and target service names, target cloud, region, and form factor.
- Operation names and sanitized request shapes.
- Expected origin response, native target effect, and error behavior.
- Actual origin status and request ID.
- Explanation report ID, revision, mode, and capture state when Explain was requested.
- Native target request ID and independently observed target state.
- Retry count, elapsed time, and whether an asynchronous operation reached a terminal state.
- Cleanup owner, cleanup result, and any intentionally retained resource.
Add the contract to CI
Keep the local suite small enough to run for each service-adapter or application release. Give each run unique resource names, a bounded timeout, and a cleanup phase that runs after both success and failure. Serialize tests that share a target resource or coordination store. Run broader load, quota, failover, and upgrade tests on a schedule in a representative BYOC test install. Those tests consume real target capacity and should use explicit budgets and teardown checks. A profile inspection is a useful early gate, but it is not a runtime test. A local adapter pass is a useful runtime gate, but it is not deployment evidence. Keep all three results separate in CI so a later reader can tell what actually ran.When a test fails
First identify the failing boundary:- If native target access fails, correct target identity, network, resource, or quota configuration.
- If the directed profile does not cover the operation, change the application contract or selected mapping.
- If the local adapter fails but the native target succeeds, collect an explanation and the origin/target request identifiers.
- If local testing passes but the BYOC test install fails, compare compiled configuration, workload identity, endpoint routing, and deployed adapter version.
- If the response, explanation, and native target state disagree, stop retrying mutations until you know which effects occurred.