]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Allow unit tests to customize their initialization code (#1423)
authorAlex Rousskov <rousskov@measurement-factory.com>
Sat, 22 Jul 2023 22:30:39 +0000 (22:30 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Sat, 22 Jul 2023 22:30:49 +0000 (22:30 +0000)
CppUnit provides TestFixture::setUp() and tearDown() methods, but those
methods are executed before and after _each_ test case. Many single
TestFixture-derived classes register many test cases that need to run
some test program setup/initialization code just once. Counting past
setUp() calls would increase noise and likely introduce bugs.

Some of our test cases may actually need before/after cleanup -- the
functionality already provided by TestFixture::setUp()/tearDown()
methods.  Moreover, when multiple TestFixture-derived classes share the
same test executable, their collections of test cases are executed in
essentially random order (see commit 27685ef). In those use cases,
insuring one-time initialization via setUp() hacks would be especially
awkward and error-prone.

With this solution, a test program with custom needs just needs to
define a TestProgram-derived class that implements its one-time startup
logic. The same TestProgram class hierarchy might also prove useful in
future custom test execution adjustments.

Also migrated away from the "include main()" unit test design to avoid
adding risky hacks that register custom TestProgram-derived classes and
to reduce "magic" in test code (while following our style guidelines).
Every test programs now declares its own (trivial) main() rather than
getting it from include/unitTestMain.h.

41 files changed:
compat/testPreCompiler.cc
include/unitTestMain.h
lib/tests/testRFC1738.cc
src/tests/testACLMaxUserIP.cc
src/tests/testAuth.cc
src/tests/testBoilerplate.cc
src/tests/testCacheManager.cc
src/tests/testCharacterSet.cc
src/tests/testClpMap.cc
src/tests/testConfigParser.cc
src/tests/testDiskIO.cc
src/tests/testEnumIterator.cc
src/tests/testEvent.cc
src/tests/testEventLoop.cc
src/tests/testHttp1Parser.cc
src/tests/testHttpReply.cc
src/tests/testHttpRequest.cc
src/tests/testHttpRequestMethod.cc
src/tests/testIcmp.cc
src/tests/testIpAddress.cc
src/tests/testLookupTable.cc
src/tests/testMath.cc
src/tests/testMem.cc
src/tests/testNetDb.cc
src/tests/testPackableStream.cc
src/tests/testRFC1035.cc
src/tests/testRandomUuid.cc
src/tests/testRefCount.cc
src/tests/testRock.cc
src/tests/testSBuf.cc
src/tests/testSBufList.cc
src/tests/testStatHist.cc
src/tests/testStore.cc
src/tests/testStoreController.cc
src/tests/testStoreHashIndex.cc
src/tests/testString.cc
src/tests/testTokenizer.cc
src/tests/testURL.cc
src/tests/testUfs.cc
src/tests/testUriScheme.cc
src/tests/testYesNoNone.cc

index 2a76fb4e83102c148a04f5b5f76ebb2415f65e39..a15e3c55e21a5ad78e5c03aec5485ab229f7f905 100644 (file)
@@ -193,3 +193,9 @@ TestPreCompiler::testIfDefOr()
     CPPUNIT_ASSERT(!undefinedOrUndefinedC);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 035d3d85640e1bd00213022d3ff10c8fe90ad45c..aae54397ccd1418f5ab1cf76c0f17472a229073d 100644 (file)
 #include <cppunit/TestResultCollector.h>
 #include <cppunit/TestRunner.h>
 
+/// implements test program's main() function while enabling customization
+class TestProgram
+{
+public:
+    virtual ~TestProgram() = default;
+
+    /// Runs before all tests.
+    /// Does nothing by default.
+    virtual void startup() {}
+
+    /// Implements main(), combining all the steps.
+    /// Must be called from main().
+    /// \returns desired main() result.
+    int run(int argc, char *argv[]);
+
+private:
+    bool runTests();
+};
+
 int
-main(int, char *[])
+TestProgram::run(int, char *[])
 {
 #if ENABLE_DEBUG_SECTION
     Debug::Levels[ENABLE_DEBUG_SECTION] = 99;
 #endif
 
+    startup();
+    const auto result = runTests();
+    return result ? 0 : 1;
+}
+
+/// runs all tests registered with CPPUNIT_TEST_SUITE_REGISTRATION() calls
+/// \returns whether all tests were successful
+bool
+TestProgram::runTests()
+{
     // Create the event manager and test controller
     CPPUNIT_NS::TestResult controller;
 
@@ -51,7 +80,7 @@ main(int, char *[])
     CPPUNIT_NS::CompilerOutputter outputter( &result, std::cerr );
     outputter.write();
 
-    return result.wasSuccessful() ? 0 : 1;
+    return result.wasSuccessful();
 }
 
 #endif /* SQUID_INCLUDE_UNITTESTMAIN_H */
index 93d715783cae861ee1b9f96e399c91c487ab3838..ab3e4f3a6c69e14c87889dc4527be0a183c82641 100644 (file)
@@ -173,3 +173,9 @@ void TestRfc1738::PercentZeroNullDecoding()
     xfree(unescaped_str);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index e2b610968b78ac7b5f84dd05cc4a1ead6b2facda..8878a9ee0fbd048a91d83624523d3dc53851d13e 100644 (file)
@@ -32,9 +32,6 @@ class TestACLMaxUserIP : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testParseLine);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testDefaults();
     void testParseLine();
@@ -56,10 +53,17 @@ TestACLMaxUserIP::testDefaults()
     CPPUNIT_ASSERT_EQUAL(false,anACL.valid());
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
+
 void
-TestACLMaxUserIP::setUp()
+MyTestProgram::startup()
 {
-    CPPUNIT_NS::TestFixture::setUp();
     Acl::RegisterMaker("max_user_ip", [](Acl::TypeName name)->ACL* { return new ACLMaxUserIP(name); });
 }
 
@@ -86,5 +90,11 @@ TestACLMaxUserIP::testParseLine()
     xfree(line);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
 #endif /* USE_AUTH */
 
index a40f69a739c6ae30135ec13b4a079c6096f14d89..00e89d1dccff0d913f50f3e435ffceae8fc3ec95 100644 (file)
@@ -286,5 +286,12 @@ TestAuthNegotiateUserRequest::username()
 }
 
 #endif /* HAVE_AUTH_MODULE_NEGOTIATE */
