How to use foundationdb unit test?

I noticed that there are some unit tests in foundationdb’s source code(link), but I do not know how to run them, could someone please give me some advice on how to build and run them? Thanks in advance

1 Like

Unit tests can be run in simulation via

fdbserver -r simulation -f <specfile> [-s <randomseed>] [-b <on|off>]

where a spec file invokes the UnitTests workload with a prefix pattern to match against unit test names to determine the set of tests to run. The spec file can also pass test parameters, one per line, with the same name=value syntax as the testsMatching line which populates the params object that is available within the scope of a unit test.

This file serves as a template for running a specific unit test:

In FDB 7.0 there is also a faster path to running unit tests in normal, non-simulation mode, which is

fdbserver -r unittests -f <prefixPattern> [--test_param name=value]...

such as

fdbserver -r unittests -f /status/json/builder
2 Likes

@SteavedHams man, I build my fdb based on commit_id d183b0c7c, and when I run the command ./bin/fdbserver -r unittests -f /status/json/builder, it just returned ERROR: Unknown role 'unittests'

My apologies, the -r unittests method is new for FDB 7.0, prior to that you must use the other method.

I would be grateful if u can tell me where is the documentation about “the other method”, because I really cant find it :disappointed_relieved:

My post above had 2 usage forms, you tried the second one at the end of the post. You’ll have to use the first one, from the beginning of the post.

thx a lot, so before version 7.0 there is no way to test without simulation, right?

There actually is, but there are some quirks to it. You can use -r test instead of -r simulation along with -f <specfile>, but this mode requires a cluster file because it assumes the test is executing a workload against a live cluster. Even if the test spec says useDB = no a cluster file will still be required. Since most unit tests do not use a cluster, you can just pass a dummy cluster file with contents such as 1:1@1.1.1.1:1.

1 Like

Is there a way to run the same simulation repeatelly (with different seeds), until it fails?