summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2013-08-22 00:19:20 +0000
committerChris Wilson <chris+github@qwirx.com>2013-08-22 00:19:20 +0000
commit941878563294255f44a11aa8164a4b330770c4c2 (patch)
tree44d7720677cb6c30fc39af55bcdfc2fa636ad3e3
parentc8af9906b692de24dbf1b03c563d85fa85d3a4dc (diff)
Refactor testbackupstorefix.
Preparation work for better testing of fixing directories with entries that no longer exist on disk. Related to debugging the problems reported by Markus Grunwald.
-rw-r--r--test/backupstorefix/testbackupstorefix.cpp77
1 files changed, 67 insertions, 10 deletions
diff --git a/test/backupstorefix/testbackupstorefix.cpp b/test/backupstorefix/testbackupstorefix.cpp
index 6c4d480a..8cc5c8aa 100644
--- a/test/backupstorefix/testbackupstorefix.cpp
+++ b/test/backupstorefix/testbackupstorefix.cpp
@@ -17,20 +17,25 @@
#include <map>
#include "Test.h"
+#include "BackupClientCryptoKeys.h"
#include "BackupStoreCheck.h"
#include "BackupStoreConstants.h"
+#include "BackupStoreContext.h"
#include "BackupStoreDirectory.h"
+#include "BackupStoreException.h"
#include "BackupStoreFile.h"
+#include "BackupStoreFileWire.h"
+#include "BackupStoreFileEncodeStream.h"
+#include "BackupStoreInfo.h"
+#include "BufferedWriteStream.h"
#include "FileStream.h"
#include "RaidFileController.h"
-#include "RaidFileWrite.h"
-#include "RaidFileRead.h"
-#include "BackupStoreInfo.h"
-#include "BackupStoreException.h"
#include "RaidFileException.h"
-#include "StoreStructure.h"
-#include "BackupStoreFileWire.h"
+#include "RaidFileRead.h"
+#include "RaidFileWrite.h"
#include "ServerControl.h"
+#include "StoreStructure.h"
+#include "ZeroStream.h"
#include "MemLeakFindOn.h"
@@ -147,7 +152,9 @@ void check_dir(BackupStoreDirectory &dir, dir_en_check *ck)
while((en = i.Next()) != 0)
{
- TEST_THAT(ck->name != -1);
+ BackupStoreFilenameClear clear(en->GetName());
+ TEST_LINE(ck->name != -1, "Unexpected entry found in "
+ "directory: " << clear.GetClearFilename());
if(ck->name == -1)
{
break;
@@ -179,9 +186,12 @@ void check_dir_dep(BackupStoreDirectory &dir, checkdepinfoen *ck)
{
break;
}
- TEST_THAT(en->GetObjectID() == ck->id);
- TEST_THAT(en->GetDependsNewer() == ck->depNewer);
- TEST_THAT(en->GetDependsOlder() == ck->depOlder);
+ TEST_EQUAL_LINE(ck->id, en->GetObjectID(), "Wrong object ID "
+ "for " << BOX_FORMAT_OBJECTID(ck->id));
+ TEST_EQUAL_LINE(ck->depNewer, en->GetDependsNewer(),
+ "Wrong Newer dependency for " << BOX_FORMAT_OBJECTID(ck->id));
+ TEST_EQUAL_LINE(ck->depOlder, en->GetDependsOlder(),
+ "Wrong Older dependency for " << BOX_FORMAT_OBJECTID(ck->id));
++ck;
}
@@ -283,14 +293,61 @@ void test_dir_fixing()
}
}
+int64_t fake_upload(BackupProtocolLocal& client, const std::string& file_path,
+ int64_t diff_from_id)
+{
+ std::auto_ptr<IOStream> upload;
+ if(diff_from_id)
+ {
+ std::auto_ptr<BackupProtocolSuccess> getBlockIndex(
+ client.QueryGetBlockIndexByName(
+ BACKUPSTORE_ROOT_DIRECTORY_ID, fnames[0]));
+ std::auto_ptr<IOStream> blockIndexStream(client.ReceiveStream());
+ upload = BackupStoreFile::EncodeFileDiff(
+ file_path,
+ BACKUPSTORE_ROOT_DIRECTORY_ID, fnames[0],
+ diff_from_id, *blockIndexStream,
+ IOStream::TimeOutInfinite,
+ NULL, // DiffTimer implementation
+ 0 /* not interested in the modification time */,
+ NULL // isCompletelyDifferent
+ );
+ }
+ else
+ {
+ upload = BackupStoreFile::EncodeFile(
+ file_path,
+ BACKUPSTORE_ROOT_DIRECTORY_ID, fnames[0],
+ NULL,
+ NULL, // pLogger
+ NULL // pRunStatusProvider
+ );
+ }
+
+ return client.QueryStoreFile(BACKUPSTORE_ROOT_DIRECTORY_ID,
+ 1, // ModificationTime
+ 2, // AttributesHash
+ diff_from_id, // DiffFromFileID
+ fnames[0], // rFilename
+ upload)->GetObjectID();
+}
+
int test(int argc, const char *argv[])
{
+ {
+ MEMLEAKFINDER_NO_LEAKS;
+ fnames[0].SetAsClearFilename("x1");
+ fnames[1].SetAsClearFilename("x2");
+ fnames[2].SetAsClearFilename("x3");
+ }
+
// Test the backupstore directory fixing
test_dir_fixing();
// Initialise the raidfile controller
RaidFileController &rcontroller = RaidFileController::GetController();
rcontroller.Initialise("testfiles/raidfile.conf");
+ BackupClientCryptoKeys_Setup("testfiles/bbackupd.keys");
// Create an account
TEST_THAT_ABORTONFAIL(::system(BBSTOREACCOUNTS