+
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
 #endif /* USE_AUTH */
 
index 07e23f798f8e0a57129b68e0661bf59db45f7352..25449411e478bc0a00ef18af211c31ee6e3c0aba 100644 (file)
@@ -20,3 +20,9 @@ TestBoilerplate::testDemonstration()
     CPPUNIT_ASSERT_EQUAL(0, 0);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index c92124810257f8e4d4262600da2d76f1280fb0ab..aa2aa7450f8cd955ddac1aafb8e804bdb53133c7 100644 (file)
@@ -27,9 +27,6 @@ class TestCacheManager : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testParseUrl);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testCreate();
     void testRegister();
@@ -45,9 +42,16 @@ public:
     void ParseUrl(const AnyP::Uri &u) { CacheManager::ParseUrl(u); }
 };
 
-/* init memory pools */
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
 
-void TestCacheManager::setUp()
+void
+MyTestProgram::startup()
 {
     Mem::Init();
     AnyP::UriScheme::Init();
@@ -238,3 +242,9 @@ TestCacheManager::testParseUrl()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index faddaabd24db10cc308d5096875e0cfd31d3b14e..09f2f88b54f876009d54ee3948ae4f58700168c3 100644 (file)
@@ -143,3 +143,9 @@ TestCharacterSet::CharacterSetSubtract()
     CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample - CharacterSet(nullptr, "qz"));
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 7e6e9361f83d611580914366b96e5f57017e5fce..b15ae2e182908159c0f298be972a640d6430e925 100644 (file)
@@ -32,9 +32,6 @@ class TestClpMap: public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST( testRangeLoopTraversal );
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     using Map = ClpMap<std::string, int>;
 
@@ -104,12 +101,6 @@ TestClpMap::addOneEntry(Map &m, const Map::mapped_type value, const Map::Ttl ttl
     CPPUNIT_ASSERT_EQUAL(value, *m.get(key));
 }
 
-void
-TestClpMap::setUp()
-{
-    squid_curtime = time(nullptr);
-}
-
 void
 TestClpMap::testPutGetDelete()
 {
@@ -387,3 +378,17 @@ TestClpMap::testRangeLoopTraversal()
     CPPUNIT_ASSERT_EQUAL(expectedEntryCount, iterations);
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override { squid_curtime = time(nullptr); }
+};
+
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 40804c71351833626730d33b69df9ec881e6673f..3a8e1a63a672e6f3df7cfc2bfb1f0970dc8adb7d 100644 (file)
@@ -22,9 +22,6 @@ class TestConfigParser : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testParseQuoted);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     bool doParseQuotedTest(const char *, const char *);
     void testParseQuoted();
