diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df1d9f2a2f..b27a7dfd9b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,6 +125,25 @@ pip3 install pre-commit pre-commit install ``` +## Unit Tests +To execute all unit tests: + +```rippled --unittest --unittest-jobs=``` + +(Note: Using multiple cores on a Mac M1 can cause spurious test failures. The +cause is still under investigation. If you observe this problem, try specifying fewer jobs.) + +To run a specific set of test suites: + +``` +rippled --unittest TestSuiteName +``` +Note: In this example, all tests with prefix `TestSuiteName` will be run, so if +`TestSuiteName1` and `TestSuiteName2` both exist, then both tests will run. +Alternatively, if the unit test name finds an exact match, it will stop +doing partial matches, i.e. if a unit test with a title of `TestSuiteName` +exists, then no other unit test will be executed, apart from `TestSuiteName`. + ## Avoid 1. Proliferation of nearly identical code. diff --git a/src/ripple/app/main/Main.cpp b/src/ripple/app/main/Main.cpp index 2ddb771b1e..c806bfb7da 100644 --- a/src/ripple/app/main/Main.cpp +++ b/src/ripple/app/main/Main.cpp @@ -431,9 +431,8 @@ run(int argc, char** argv) po::value()->implicit_value(""), "Perform unit tests. The optional argument specifies one or " "more comma-separated selectors. Each selector specifies a suite name, " - "full-name (lib.module.suite), module, or library " - "(checked in that " - "order).")( + "suite name prefix, full-name (lib.module.suite), module, or library " + "(checked in that order).")( "unittest-arg", po::value()->implicit_value(""), "Supplies an argument string to unit tests. If provided, this argument " diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index 2bd7074b2a..abd9ed56e8 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -26,7 +26,7 @@ namespace ripple { -class NFTokenBurn0_test : public beast::unit_test::suite +class NFTokenBurnBaseUtil_test : public beast::unit_test::suite { // Helper function that returns the owner count of an account root. static std::uint32_t @@ -815,39 +815,39 @@ public: } }; -class NFTokenBurn1_test : public NFTokenBurn0_test +class NFTokenBurnWOfixFungTokens_test : public NFTokenBurnBaseUtil_test { public: void run() override { - NFTokenBurn0_test::run(1); + NFTokenBurnBaseUtil_test::run(1); } }; -class NFTokenBurn2_test : public NFTokenBurn0_test +class NFTokenBurnWOFixTokenRemint_test : public NFTokenBurnBaseUtil_test { public: void run() override { - NFTokenBurn0_test::run(2); + NFTokenBurnBaseUtil_test::run(2); } }; -class NFTokenBurn3_test : public NFTokenBurn0_test +class NFTokenBurnAllFeatures_test : public NFTokenBurnBaseUtil_test { public: void run() override { - NFTokenBurn0_test::run(3, true); + NFTokenBurnBaseUtil_test::run(3, true); } }; -BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurn0, tx, ripple, 3); -BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurn1, tx, ripple, 3); -BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurn2, tx, ripple, 3); -BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurn3, tx, ripple, 3); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurnBaseUtil, tx, ripple, 3); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurnWOfixFungTokens, tx, ripple, 3); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurnWOFixTokenRemint, tx, ripple, 3); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBurnAllFeatures, tx, ripple, 3); } // namespace ripple diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index 2f029c5db1..399f6f54b9 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -27,7 +27,7 @@ namespace ripple { -class NFToken0_test : public beast::unit_test::suite +class NFTokenBaseUtil_test : public beast::unit_test::suite { FeatureBitset const disallowIncoming{featureDisallowIncoming}; @@ -6863,46 +6863,46 @@ public: } }; -class NFToken1_test : public NFToken0_test +class NFTokenDisallowIncoming_test : public NFTokenBaseUtil_test { void run() override { - NFToken0_test::run(1); + NFTokenBaseUtil_test::run(1); } }; -class NFToken2_test : public NFToken0_test +class NFTokenWOfixV1_test : public NFTokenBaseUtil_test { void run() override { - NFToken0_test::run(2); + NFTokenBaseUtil_test::run(2); } }; -class NFToken3_test : public NFToken0_test +class NFTokenWOTokenRemint_test : public NFTokenBaseUtil_test { void run() override { - NFToken0_test::run(3); + NFTokenBaseUtil_test::run(3); } }; -class NFToken4_test : public NFToken0_test +class NFTokenAllFeatures_test : public NFTokenBaseUtil_test { void run() override { - NFToken0_test::run(4, true); + NFTokenBaseUtil_test::run(4, true); } }; -BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2); -BEAST_DEFINE_TESTSUITE_PRIO(NFToken1, tx, ripple, 2); -BEAST_DEFINE_TESTSUITE_PRIO(NFToken2, tx, ripple, 2); -BEAST_DEFINE_TESTSUITE_PRIO(NFToken3, tx, ripple, 2); -BEAST_DEFINE_TESTSUITE_PRIO(NFToken4, tx, ripple, 2); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenDisallowIncoming, tx, ripple, 2); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenWOfixV1, tx, ripple, 2); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenWOTokenRemint, tx, ripple, 2); +BEAST_DEFINE_TESTSUITE_PRIO(NFTokenAllFeatures, tx, ripple, 2); } // namespace ripple diff --git a/src/test/app/Offer_test.cpp b/src/test/app/Offer_test.cpp index 25ca5a4b2d..95ffd9f3ae 100644 --- a/src/test/app/Offer_test.cpp +++ b/src/test/app/Offer_test.cpp @@ -27,7 +27,7 @@ namespace ripple { namespace test { -class Offer0_test : public beast::unit_test::suite +class OfferBaseUtil_test : public beast::unit_test::suite { XRPAmount reserve(jtx::Env& env, std::uint32_t count) @@ -5371,52 +5371,52 @@ public: } }; -class Offer1_test : public Offer0_test +class OfferWOFlowCross_test : public OfferBaseUtil_test { void run() override { - Offer0_test::run(1); + OfferBaseUtil_test::run(1); } }; -class Offer2_test : public Offer0_test +class OfferWTakerDryOffer_test : public OfferBaseUtil_test { void run() override { - Offer0_test::run(2); + OfferBaseUtil_test::run(2); } }; -class Offer3_test : public Offer0_test +class OfferWOSmallQOffers_test : public OfferBaseUtil_test { void run() override { - Offer0_test::run(3); + OfferBaseUtil_test::run(3); } }; -class Offer4_test : public Offer0_test +class OfferWOFillOrKill_test : public OfferBaseUtil_test { void run() override { - Offer0_test::run(4); + OfferBaseUtil_test::run(4); } }; -class Offer5_test : public Offer0_test +class OfferAllFeatures_test : public OfferBaseUtil_test { void run() override { - Offer0_test::run(5, true); + OfferBaseUtil_test::run(5, true); } }; -class Offer_manual_test : public Offer0_test +class Offer_manual_test : public OfferBaseUtil_test { void run() override @@ -5439,12 +5439,12 @@ class Offer_manual_test : public Offer0_test } }; -BEAST_DEFINE_TESTSUITE_PRIO(Offer0, tx, ripple, 4); -BEAST_DEFINE_TESTSUITE_PRIO(Offer1, tx, ripple, 4); -BEAST_DEFINE_TESTSUITE_PRIO(Offer2, tx, ripple, 4); -BEAST_DEFINE_TESTSUITE_PRIO(Offer3, tx, ripple, 4); -BEAST_DEFINE_TESTSUITE_PRIO(Offer4, tx, ripple, 4); -BEAST_DEFINE_TESTSUITE_PRIO(Offer5, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferBaseUtil, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferWOFlowCross, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferWTakerDryOffer, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferWOSmallQOffers, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferWOFillOrKill, tx, ripple, 4); +BEAST_DEFINE_TESTSUITE_PRIO(OfferAllFeatures, tx, ripple, 4); BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Offer_manual, tx, ripple, 20); } // namespace test diff --git a/src/test/app/TxQ_test.cpp b/src/test/app/TxQ_test.cpp index ac6bf56f06..ed94ffe186 100644 --- a/src/test/app/TxQ_test.cpp +++ b/src/test/app/TxQ_test.cpp @@ -35,7 +35,7 @@ namespace ripple { namespace test { -class TxQ1_test : public beast::unit_test::suite +class TxQPosNegFlows_test : public beast::unit_test::suite { void checkMetrics( @@ -4949,7 +4949,7 @@ public: } void - run2() + runMetaInfo() { testAcctInQueueButEmpty(); testRPC(); @@ -4970,17 +4970,17 @@ public: } }; -class TxQ2_test : public TxQ1_test +class TxQMetaInfo_test : public TxQPosNegFlows_test { void run() override { - run2(); + runMetaInfo(); } }; -BEAST_DEFINE_TESTSUITE_PRIO(TxQ1, app, ripple, 1); -BEAST_DEFINE_TESTSUITE_PRIO(TxQ2, app, ripple, 1); +BEAST_DEFINE_TESTSUITE_PRIO(TxQPosNegFlows, app, ripple, 1); +BEAST_DEFINE_TESTSUITE_PRIO(TxQMetaInfo, app, ripple, 1); } // namespace test } // namespace ripple