diff options
-rw-r--r-- | lib/backupstore/StoreTestUtils.cpp | 340 | ||||
-rw-r--r-- | lib/backupstore/StoreTestUtils.h | 79 | ||||
-rw-r--r-- | test/backupstore/testbackupstore.cpp | 317 |
3 files changed, 420 insertions, 316 deletions
diff --git a/lib/backupstore/StoreTestUtils.cpp b/lib/backupstore/StoreTestUtils.cpp new file mode 100644 index 00000000..69af043b --- /dev/null +++ b/lib/backupstore/StoreTestUtils.cpp @@ -0,0 +1,340 @@ +// -------------------------------------------------------------------------- +// +// File +// Name: StoreTestUtils.cpp +// Purpose: Utilities for housekeeping and checking a test store +// Created: 18/02/14 +// +// -------------------------------------------------------------------------- + +#include "Box.h" + +#include <cstdio> +#include <vector> + +#include "autogen_BackupProtocol.h" +#include "BoxPortsAndFiles.h" +#include "BackupStoreAccounts.h" +#include "BackupStoreAccountDatabase.h" +#include "BackupStoreConfigVerify.h" +#include "BackupStoreConstants.h" +#include "BackupStoreInfo.h" +#include "HousekeepStoreAccount.h" +#include "Logging.h" +#include "ServerControl.h" +#include "SocketStreamTLS.h" +#include "StoreTestUtils.h" +#include "TLSContext.h" +#include "Test.h" + +bool create_account(int soft, int hard) +{ + std::string errs; + std::auto_ptr<Configuration> config( + Configuration::LoadAndVerify + ("testfiles/bbstored.conf", &BackupConfigFileVerify, errs)); + BackupStoreAccountsControl control(*config); + Logging::Guard guard(Log::WARNING); + int result = control.CreateAccount(0x01234567, 0, soft, hard); + TEST_EQUAL(0, result); + return (result == 0); +} + +bool delete_account() +{ + std::string errs; + std::auto_ptr<Configuration> config( + Configuration::LoadAndVerify + ("testfiles/bbstored.conf", &BackupConfigFileVerify, errs)); + BackupStoreAccountsControl control(*config); + Logging::Guard guard(Log::WARNING); + TEST_THAT_THROWONFAIL(control.DeleteAccount(0x01234567, false) == 0); + return true; +} + +std::vector<uint32_t> ExpectedRefCounts; +int bbstored_pid = 0; + +bool setUp(const char* function_name) +{ + if (!run_only_named_tests.empty()) + { + bool run_this_test = false; + + for (std::list<std::string>::iterator + i = run_only_named_tests.begin(); + i != run_only_named_tests.end(); i++) + { + if (*i == function_name) + { + run_this_test = true; + break; + } + } + + if (!run_this_test) + { + // not in the list, so don't run it. + return false; + } + } + + printf("\n\n== %s ==\n", function_name); + + if (ServerIsAlive(bbstored_pid)) + { + StopServer(); + } + + TEST_THAT_THROWONFAIL(system("rm -rf testfiles/0_0 testfiles/0_1 " + "testfiles/0_2 testfiles/accounts.txt testfiles/test* " + "testfiles/file*") == 0); + TEST_THAT_THROWONFAIL(mkdir("testfiles/0_0", 0755) == 0); + TEST_THAT_THROWONFAIL(mkdir("testfiles/0_1", 0755) == 0); + TEST_THAT_THROWONFAIL(mkdir("testfiles/0_2", 0755) == 0); + TEST_THAT_THROWONFAIL(system("touch testfiles/accounts.txt") == 0); + TEST_THAT_THROWONFAIL(create_account(10000, 20000)); + + ExpectedRefCounts.resize(BACKUPSTORE_ROOT_DIRECTORY_ID + 1); + set_refcount(BACKUPSTORE_ROOT_DIRECTORY_ID, 1); + + return true; +} + +void tearDown() +{ + if (ServerIsAlive(bbstored_pid)) + { + StopServer(); + } + + if (FileExists("testfiles/0_0/backup/01234567/info.rf")) + { + TEST_THAT(check_reference_counts()); + TEST_THAT(check_account()); + } +} + +void set_refcount(int64_t ObjectID, uint32_t RefCount) +{ + if ((int64_t)ExpectedRefCounts.size() <= ObjectID) + { + ExpectedRefCounts.resize(ObjectID + 1, 0); + } + ExpectedRefCounts[ObjectID] = RefCount; +} + +void init_context(TLSContext& rContext) +{ + rContext.Initialise(false /* client */, + "testfiles/clientCerts.pem", + "testfiles/clientPrivKey.pem", + "testfiles/clientTrustedCAs.pem"); +} + +std::auto_ptr<SocketStreamTLS> open_conn(const char *hostname, + TLSContext& rContext) +{ + init_context(rContext); + std::auto_ptr<SocketStreamTLS> conn(new SocketStreamTLS); + conn->Open(rContext, Socket::TypeINET, hostname, + BOX_PORT_BBSTORED_TEST); + return conn; +} + +std::auto_ptr<BackupProtocolClient> test_server_login(const char *hostname, + TLSContext& rContext, std::auto_ptr<SocketStreamTLS>& rapConn) +{ + rapConn = open_conn(hostname, rContext); + + // Make a protocol + std::auto_ptr<BackupProtocolClient> protocol(new + BackupProtocolClient(*rapConn)); + + // Check the version + std::auto_ptr<BackupProtocolVersion> serverVersion( + protocol->QueryVersion(BACKUP_STORE_SERVER_VERSION)); + TEST_THAT(serverVersion->GetVersion() == BACKUP_STORE_SERVER_VERSION); + + // Login + std::auto_ptr<BackupProtocolLoginConfirmed> loginConf( + protocol->QueryLogin(0x01234567, 0)); + + return protocol; +} + +bool check_num_files(int files, int old, int deleted, int dirs) +{ + std::auto_ptr<BackupStoreInfo> apInfo = + BackupStoreInfo::Load(0x1234567, + "backup/01234567/", 0, true); + TEST_EQUAL_LINE(files, apInfo->GetNumCurrentFiles(), + "current files"); + TEST_EQUAL_LINE(old, apInfo->GetNumOldFiles(), + "old files"); + TEST_EQUAL_LINE(deleted, apInfo->GetNumDeletedFiles(), + "deleted files"); + TEST_EQUAL_LINE(dirs, apInfo->GetNumDirectories(), + "directories"); + + return (files == apInfo->GetNumCurrentFiles() && + old == apInfo->GetNumOldFiles() && + deleted == apInfo->GetNumDeletedFiles() && + dirs == apInfo->GetNumDirectories()); +} + +bool check_num_blocks(BackupProtocolCallable& Client, int Current, int Old, + int Deleted, int Dirs, int Total) +{ + std::auto_ptr<BackupProtocolAccountUsage2> usage = + Client.QueryGetAccountUsage2(); + TEST_EQUAL_LINE(Total, usage->GetBlocksUsed(), "wrong BlocksUsed"); + TEST_EQUAL_LINE(Current, usage->GetBlocksInCurrentFiles(), + "wrong BlocksInCurrentFiles"); + TEST_EQUAL_LINE(Old, usage->GetBlocksInOldFiles(), + "wrong BlocksInOldFiles"); + TEST_EQUAL_LINE(Deleted, usage->GetBlocksInDeletedFiles(), + "wrong BlocksInDeletedFiles"); + TEST_EQUAL_LINE(Dirs, usage->GetBlocksInDirectories(), + "wrong BlocksInDirectories"); + return (Total == usage->GetBlocksUsed() && + Current == usage->GetBlocksInCurrentFiles() && + Old == usage->GetBlocksInOldFiles() && + Deleted == usage->GetBlocksInDeletedFiles() && + Dirs == usage->GetBlocksInDirectories()); +} + +bool check_account(Log::Level log_level) +{ + int errors_fixed; + + { + Logging::Guard guard(log_level); + Logging::Tagger tag("check fix", true); + Logging::ShowTagOnConsole show; + std::string errs; + std::auto_ptr<Configuration> config( + Configuration::LoadAndVerify("testfiles/bbstored.conf", + &BackupConfigFileVerify, errs)); + BackupStoreAccountsControl control(*config); + errors_fixed = control.CheckAccount(0x01234567, + true, // FixErrors + false); // Quiet + } + TEST_EQUAL_LINE(0, errors_fixed, "store errors found and fixed"); + + return (errors_fixed == 0); +} + +int64_t run_housekeeping(BackupStoreAccountDatabase::Entry& rAccount) +{ + std::string rootDir = BackupStoreAccounts::GetAccountRoot(rAccount); + int discSet = rAccount.GetDiscSet(); + + // Do housekeeping on this account + HousekeepStoreAccount housekeeping(rAccount.GetID(), rootDir, + discSet, NULL); + housekeeping.DoHousekeeping(true /* keep trying forever */); + return housekeeping.GetErrorCount(); +} + +// Run housekeeping (for which we need to disconnect ourselves) and check +// that it doesn't change the numbers of files. +// +// Also check that bbstoreaccounts doesn't change anything + +bool run_housekeeping_and_check_account() +{ + int error_count; + + { + Logging::Tagger tag("", true); + Logging::ShowTagOnConsole show; + std::auto_ptr<BackupStoreAccountDatabase> apAccounts( + BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); + BackupStoreAccountDatabase::Entry account = + apAccounts->GetEntry(0x1234567); + error_count = run_housekeeping(account); + } + + TEST_EQUAL_LINE(0, error_count, "housekeeping errors"); + + bool check_account_is_ok = check_account(); + TEST_THAT(check_account_is_ok); + + return error_count == 0 && check_account_is_ok; +} + +bool check_reference_counts() +{ + std::auto_ptr<BackupStoreAccountDatabase> apAccounts( + BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); + BackupStoreAccountDatabase::Entry account = + apAccounts->GetEntry(0x1234567); + + std::auto_ptr<BackupStoreRefCountDatabase> apReferences( + BackupStoreRefCountDatabase::Load(account, true)); + TEST_EQUAL(ExpectedRefCounts.size(), + apReferences->GetLastObjectIDUsed() + 1); + + bool counts_ok = true; + + for (unsigned int i = BackupProtocolListDirectory::RootDirectory; + i < ExpectedRefCounts.size(); i++) + { + TEST_EQUAL_LINE(ExpectedRefCounts[i], + apReferences->GetRefCount(i), + "object " << BOX_FORMAT_OBJECTID(i)); + if (ExpectedRefCounts[i] != apReferences->GetRefCount(i)) + { + counts_ok = false; + } + } + + return counts_ok; +} + +bool StartServer() +{ + TEST_THAT_THROWONFAIL(bbstored_pid == 0); + + std::string cmd = BBSTORED " " + bbstored_args + + " testfiles/bbstored.conf"; + bbstored_pid = LaunchServer(cmd.c_str(), "testfiles/bbstored.pid"); + + TEST_THAT(bbstored_pid != -1 && bbstored_pid != 0); + if(bbstored_pid <= 0) + { + return false; + } + + ::sleep(1); + TEST_THAT_THROWONFAIL(ServerIsAlive(bbstored_pid)); + return true; +} + +bool StopServer() +{ + TEST_THAT_THROWONFAIL(bbstored_pid != 0); + TEST_THAT_THROWONFAIL(ServerIsAlive(bbstored_pid)); + TEST_THAT_THROWONFAIL(KillServer(bbstored_pid)); + ::sleep(1); + + TEST_THAT_THROWONFAIL(!ServerIsAlive(bbstored_pid)); + bbstored_pid = 0; + + #ifdef WIN32 + int unlink_result = unlink("testfiles/bbstored.pid"); + TEST_EQUAL_LINE(0, unlink_result, "unlink testfiles/bbstored.pid"); + if(unlink_result != 0) + { + return false; + } + #else + TestRemoteProcessMemLeaks("bbstored.memleaks"); + #endif + + return true; +} + + diff --git a/lib/backupstore/StoreTestUtils.h b/lib/backupstore/StoreTestUtils.h new file mode 100644 index 00000000..ad4ff14c --- /dev/null +++ b/lib/backupstore/StoreTestUtils.h @@ -0,0 +1,79 @@ +// -------------------------------------------------------------------------- +// +// File +// Name: StoreTestUtils.h +// Purpose: Utilities for housekeeping and checking a test store +// Created: 18/02/14 +// +// -------------------------------------------------------------------------- + +#ifndef STORETESTUTILS__H +#define STORETESTUTILS__H + +class BackupProtocolCallable; +class BackupProtocolClient; +class SocketStreamTLS; +class TLSContext; + +//! Simplifies calling setUp() with the current function name in each test. +#define SETUP() if (!setUp(__FUNCTION__)) return true; // skip this test + +//! Holds the expected reference counts of each object. +extern std::vector<uint32_t> ExpectedRefCounts; + +//! Holds the PID of the currently running bbstored test server. +extern int bbstored_pid; + +//! Sets up (cleans up) test environment at the start of every test. +bool setUp(const char* function_name); + +//! Checks account for errors and shuts down daemons at end of every test. +void tearDown(); + +//! Sets the expected refcount of an object, resizing vector if necessary. +void set_refcount(int64_t ObjectID, uint32_t RefCount = 1); + +//! Initialises a TLSContext object using the standard certficate filenames. +void init_context(TLSContext& rContext); + +//! Opens a connection to the server (bbstored). +std::auto_ptr<SocketStreamTLS> open_conn(const char *hostname, + TLSContext& rContext); + +//! Opens a connection to the server (bbstored) and logs in. +std::auto_ptr<BackupProtocolClient> test_server_login(const char *hostname, + TLSContext& rContext, std::auto_ptr<SocketStreamTLS>& rapConn); + +//! Checks the number of files of each type in the store against expectations. +bool check_num_files(int files, int old, int deleted, int dirs); + +//! Checks the number of blocks in files of each type against expectations. +bool check_num_blocks(BackupProtocolCallable& Client, int Current, int Old, + int Deleted, int Dirs, int Total); + +//! Checks an account for errors, returning true if it's OK, for use in assertions. +bool check_account(Log::Level log_level = Log::WARNING); + +//! Runs housekeeping on an account, to remove old and deleted files if necessary. +int64_t run_housekeeping(BackupStoreAccountDatabase::Entry& rAccount); + +//! Runs housekeeping and checks the account, returning true if it's OK. +bool run_housekeeping_and_check_account(); + +//! Tests that all object reference counts have the expected values. +bool check_reference_counts(); + +//! Starts the bbstored test server running, which must not already be running. +bool StartServer(); + +//! Stops the currently running bbstored test server. +bool StopServer(); + +//! Creates the standard test account, for example after delete_account(). +bool create_account(int soft, int hard); + +//! Deletes the standard test account, for testing behaviour with no account. +bool delete_account(); + +#endif // STORETESTUTILS__H + diff --git a/test/backupstore/testbackupstore.cpp b/test/backupstore/testbackupstore.cpp index 5e4cdf94..35a46138 100644 --- a/test/backupstore/testbackupstore.cpp +++ b/test/backupstore/testbackupstore.cpp @@ -42,6 +42,7 @@ #include "Socket.h" #include "SocketStreamTLS.h" #include "StoreStructure.h" +#include "StoreTestUtils.h" #include "TLSContext.h" #include "Test.h" @@ -235,160 +236,6 @@ void CheckEntries(BackupStoreDirectory &rDir, int16_t FlagsMustBeSet, int16_t Fl TEST_THAT(DIR_NUM == SkipEntries(e, FlagsMustBeSet, FlagsNotToBeSet)); } -bool create_account(int soft, int hard) -{ - std::string errs; - std::auto_ptr<Configuration> config( - Configuration::LoadAndVerify - ("testfiles/bbstored.conf", &BackupConfigFileVerify, errs)); - BackupStoreAccountsControl control(*config); - Logging::Guard guard(Log::WARNING); - int result = control.CreateAccount(0x01234567, 0, soft, hard); - TEST_EQUAL(0, result); - return (result == 0); -} - -std::vector<uint32_t> ExpectedRefCounts; - -void set_refcount(int64_t ObjectID, uint32_t RefCount = 1); - -// test that all object reference counts have the expected values -bool check_reference_counts() -{ - std::auto_ptr<BackupStoreAccountDatabase> apAccounts( - BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); - BackupStoreAccountDatabase::Entry account = - apAccounts->GetEntry(0x1234567); - - std::auto_ptr<BackupStoreRefCountDatabase> apReferences( - BackupStoreRefCountDatabase::Load(account, true)); - TEST_EQUAL(ExpectedRefCounts.size(), - apReferences->GetLastObjectIDUsed() + 1); - - bool counts_ok = true; - - for (unsigned int i = BackupProtocolListDirectory::RootDirectory; - i < ExpectedRefCounts.size(); i++) - { - TEST_EQUAL_LINE(ExpectedRefCounts[i], - apReferences->GetRefCount(i), - "object " << BOX_FORMAT_OBJECTID(i)); - if (ExpectedRefCounts[i] != apReferences->GetRefCount(i)) - { - counts_ok = false; - } - } - - return counts_ok; -} - -bool check_account(Log::Level log_level = Log::WARNING); -int64_t run_housekeeping(BackupStoreAccountDatabase::Entry& rAccount); -bool run_housekeeping_and_check_account(); - -int bbstored_pid = 0; - -bool StartServer() -{ - std::string cmd = BBSTORED " " + bbstored_args + - " testfiles/bbstored.conf"; - bbstored_pid = LaunchServer(cmd.c_str(), "testfiles/bbstored.pid"); - - TEST_THAT(bbstored_pid != -1 && bbstored_pid != 0); - if(bbstored_pid <= 0) - { - return false; - } - - ::sleep(1); - TEST_THAT_THROWONFAIL(ServerIsAlive(bbstored_pid)); - return true; -} - -bool StopServer() -{ - TEST_THAT_THROWONFAIL(ServerIsAlive(bbstored_pid)); - TEST_THAT_THROWONFAIL(KillServer(bbstored_pid)); - ::sleep(1); - - TEST_THAT_THROWONFAIL(!ServerIsAlive(bbstored_pid)); - - #ifdef WIN32 - int unlink_result = unlink("testfiles/bbstored.pid"); - TEST_EQUAL_LINE(0, unlink_result, "unlink testfiles/bbstored.pid"); - if(unlink_result != 0) - { - return false; - } - #else - TestRemoteProcessMemLeaks("bbstored.memleaks"); - #endif - - return true; -} - -#define SETUP() if (!setUp(__FUNCTION__)) return true; // skip this test - -bool setUp(const char* function_name) -{ - if (!run_only_named_tests.empty()) - { - bool run_this_test = false; - - for (std::list<std::string>::iterator - i = run_only_named_tests.begin(); - i != run_only_named_tests.end(); i++) - { - if (*i == function_name) - { - run_this_test = true; - break; - } - } - - if (!run_this_test) - { - // not in the list, so don't run it. - return false; - } - } - - printf("\n\n== %s ==\n", function_name); - - if (ServerIsAlive(bbstored_pid)) - { - StopServer(); - } - - TEST_THAT_THROWONFAIL(system("rm -rf testfiles/0_0 testfiles/0_1 " - "testfiles/0_2 testfiles/accounts.txt testfiles/test* " - "testfiles/file*") == 0); - TEST_THAT_THROWONFAIL(mkdir("testfiles/0_0", 0755) == 0); - TEST_THAT_THROWONFAIL(mkdir("testfiles/0_1", 0755) == 0); - TEST_THAT_THROWONFAIL(mkdir("testfiles/0_2", 0755) == 0); - TEST_THAT_THROWONFAIL(system("touch testfiles/accounts.txt") == 0); - TEST_THAT_THROWONFAIL(create_account(10000, 20000)); - - ExpectedRefCounts.resize(BACKUPSTORE_ROOT_DIRECTORY_ID + 1); - set_refcount(BACKUPSTORE_ROOT_DIRECTORY_ID, 1); - - return true; -} - -void tearDown() -{ - if (ServerIsAlive(bbstored_pid)) - { - StopServer(); - } - - if (FileExists("testfiles/0_0/backup/01234567/info.rf")) - { - TEST_THAT(check_reference_counts()); - TEST_THAT(check_account()); - } -} - bool test_filename_encoding() { SETUP(); @@ -644,15 +491,6 @@ void test_everything_deleted(BackupProtocolCallable &protocol, int64_t DirID) TEST_THAT(dirs == 0 || dirs == 2); } -void set_refcount(int64_t ObjectID, uint32_t RefCount) -{ - if ((int64_t)ExpectedRefCounts.size() <= ObjectID) - { - ExpectedRefCounts.resize(ObjectID + 1, 0); - } - ExpectedRefCounts[ObjectID] = RefCount; -} - void create_file_in_dir(std::string name, std::string source, int64_t parentId, BackupProtocolCallable &protocol, BackupStoreRefCountDatabase* pRefCount) { @@ -1123,147 +961,6 @@ bool test_server_housekeeping() return true; } -void init_context(TLSContext& rContext) -{ - rContext.Initialise(false /* client */, - "testfiles/clientCerts.pem", - "testfiles/clientPrivKey.pem", - "testfiles/clientTrustedCAs.pem"); -} - -std::auto_ptr<SocketStreamTLS> open_conn(const char *hostname, - TLSContext& rContext) -{ - init_context(rContext); - std::auto_ptr<SocketStreamTLS> conn(new SocketStreamTLS); - conn->Open(rContext, Socket::TypeINET, hostname, - BOX_PORT_BBSTORED_TEST); - return conn; -} - -std::auto_ptr<BackupProtocolClient> test_server_login(const char *hostname, - TLSContext& rContext, std::auto_ptr<SocketStreamTLS>& rapConn) -{ - rapConn = open_conn(hostname, rContext); - - // Make a protocol - std::auto_ptr<BackupProtocolClient> protocol(new - BackupProtocolClient(*rapConn)); - - // Check the version - std::auto_ptr<BackupProtocolVersion> serverVersion( - protocol->QueryVersion(BACKUP_STORE_SERVER_VERSION)); - TEST_THAT(serverVersion->GetVersion() == BACKUP_STORE_SERVER_VERSION); - - // Login - std::auto_ptr<BackupProtocolLoginConfirmed> loginConf( - protocol->QueryLogin(0x01234567, 0)); - - return protocol; -} - -bool check_num_files(int files, int old, int deleted, int dirs) -{ - std::auto_ptr<BackupStoreInfo> apInfo = - BackupStoreInfo::Load(0x1234567, - "backup/01234567/", 0, true); - TEST_EQUAL_LINE(files, apInfo->GetNumCurrentFiles(), - "current files"); - TEST_EQUAL_LINE(old, apInfo->GetNumOldFiles(), - "old files"); - TEST_EQUAL_LINE(deleted, apInfo->GetNumDeletedFiles(), - "deleted files"); - TEST_EQUAL_LINE(dirs, apInfo->GetNumDirectories(), - "directories"); - - return (files == apInfo->GetNumCurrentFiles() && - old == apInfo->GetNumOldFiles() && - deleted == apInfo->GetNumDeletedFiles() && - dirs == apInfo->GetNumDirectories()); -} - -bool check_num_blocks(BackupProtocolCallable& Client, int Current, int Old, - int Deleted, int Dirs, int Total) -{ - std::auto_ptr<BackupProtocolAccountUsage2> usage = - Client.QueryGetAccountUsage2(); - TEST_EQUAL_LINE(Total, usage->GetBlocksUsed(), "wrong BlocksUsed"); - TEST_EQUAL_LINE(Current, usage->GetBlocksInCurrentFiles(), - "wrong BlocksInCurrentFiles"); - TEST_EQUAL_LINE(Old, usage->GetBlocksInOldFiles(), - "wrong BlocksInOldFiles"); - TEST_EQUAL_LINE(Deleted, usage->GetBlocksInDeletedFiles(), - "wrong BlocksInDeletedFiles"); - TEST_EQUAL_LINE(Dirs, usage->GetBlocksInDirectories(), - "wrong BlocksInDirectories"); - return (Total == usage->GetBlocksUsed() && - Current == usage->GetBlocksInCurrentFiles() && - Old == usage->GetBlocksInOldFiles() && - Deleted == usage->GetBlocksInDeletedFiles() && - Dirs == usage->GetBlocksInDirectories()); -} - -bool check_account(Log::Level log_level) -{ - int errors_fixed; - - { - Logging::Guard guard(log_level); - Logging::Tagger tag("check fix", true); - Logging::ShowTagOnConsole show; - std::string errs; - std::auto_ptr<Configuration> config( - Configuration::LoadAndVerify("testfiles/bbstored.conf", - &BackupConfigFileVerify, errs)); - BackupStoreAccountsControl control(*config); - errors_fixed = control.CheckAccount(0x01234567, - true, // FixErrors - false); // Quiet - } - TEST_EQUAL_LINE(0, errors_fixed, "store errors found and fixed"); - - return (errors_fixed == 0); -} - -int64_t run_housekeeping(BackupStoreAccountDatabase::Entry& rAccount) -{ - std::string rootDir = BackupStoreAccounts::GetAccountRoot(rAccount); - int discSet = rAccount.GetDiscSet(); - - // Do housekeeping on this account - HousekeepStoreAccount housekeeping(rAccount.GetID(), rootDir, - discSet, NULL); - housekeeping.DoHousekeeping(true /* keep trying forever */); - return housekeeping.GetErrorCount(); -} - -// Run housekeeping (for which we need to disconnect ourselves) and check -// that it doesn't change the numbers of files. -// -// Also check that bbstoreaccounts doesn't change anything - -bool run_housekeeping_and_check_account() -{ - int error_count; - - { - Logging::Tagger tag("", true); - Logging::ShowTagOnConsole show; - std::auto_ptr<BackupStoreAccountDatabase> apAccounts( - BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); - BackupStoreAccountDatabase::Entry account = - apAccounts->GetEntry(0x1234567); - error_count = run_housekeeping(account); - } - - TEST_EQUAL_LINE(0, error_count, "housekeeping errors"); - - bool check_account_is_ok = check_account(); - TEST_THAT(check_account_is_ok); - - return error_count == 0 && check_account_is_ok; -} - int64_t create_directory(BackupProtocolCallable& protocol) { // Create a directory @@ -1324,18 +1021,6 @@ int64_t assert_readonly_connection_succeeds(BackupProtocolCallable& protocol) return loginConf->GetClientStoreMarker(); } -bool delete_account() -{ - std::string errs; - std::auto_ptr<Configuration> config( - Configuration::LoadAndVerify - ("testfiles/bbstored.conf", &BackupConfigFileVerify, errs)); - BackupStoreAccountsControl control(*config); - Logging::Guard guard(Log::WARNING); - TEST_THAT_THROWONFAIL(control.DeleteAccount(0x01234567, false) == 0); - return true; -} - bool test_multiple_uploads() { TLSContext context; |