@@ -34,10 +31,6 @@ CPPUNIT_TEST_SUITE_REGISTRATION( TestConfigParser );
 
 int shutting_down = 0;
 
-void TestConfigParser::setUp()
-{
-}
-
 bool TestConfigParser::doParseQuotedTest(const char *s, const char *expectInterp)
 {
     char cfgline[2048];
@@ -96,3 +89,9 @@ void TestConfigParser::testParseQuoted()
     CPPUNIT_ASSERT_EQUAL(true, doParseQuotedTest("\"\\\\\"", "\\"));
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index b158e2cc1f358540588136113312aa3e67aa9f0b..5828b0aad69bf9d17a7d4ba0d133fc49a00e857a 100644 (file)
@@ -29,17 +29,22 @@ class TestDiskIO : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testFindDefault);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testFindDefault();
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION( TestDiskIO );
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
+
 void
-TestDiskIO::setUp()
+MyTestProgram::startup()
 {
     Mem::Init();
     DiskIOModule::SetupAllModules();
@@ -58,3 +63,9 @@ TestDiskIO::testFindDefault()
 #endif
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index a36eb827625d95e5e4daced352468a9983e2a39f..6d25a760b71f9d9c131a58c966584a2980192a56 100644 (file)
@@ -162,3 +162,9 @@ TestEnumIterator::testUnsignedEnum()
     CPPUNIT_ASSERT_EQUAL(5,j);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 7bf8178ed6b544edf233ca93359eae22a291c117..cdacda932de0776a1c184b8d2af4ea71a1e5594f 100644 (file)
@@ -28,9 +28,6 @@ class TestEvent : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testCancel);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testCreate();
     void testDump();
@@ -42,14 +39,6 @@ protected:
 
 CPPUNIT_TEST_SUITE_REGISTRATION( TestEvent );
 
-/* init legacy static-initialized modules */
-
-void
-TestEvent::setUp()
-{
-    Mem::Init();
-}
-
 /*
  * Test creating a Scheduler
  */
@@ -180,3 +169,17 @@ TestEvent::testSingleton()
     CPPUNIT_ASSERT(nullptr != scheduler);
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override { Mem::Init(); }
+};
+
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 91792a2c149cf8fdf4c15ed92ac27901cd5d1b2f..65ea78f9e91fc705e54c102478f8b746041e41ea 100644 (file)
@@ -206,3 +206,9 @@ TestEventLoop::testSetPrimaryEngine()
     CPPUNIT_ASSERT_EQUAL(0, second_engine.lasttimeout);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 1c7331069c5d10734f4627477b0130f0d735cfc0..739218b34e700ee5e660cf29ce61750547bec1b2 100644 (file)
@@ -1194,3 +1194,9 @@ TestHttp1Parser::testDripFeed()
 
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 5730b68da882e6844ee2a31b42e8bf07f487c0ee..7cd3d1b0226519dbc5f73d0b10672bcec9404ea8 100644 (file)
@@ -22,9 +22,6 @@ class TestHttpReply : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testSanityCheckFirstLine);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testSanityCheckFirstLine();
 };
@@ -44,8 +41,16 @@ MemObject::endOffset() const
 
 /* end */
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
+
 void
-TestHttpReply::setUp()
+MyTestProgram::startup()
 {
     Mem::Init();
     httpHeaderInitModule();
@@ -215,3 +220,9 @@ TestHttpReply::testSanityCheckFirstLine()
     error = Http::scNone;
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index c07821e18ccab78a9c351b1d244d9238e85fed09..d01383b74d2fe07527e98ac3891048168a8e0b64 100644 (file)
@@ -24,9 +24,6 @@ class TestHttpRequest : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testSanityCheckStartLine);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testCreateFromUrl();
     void testIPv6HostColonBug();
@@ -43,10 +40,16 @@ public:
     bool doSanityCheckStartLine(const char *b, const size_t h, Http::StatusCode *e) { return sanityCheckStartLine(b,h,e); };
 };
 
-/* init memory pools */
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
 
 void
