Ledger API Test Tool¶
The Ledger API Test Tool is a command line tool for testing the correctness of implementations of the Ledger API, i.e. DAML ledgers. For example, it will show you if there are consistency or conformance problem with your implementation.
Its intended audience are developers of DAML ledgers, who are using the DAML Ledger Implementation Kit to develop a DAML ledger on top of their distributed-ledger or database of choice.
Use this tool to verify if your Ledger API endpoint conforms to the DA Ledger Model.
Downloading the tool¶
Run the following command to fetch the tool:
curl -L 'https://bintray.com/api/v1/content/digitalassetsdk/DigitalAssetSDK/com/daml/ledger/testtool/ledger-api-test-tool/$latest/ledger-api-test-tool-$latest.jar?bt_package=sdk-components' -o ledger-api-test-tool.jar
This will create a file ledger-api-test-tool.jar
in your current directory.
Extracting .dar
files required to run the tests¶
Before you can run the Ledger API test tool on your ledger, you need to load a specific set of DAML templates onto your ledger.
To obtain the corresponding
.dar
files, run:$ java -jar ledger-api-test-tool.jar --extract
This writes all
.dar
files required for the tests into the current directory.Load all
.dar
files into your Ledger.
Running the tool against a custom Ledger API endpoint¶
Run this command to test your Ledger API endpoint exposed at host <host>
and
at a port <port>
:
$ java -jar ledger-api-test-tool.jar <host>:<port>
For example
$ java -jar ledger-api-test-tool.jar localhost:6865
If any test embedded in the tool fails, it will print out details of the failure for further debugging.
Exploring options the tool provides¶
Run the tool with --help
flag to obtain the list of options the tool provides:
$ java -jar ledger-api-test-tool.jar --help
Selecting tests to run¶
Running the tool without any arguments runs the default tests. Use the following command line flags to select which tests to run:
--list
: print all available tests to the console--include
: only run the tests provided as argument--exclude
: do not run the tests provided as argument--all-tests
: run all default and optional tests. This flag can be combined with the--exclude
flag.
Examples (hitting a single participant at localhost:6865
):
TestA
¶$ java -jar ledger-api-test-tool.jar --include TestA localhost:6865
TestB
¶$ java -jar ledger-api-test-tool.jar --exclude TestB localhost:6865
$ java -jar ledger-api-test-tool.jar --all-tests localhost:6865
TestC
¶$ java -jar ledger-api-test-tool.jar --all-tests --exclude TestC
Try out the Ledger API Test Tool against DAML Sandbox¶
If you wanted to test out the tool, you can run it against DAML Sandbox. To do this:
$ java -jar ledger-api-test-tool.jar --extract $ daml sandbox -- *.dar $ java -jar ledger-api-test-tool.jar localhost:6865
This should always succeed, as the Sandbox is tested to correctly implement the Ledger API. This is useful if you do not have yet a custom Ledger API endpoint.
Testing your tool from continuous integration pipelines¶
To test your ledger in a CI pipeline, run it as part of your pipeline:
$ java -jar ledger-api-test-tool.jar localhost:6865 --all-tests --exclude=TimeIT,LotsOfPartiesIT,TransactionScaleIT $ echo $? 0
The reason for exclusion of these tests is listed below : TimeIT: Only relevant for a ledger implementation where time can be controlled, but not relevant for a realtime wallclock ledger implementation LotsOfPartiesIT: stresses the system by quickly creating a large number of parties. It can be run explicitly if you are intending to stress test the ledger, but need not be run for baseline functional conformance TransactionScaleIT: a transaction scaling test only to be run if particularly focusing on scalability and stress testing
The tool is tailored to be used in CI pipelines: as customary, when the tests succeed, it will produce minimal output and return the success exit code.
Using the tool with a known-to-be-faulty Ledger API implementation¶
Use flag --must-fail
if you expect one or more or the scenario tests to
fail. If enabled, the tool will return the success exit code when at least one
test fails, and it will return a failure exit code when all tests succeed:
java -jar ledger-api-test-tool.jar --must-fail localhost:6865
This is useful during development of a DAML ledger implementation, when tool needs to be used against a known-to-be-faulty implementation (e.g. in CI). It will still print information about failed tests.
Tuning the testing behaviour of the tool¶
Use the command line options --timeout-scale-factor
and
--command-submission-ttl-scale-factor
to tune timeouts applied by the tool.
- Set
--timeout-scale-factor
to a floating point value higher than 1.0 to make the tool wait longer for expected events coming from the DAML ledger implementation under test. Conversely use values smaller than 1.0 to make it wait shorter. - Set
--command-submission-ttl-scale-factor
to adjust the time-to-live of commands as represented by the MRT (Maximum Record Time) on the Ledger API. The default value is 1.0 and will be applied to the default TTL, which is the maximum TTL as returned by the LedgerConfigurationService. In any case, the used TTL value will be clipped to stay between the minimum and maximum TTL.
Verbose output¶
Use the command line option --verbose
to print full stacktraces on failures
Concurrent test runs¶
To minimize parallelized runs of tests, --concurrent-test-runs
can be set to 1 or 2.
The default value is the number of processors available