The verification client makes requests to a user-provided server-under-test. The verification client also binds to a port, so that test requests can be driven by a user's test harness (i.e. it is, in fact, a server).
master-test-cases.yml contains a variety of tests applicable to both verification client and verification server. To compile the verification-client test cases, run:
./gradlew compileTestCasesJsonThat will generate a file /verification-client-api/build/test-cases.json, which conforms to this conjure-defined format.
First, ensure the necessary artifacts are available in your testing environment:
| Artifact | Maven coordinate | Classifier |
|---|---|---|
verification-client.tgz |
com.palantir.conjure.verification:verification-client::${classifier}@tgz |
osx or linux |
verification-client-test-cases.json |
com.palantir.conjure.verification:verification-client-test-cases |
|
verification-client-api.conjure.json |
com.palantir.conjure.verification:verification-client-api |
The server under test also needs to be implemented and made available to the test harness.
Using the generator and runtime that are being tested:
- generate server bindings for services found in the verification-client-api IR (
verification-client-api.conjure.json). - Implement all the test services mentioned under Types of test cases. Every endpoint should have exactly one argument and one return type. The implementations should just return the argument.
The test harness should ensure that both the server under test and the verification client are up and running before running the tests, then stop them after it's done running the tests.
To run the verification client, extract the executable out of the verification-client.tgz and run it. There should only be one file inside the archive.
For each test found in the master-test-cases.yml file, the harness should invoke the VerificationClientService's runTestCase endpoint, passing the endpoint name, test index (0-indexed) and URL of the server under test.
Note: For negative Body tests, the index should be set to (number of positive tests) + the 0-indexed position of the negative test.
| Test type | Service definition | Service to implement | Comment |
|---|---|---|---|
| auto-deserialize | auto-deserialize-service.yml |
AutoDeserializeService |
See Body tests |
| single header | not implemented yet | Tests the ability to deserialize a header param correctly. | |
| single query param | not implemented yet | Tests the ability to deserialize a query param correctly. | |
| single path param | not implemented yet | Tests the ability to deserialize a path param correctly. |
Service definitions are generated into /verification-client-api/src/main/conjure/generated by running
./gradlew generateThe tests include positive and negative tests for each endpoint.
The test harness does not need to assert that negative test cases failed. The VerificationClientService encapsulates
all of that logic, and will return an error if a test didn't behave as expected.
Note: Because the tests in each endpoint have the same structure, if the language allows, it's simpler to generate the tests using reflection, rather than hand-rolling a new test for every endpoint.
Please see the Partial Compliance section of RFC 004.
A docker image containing the server along with embedded test-cases.json and verification-client-api.conjure.json are published to: https://hub.docker.com/r/palantirtechnologies/conjure-verification-client/.
$ docker run -p 8000:8000 palantirtechnologies/conjure-verification-client:latest
Listening on http://0.0.0.0:8000
# in another terminal:
# start the server-under-test
$ nc -l 1234
# in another terminal:
$ curl http://localhost:8000/runTestCase -H 'Content-Type: application/json' --data '{"endpointName": "getDoubleExample", "testCase": 0, "baseUrl": "http://127.0.0.1:1234"}'Fox maximum logging, add -e RUST_LOG=debug to the docker run command.
- Ensure you've installed
rustupas indicated in the Development section - Generate all
test-cases.jsonandverification-client-api.jsonfiles./gradlew compileTestCasesJson compileIr
- Start the server on
http://0.0.0.0:8000cargo run --package conjure-verification-client -- \ verification-client-api/build/test-cases.json \ verification-client-api/build/conjure-ir/verification-client-api.conjure.json