-TestHttpRequest::setUp()
+MyTestProgram::startup()
 {
     Mem::Init();
     AnyP::UriScheme::Init();
@@ -211,3 +214,9 @@ TestHttpRequest::testSanityCheckStartLine()
     error = Http::scNone;
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 8d36ed9862949b0f133a2492fb11fffe86ab960f..bc09abfbabe0df6c6bb650b05c8287912b6a67ee 100644 (file)
@@ -194,3 +194,5 @@ TestHttpRequestMethod::testStream()
     CPPUNIT_ASSERT_EQUAL(String("get"), String(buffer2.str().c_str()));
 }
 
+// This test uses main() from ./testHttpRequest.cc.
+
index d6885af74efbbb7e9119a3281b20eb166e886104..5029cc4cd717e465eba262158ab2e93f7d535f4a 100644 (file)
@@ -155,3 +155,9 @@ TestIcmp::testHops()
 #endif
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 9b5d5c970dfe48e4b8317f7295201efa2a68fe29..f9b549a6591a7580fa1f14860754b9cc95b3fbe5 100644 (file)
@@ -799,3 +799,9 @@ TestIpAddress::testBugNullingDisplay()
 
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index c194954617b5e99dbc35e972cd00fc4213e75993..7cade48dcc1c5d479b8472e3bc85d211aaf09722 100644 (file)
@@ -66,3 +66,9 @@ TestLookupTable::testLookupTableLookup()
     CPPUNIT_ASSERT_EQUAL(lt.lookup(SBuf("eleventy")), ENUM_INVALID);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 63746811ed296cd2b12fc80b929df51ffc4d882c..c52cf8a992cc8429ae17f607c0fc9c402cf7ccd3 100644 (file)
@@ -265,3 +265,9 @@ TestMath::testNaturalSum()
     CPPUNIT_ASSERT_EQUAL(expires, result);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index ba8f5dcfcafcca93ff566c9c2a8fe18fef811abd..e2af4f116831ea9faf384d2397843675211bcf6c 100644 (file)
@@ -80,3 +80,9 @@ TestMem::testMemProxy()
     CPPUNIT_ASSERT_EQUAL(otherthing->aValue, 0);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 26373e2efdbf3d0359bfeffeab3952fb7e71d875..7b043c66cf8cf763f79f6a24047828e68a5d7765 100644 (file)
@@ -64,3 +64,9 @@ TestNetDb::testConstruct()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 8df7758627f7b3999cc27d7db678e7dc47ea141f..d89adb98be9e1f310dbe01cf17ead4d8a9a6516d 100644 (file)
@@ -22,22 +22,12 @@ class TestPackableStream : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testGetStream);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testGetStream();
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION( TestPackableStream );
 
-/* init memory pools */
-
-void TestPackableStream::setUp()
-{
-    Mem::Init();
-}
-
 // TODO: test streaming to a MemBuf as well.
 
 void
@@ -72,3 +62,5 @@ TestPackableStream::testGetStream()
     Store::FreeMemory();
 }
 
+// This test uses main() from ./testStore.cc.
+
index 0a23323fcbd656b86057a732d947b61e093f5610..274ac457a67bbb34d20b36d94b8cb19da7080fb6 100644 (file)
@@ -162,3 +162,9 @@ void TestRfc1035::testBugPacketHeadersOnly()
     CPPUNIT_ASSERT(msg == nullptr);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index a9ec87335e4dfb5f629090d4f70a0bcfc22ec105..ae7991c4a4b2105826665f610ba62574027d3596 100644 (file)
@@ -90,3 +90,9 @@ TestRandomUuid::testInvalidIds()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index f463f1aa4f5952d6d115c590eb099148000add02..8a7cf3b4a25f4b64bce0f6491af33d88f5eb2dbe 100644 (file)
@@ -196,3 +196,9 @@ TestRefCount::testDoubleInheritToSingleInherit()
     CPPUNIT_ASSERT_EQUAL(1, _ToRefCount::Instances);
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 69c15875ce701b26034f95df127ff31a75768bcf..0eace9fd61a6243641b5d206433d5f7ef9edbe64 100644 (file)
@@ -69,10 +69,6 @@ private:
 };
 CPPUNIT_TEST_SUITE_REGISTRATION(TestRock);
 
