diff options
-rw-r--r-- | lib/backupstore/StoreTestUtils.cpp | 48 | ||||
-rw-r--r-- | lib/backupstore/StoreTestUtils.h | 8 | ||||
-rw-r--r-- | test/backupstorefix/testbackupstorefix.cpp | 57 | ||||
-rw-r--r-- | test/bbackupd/testbbackupd.cpp | 40 |
4 files changed, 84 insertions, 69 deletions
diff --git a/lib/backupstore/StoreTestUtils.cpp b/lib/backupstore/StoreTestUtils.cpp index abfddce8..48b6370c 100644 --- a/lib/backupstore/StoreTestUtils.cpp +++ b/lib/backupstore/StoreTestUtils.cpp @@ -54,7 +54,7 @@ bool delete_account() } std::vector<uint32_t> ExpectedRefCounts; -int bbstored_pid = 0; +int bbstored_pid = 0, bbackupd_pid = 0; std::string OriginalWorkingDir; bool setUp(const char* function_name) @@ -381,4 +381,50 @@ bool StopServer(bool wait_for_process) return true; } +#define FAIL { \ + /* \ + std::ostringstream os; \ + os << "failed at " << __FUNCTION__ << ":" << __LINE__; \ + s_test_status[current_test_name] = os.str(); \ + return fail(); \ + */ \ + return false; \ +} + +bool StartClient(const std::string& bbackupd_conf_file) +{ + TEST_THAT_OR(bbackupd_pid == 0, FAIL); + + std::string cmd = BBACKUPD " " + bbackupd_args + " " + bbackupd_conf_file; + bbackupd_pid = LaunchServer(cmd.c_str(), "testfiles/bbackupd.pid"); + + TEST_THAT_OR(bbackupd_pid != -1 && bbackupd_pid != 0, FAIL); + ::sleep(1); + TEST_THAT_OR(ServerIsAlive(bbackupd_pid), FAIL); + + return true; +} + +bool StopClient(bool wait_for_process) +{ + TEST_THAT_OR(bbackupd_pid != 0, FAIL); + TEST_THAT_OR(ServerIsAlive(bbackupd_pid), FAIL); + TEST_THAT_OR(KillServer(bbackupd_pid, wait_for_process), FAIL); + ::sleep(1); + + TEST_THAT_OR(!ServerIsAlive(bbackupd_pid), FAIL); + bbackupd_pid = 0; + #ifdef WIN32 + int unlink_result = unlink("testfiles/bbackupd.pid"); + TEST_EQUAL_LINE(0, unlink_result, "unlink testfiles/bbackupd.pid"); + if(unlink_result != 0) + { + FAIL; + } + #else + TestRemoteProcessMemLeaks("bbackupd.memleaks"); + #endif + + return true; +} diff --git a/lib/backupstore/StoreTestUtils.h b/lib/backupstore/StoreTestUtils.h index 335021d3..0740b3ec 100644 --- a/lib/backupstore/StoreTestUtils.h +++ b/lib/backupstore/StoreTestUtils.h @@ -21,7 +21,7 @@ class TLSContext; extern std::vector<uint32_t> ExpectedRefCounts; //! Holds the PID of the currently running bbstored test server. -extern int bbstored_pid; +extern int bbstored_pid, bbackupd_pid; //! Sets up (cleans up) test environment at the start of every test. bool setUp(const char* function_name); @@ -80,6 +80,12 @@ bool StartServer(); //! Stops the currently running bbstored test server. bool StopServer(bool wait_for_process = false); +//! Starts the bbackupd client running, which must not already be running. +bool StartClient(const std::string& bbackupd_conf_file = "testfiles/bbackupd.conf"); + +//! Stops the currently running bbackupd client. +bool StopClient(bool wait_for_process = false); + //! Creates the standard test account, for example after delete_account(). bool create_account(int soft, int hard); diff --git a/test/backupstorefix/testbackupstorefix.cpp b/test/backupstorefix/testbackupstorefix.cpp index 6ae78bc9..4c66b079 100644 --- a/test/backupstorefix/testbackupstorefix.cpp +++ b/test/backupstorefix/testbackupstorefix.cpp @@ -36,6 +36,7 @@ #include "RaidFileWrite.h" #include "ServerControl.h" #include "StoreStructure.h" +#include "StoreTestUtils.h" #include "ZeroStream.h" #include "MemLeakFindOn.h" @@ -536,24 +537,8 @@ int test(int argc, const char *argv[]) "raidfile is corrupted doesn't crash"); // Start the bbstored server - BOX_TRACE(" === Starting bbstored server: " BBSTORED - " testfiles/bbstored.conf"); - int bbstored_pid = LaunchServer(BBSTORED " testfiles/bbstored.conf", - "testfiles/bbstored.pid"); - TEST_THAT(bbstored_pid > 0); - if (bbstored_pid <= 0) return 1; - - ::sleep(1); - TEST_THAT(ServerIsAlive(bbstored_pid)); - - std::string cmd = BBACKUPD " " + bbackupd_args + - " testfiles/bbackupd.conf"; - int bbackupd_pid = LaunchServer(cmd, "testfiles/bbackupd.pid"); - TEST_THAT(bbackupd_pid > 0); - if (bbackupd_pid <= 0) return 1; - - ::safe_sleep(1); - TEST_THAT(ServerIsAlive(bbackupd_pid)); + TEST_THAT_OR(StartServer(), return 1); + TEST_THAT_OR(StartClient(), return 1); // Wait 4 more seconds for the files to be old enough // to upload @@ -563,13 +548,7 @@ int test(int argc, const char *argv[]) ::sync_and_wait(); // Stop bbackupd - #ifdef WIN32 - terminate_bbackupd(bbackupd_pid); - // implicit check for memory leaks - #else - TEST_THAT(KillServer(bbackupd_pid)); - TestRemoteProcessMemLeaks("bbackupd.memleaks"); - #endif + TEST_THAT_OR(StopClient(), return 1); BOX_INFO(" === Add a reference to a file that doesn't exist, check " "that it's removed"); @@ -670,6 +649,10 @@ int test(int argc, const char *argv[]) BOX_INFO(" === Delete an entry for an object from dir, change that " "object to be a patch, check it's deleted"); { + // Temporarily stop the server, so it doesn't repair the + // refcount error + TEST_THAT(StopServer()); + // Open dir and find entry int64_t delID = getID("Test1/cannes/ict/metegoguered/oats"); { @@ -749,10 +732,30 @@ int test(int argc, const char *argv[]) #endif // BOX_RELEASE_BUILD // Fix it - RUN_CHECK_INTERNAL(4); + // ERROR: Object 0x44 is unattached. + // ERROR: BlocksUsed changed from 284 to 282 + // ERROR: BlocksInCurrentFiles changed from 228 to 226 + // ERROR: NumCurrentFiles changed from 114 to 113 + // WARNING: Reference count of object 0x44 changed from 1 to 0 + RUN_CHECK_INTERNAL(5); + { + std::auto_ptr<BackupProtocolAccountUsage2> usage = + BackupProtocolLocal2(0x01234567, "test", + "backup/01234567/", 0, + false).QueryGetAccountUsage2(); + TEST_EQUAL(usage->GetNumCurrentFiles(), 113); + TEST_EQUAL(usage->GetNumDirectories(), 28); + TEST_EQUAL(usage->GetBlocksUsed(), 282); + TEST_EQUAL(usage->GetBlocksInCurrentFiles(), 226); + TEST_EQUAL(usage->GetBlocksInDirectories(), 56); + } + + // Start the server again, so testbackupstorefix.pl can + // run bbackupquery which connects to it. + TEST_THAT(StartServer()); // Check - TEST_THAT(::system(PERL_EXECUTABLE + TEST_THAT(::system(PERL_EXECUTABLE " testfiles/testbackupstorefix.pl check 1") == 0); diff --git a/test/bbackupd/testbbackupd.cpp b/test/bbackupd/testbbackupd.cpp index 12080fb5..19cd8a2f 100644 --- a/test/bbackupd/testbbackupd.cpp +++ b/test/bbackupd/testbbackupd.cpp @@ -107,46 +107,6 @@ void wait_for_backup_operation(const char* message) wait_for_operation(TIME_TO_WAIT_FOR_BACKUP_OPERATION, message); } -int bbackupd_pid = 0; - -bool StartClient(const std::string& bbackupd_conf_file = "testfiles/bbackupd.conf") -{ - TEST_THAT_OR(bbackupd_pid == 0, FAIL); - - std::string cmd = BBACKUPD " " + bbackupd_args + " " + bbackupd_conf_file; - bbackupd_pid = LaunchServer(cmd.c_str(), "testfiles/bbackupd.pid"); - - TEST_THAT_OR(bbackupd_pid != -1 && bbackupd_pid != 0, FAIL); - ::sleep(1); - TEST_THAT_OR(ServerIsAlive(bbackupd_pid), FAIL); - - return true; -} - -bool StopClient(bool wait_for_process = false) -{ - TEST_THAT_OR(bbackupd_pid != 0, FAIL); - TEST_THAT_OR(ServerIsAlive(bbackupd_pid), FAIL); - TEST_THAT_OR(KillServer(bbackupd_pid, wait_for_process), FAIL); - ::sleep(1); - - TEST_THAT_OR(!ServerIsAlive(bbackupd_pid), FAIL); - bbackupd_pid = 0; - - #ifdef WIN32 - int unlink_result = unlink("testfiles/bbackupd.pid"); - TEST_EQUAL_LINE(0, unlink_result, "unlink testfiles/bbackupd.pid"); - if(unlink_result != 0) - { - FAIL; - } - #else - TestRemoteProcessMemLeaks("bbackupd.memleaks"); - #endif - - return true; -} - #ifdef HAVE_SYS_XATTR_H bool readxattr_into_map(const char *filename, std::map<std::string,std::string> &rOutput) { |