-extern REMOVALPOLICYCREATE createRemovalPolicy_lru;
-
-static char cwd[MAXPATHLEN];
-
 static void
 addSwapDir(TestRock::SwapDirPointer aStore)
 {
@@ -89,22 +85,12 @@ TestRock::setUp()
     if (0 > system ("rm -rf " TESTDIR))
         throw std::runtime_error("Failed to clean test work directory");
 
-    Config.memShared.defaultTo(false);
-    Config.shmLocking.defaultTo(false);
-
-    // use current directory for shared segments (on path-based OSes)
-    Ipc::Mem::Segment::BasePath = getcwd(cwd,MAXPATHLEN);
-    if (Ipc::Mem::Segment::BasePath == nullptr)
-        Ipc::Mem::Segment::BasePath = ".";
-
     Store::Init();
 
     store = new Rock::SwapDir();
 
     addSwapDir(store);
 
-    commonInit();
-
     char *path=xstrdup(TESTDIR);
 
     char *config_line=xstrdup("10 max-size=16384");
@@ -147,42 +133,6 @@ TestRock::tearDown()
         throw std::runtime_error("Failed to clean test work directory");
 }
 
-void
-TestRock::commonInit()
-{
-    static bool inited = false;
-
-    if (inited)
-        return;
-
-    Config.Store.avgObjectSize = 1024;
-    Config.Store.objectsPerBucket = 20;
-    Config.Store.maxObjectSize = 2048;
-
-    Config.store_dir_select_algorithm = xstrdup("round-robin");
-
-    Config.replPolicy = new RemovalPolicySettings;
-    Config.replPolicy->type = xstrdup("lru");
-    Config.replPolicy->args = nullptr;
-
-    /* garh garh */
-    storeReplAdd("lru", createRemovalPolicy_lru);
-
-    visible_appname_string = xstrdup(APP_FULLNAME);
-
-    Mem::Init();
-
-    fde::Init();
-
-    comm_init();
-
-    httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */
-
-    mem_policy = createRemovalPolicy(Config.replPolicy);
-
-    inited = true;
-}
-
 void
 TestRock::storeInit()
 {
@@ -363,3 +313,53 @@ TestRock::testRockSwapOut()
     }
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
+
+void
+MyTestProgram::startup()
+{
+    Config.memShared.defaultTo(false);
+    Config.shmLocking.defaultTo(false);
+
+    // use current directory for shared segments (on path-based OSes)
+    static char cwd[MAXPATHLEN];
+    Ipc::Mem::Segment::BasePath = getcwd(cwd, MAXPATHLEN);
+    if (!Ipc::Mem::Segment::BasePath)
+        Ipc::Mem::Segment::BasePath = ".";
+
+    Config.Store.avgObjectSize = 1024;
+    Config.Store.objectsPerBucket = 20;
+    Config.Store.maxObjectSize = 2048;
+
+    Config.store_dir_select_algorithm = xstrdup("round-robin");
+
+    Config.replPolicy = new RemovalPolicySettings;
+    Config.replPolicy->type = xstrdup("lru");
+    Config.replPolicy->args = nullptr;
+
+    /* garh garh */
+    extern REMOVALPOLICYCREATE createRemovalPolicy_lru;
+    storeReplAdd("lru", createRemovalPolicy_lru);
+
+    visible_appname_string = xstrdup(APP_FULLNAME);
+
+    Mem::Init();
+    fde::Init();
+    comm_init();
+    httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */
+
+    mem_policy = createRemovalPolicy(Config.replPolicy);
+}
+
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 75794ae7877a279f91dd4545e75204b78e82ee03..e48a32e727073383301f573b0e7dfa7520c8d5e1 100644 (file)
@@ -1190,3 +1190,9 @@ TestSBuf::testSBufHash()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index dc9f38ac687acae1ac25f9faf3ba254c49e83bc7..0620999bad42864b276718ccbb8579ba03e265d3 100644 (file)
@@ -62,3 +62,9 @@ TestSBufList::testSBufListJoin()
 
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 0ba18753ff2a1b4e9931b72da341fd2186db8e39..10a061c45442787abd91960fca339ce46a2d384d 100644 (file)
@@ -120,3 +120,9 @@ TestStatHist::testStatHistSum()
 
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 7538f0d8d28aa0c2ffa9cda03dfa7f7779a6ff00..54e1c96ccddeda8fb1d63eadaa7bca812a1f86b9 100644 (file)
@@ -203,3 +203,17 @@ TestStore::testSwapMetaTypeClassification()
     CPPUNIT_ASSERT(Store::HonoredSwapMetaType(Store::RawSwapMetaTypeTop()));
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override { Mem::Init(); }
+};
+
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 39596b948dbab0ae93765dbcb8d9f5df43cef68f..06e8f8fbb0b6eeadaaac7cbac25c6b6d6b9f6889 100644 (file)
@@ -199,3 +199,5 @@ TestStoreController::testSearch()
     Store::FreeMemory();
 }
 
+// This test uses main() from ./testStore.cc.
+
index 2349d4c86e757ec354317dd980a2ca974d3489a0..72813338de39197d3e56572395e850c60956d2b5 100644 (file)
@@ -199,3 +199,5 @@ TestStoreHashIndex::testSearch()
     Store::FreeMemory();
 }
 
+// This test uses main() from ./testStore.cc.
+
index fad4dfff720898f8bc466f27a86f97a0bd98a288..7fa246ee8a46b36c246354b556d0207d4a9b724f 100644 (file)
@@ -26,9 +26,6 @@ class TestString : public CPPUNIT_NS::TestFixture
 
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testCmpDefault();
     void testCmpEmptyString();
@@ -37,14 +34,6 @@ protected:
 };
 CPPUNIT_TEST_SUITE_REGISTRATION(TestString);
 
-/* init memory pools */
-
-void
-TestString::setUp()
-{
-    Mem::Init();
-}
-
 void
 TestString::testCmpDefault()
 {
@@ -93,3 +82,17 @@ void TestString::testSubstr()
     CPPUNIT_ASSERT(check == ref);
 }
 
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override { Mem::Init(); }
+};
+
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 6e3d9d499ed1dac856031b41a12d6cb39469dc68..e69fec4f95126deafeed7c5326655b6bd8f21aa2 100644 (file)
@@ -327,3 +327,9 @@ TestTokenizer::testTokenizerInt64()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 6b5b57f183ad25d8625767b65a6f3ffb8223e2e7..2600a72a2009a522e476b55819abcc4059f764c6 100644 (file)
@@ -27,19 +27,22 @@ class TestUri : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testDefaultConstructor);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testConstructScheme();
     void testDefaultConstructor();
 };
 CPPUNIT_TEST_SUITE_REGISTRATION(TestUri);
 
-/* init memory pools */
+/// customizes our test setup
+class MyTestProgram: public TestProgram
+{
+public:
+    /* TestProgram API */
+    void startup() override;
+};
 
 void
-TestUri::setUp()
+MyTestProgram::startup()
 {
     Mem::Init();
     AnyP::UriScheme::Init();
@@ -78,3 +81,9 @@ TestUri::testDefaultConstructor()
     delete urlPointer;
 }
 
+int
+main(int argc, char *argv[])
+{
+    return MyTestProgram().run(argc, argv);
+}
+
index 659d224c570e757b2d78b456d6c694bbc81294ce..cfdad7498f98e368334c6f7fba87daf2b8c6de37 100644 (file)
@@ -266,3 +266,9 @@ TestUfs::testUfsDefaultEngine()
         throw std::runtime_error("Failed to clean test work directory");
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+
index 856fa9688dcb62589afc87583614f2ac62019d8e..2bc3dc0ec985366e7ad9aca989131a7965d7ebe9 100644 (file)
@@ -31,9 +31,6 @@ class TestUriScheme : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testStream);
     CPPUNIT_TEST_SUITE_END();
 
-public:
-    void setUp() override;
-
 protected:
     void testAssignFromprotocol_t();
     void testCastToprotocol_t();
@@ -153,10 +150,5 @@ TestUriScheme::testStream()
     CPPUNIT_ASSERT_EQUAL(http_str, from_buf);
 }
 
-void
-TestUriScheme::setUp()
-{
-    Mem::Init();
-    AnyP::UriScheme::Init();
-}
+// This test uses main() from ./testURL.cc.
 
index 1f7b05880aef7bd5e86de14a36ec63c5517db887..bf535fa866b88317b93b4776a73211946d81d47e 100644 (file)
@@ -71,3 +71,9 @@ TestYesNoNone::testBasics()
     }
 }
 
+int
+main(int argc, char *argv[])
+{
+    return TestProgram().run(argc, argv);
+}
+