Changeset 2708
- Timestamp:
- 27/08/2010 10:24:18 (18 months ago)
- File:
-
- 1 edited
-
box/trunk/test/backupstore/testbackupstore.cpp (modified) (34 diffs)
Legend:
- Unmodified
- Added
- Removed
-
box/trunk/test/backupstore/testbackupstore.cpp
r2542 r2708 920 920 } 921 921 922 std::auto_ptr<BackupProtocolClient> test_server_login(SocketStreamTLS& rConn) 923 { 922 std::auto_ptr<BackupProtocolClient> test_server_login(const char *hostname, 923 TLSContext& rContext, std::auto_ptr<SocketStreamTLS>& rapConn) 924 { 925 rapConn = open_conn(hostname, rContext); 926 924 927 // Make a protocol 925 928 std::auto_ptr<BackupProtocolClient> protocol(new 926 BackupProtocolClient( rConn));929 BackupProtocolClient(*rapConn)); 927 930 928 931 // Check the version … … 949 952 } 950 953 954 // Run housekeeping (for which we need to disconnect ourselves) and check 955 // that it doesn't change the numbers of files. 956 // 957 // Also check that bbstoreaccounts doesn't change anything 958 959 void run_housekeeping_and_check_account(const char *hostname, 960 TLSContext& rContext, std::auto_ptr<SocketStreamTLS>& rapConn, 961 std::auto_ptr<BackupProtocolClient>& rapProtocol) 962 { 963 rapProtocol->QueryFinished(); 964 std::auto_ptr<BackupStoreAccountDatabase> apAccounts( 965 BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); 966 BackupStoreAccountDatabase::Entry account = 967 apAccounts->GetEntry(0x1234567); 968 run_housekeeping(account); 969 970 TEST_THAT(::system(BBSTOREACCOUNTS 971 " -c testfiles/bbstored.conf check 01234567 fix") == 0); 972 TestRemoteProcessMemLeaks("bbstoreaccounts.memleaks"); 973 974 rapProtocol = test_server_login(hostname, rContext, rapConn); 975 } 976 951 977 int test_server(const char *hostname) 952 978 { 953 979 TLSContext context; 954 std::auto_ptr<SocketStreamTLS> conn = open_conn(hostname, context); 955 std::auto_ptr<BackupProtocolClient> apProtocol( 956 test_server_login(*conn)); 957 BackupProtocolClient& protocol(*apProtocol); 980 std::auto_ptr<SocketStreamTLS> conn; 981 std::auto_ptr<BackupProtocolClient> apProtocol = 982 test_server_login(hostname, context, conn); 958 983 959 984 // Make some test attributes … … 976 1001 FILE *protocolLog = ::fopen("testfiles/protocol.log", "w"); 977 1002 TEST_THAT(protocolLog != 0); 978 protocol.SetLogToFile(protocolLog);1003 apProtocol->SetLogToFile(protocolLog); 979 1004 980 1005 #ifndef WIN32 … … 994 1019 995 1020 // Set the client store marker 996 protocol.QuerySetClientStoreMarker(0x8732523ab23aLL);1021 apProtocol->QuerySetClientStoreMarker(0x8732523ab23aLL); 997 1022 998 1023 #ifndef WIN32 … … 1020 1045 #endif 1021 1046 1022 test_server_1(protocol, protocolReadOnly); 1047 test_server_1(*apProtocol, protocolReadOnly); 1048 1049 #define TEST_NUM_FILES(files, old, deleted, dirs) \ 1050 { \ 1051 std::auto_ptr<BackupStoreInfo> apInfo = \ 1052 BackupStoreInfo::Load(0x1234567, \ 1053 "backup/01234567/", 0, true); \ 1054 TEST_EQUAL_LINE(files, apInfo->GetNumFiles(), \ 1055 "num files"); \ 1056 TEST_EQUAL_LINE(old, apInfo->GetNumOldFiles(), \ 1057 "old files"); \ 1058 TEST_EQUAL_LINE(deleted, apInfo->GetNumDeletedFiles(), \ 1059 "deleted files"); \ 1060 TEST_EQUAL_LINE(dirs, apInfo->GetNumDirectories(), \ 1061 "directories"); \ 1062 } 1063 1064 TEST_NUM_FILES(1, 0, 0, 1); 1065 run_housekeeping_and_check_account(hostname, context, 1066 conn, apProtocol); 1067 TEST_NUM_FILES(1, 0, 0, 1); 1023 1068 1024 1069 // sleep to ensure that the timestamp on the file will change … … 1034 1079 filename += uploads[t].fnextra; 1035 1080 int64_t modtime = 0; 1036 1081 1037 1082 std::auto_ptr<IOStream> upload(BackupStoreFile::EncodeFile(filename.c_str(), BackupProtocolClientListDirectory::RootDirectory, uploads[t].name, &modtime)); 1038 1083 TEST_THAT(modtime != 0); 1039 1084 1040 std::auto_ptr<BackupProtocolClientSuccess> stored( protocol.QueryStoreFile(1085 std::auto_ptr<BackupProtocolClientSuccess> stored(apProtocol->QueryStoreFile( 1041 1086 BackupProtocolClientListDirectory::RootDirectory, 1042 1087 modtime, 1043 1088 modtime, /* use it for attr hash too */ 1044 0, /* diff from ID */1089 0, /* diff from ID */ 1045 1090 uploads[t].name, 1046 1091 *upload)); … … 1052 1097 "as object " << 1053 1098 BOX_FORMAT_OBJECTID(stored->GetObjectID())); 1099 TEST_NUM_FILES(t + 2, 0, 0, 1); 1100 1101 run_housekeeping_and_check_account(hostname, context, 1102 conn, apProtocol); 1103 TEST_NUM_FILES(t + 2, 0, 0, 1); 1054 1104 } 1055 1105 1056 1106 // Add some attributes onto one of them 1057 1107 { 1108 TEST_NUM_FILES(UPLOAD_NUM + 1, 0, 0, 1); 1058 1109 MemBlockStream attrnew(attr3, sizeof(attr3)); 1059 std::auto_ptr<BackupProtocolClientSuccess> set( protocol.QuerySetReplacementFileAttributes(1110 std::auto_ptr<BackupProtocolClientSuccess> set(apProtocol->QuerySetReplacementFileAttributes( 1060 1111 BackupProtocolClientListDirectory::RootDirectory, 1061 1112 32498749832475LL, … … 1063 1114 attrnew)); 1064 1115 TEST_THAT(set->GetObjectID() == uploads[UPLOAD_ATTRS_EN].allocated_objid); 1116 TEST_NUM_FILES(UPLOAD_NUM + 1, 0, 0, 1); 1065 1117 } 1066 1118 1067 1119 // Delete one of them (will implicitly delete an old version) 1068 1120 { 1069 std::auto_ptr<BackupProtocolClientSuccess> del( protocol.QueryDeleteFile(1121 std::auto_ptr<BackupProtocolClientSuccess> del(apProtocol->QueryDeleteFile( 1070 1122 BackupProtocolClientListDirectory::RootDirectory, 1071 1123 uploads[UPLOAD_DELETE_EN].name)); 1072 1124 TEST_THAT(del->GetObjectID() == uploads[UPLOAD_DELETE_EN].allocated_objid); 1073 } 1125 TEST_NUM_FILES(UPLOAD_NUM, 0, 1, 1); 1126 } 1127 1074 1128 // Check that the block index can be obtained by name even though it's been deleted 1075 1129 { … … 1077 1131 { 1078 1132 FileStream out("testfiles/downloaddelobj", O_WRONLY | O_CREAT); 1079 std::auto_ptr<BackupProtocolClientSuccess> getobj( protocol.QueryGetObject(uploads[UPLOAD_DELETE_EN].allocated_objid));1080 std::auto_ptr<IOStream> objstream( protocol.ReceiveStream());1133 std::auto_ptr<BackupProtocolClientSuccess> getobj(apProtocol->QueryGetObject(uploads[UPLOAD_DELETE_EN].allocated_objid)); 1134 std::auto_ptr<IOStream> objstream(apProtocol->ReceiveStream()); 1081 1135 objstream->CopyStreamTo(out); 1082 1136 } 1083 1137 // query index and test 1084 std::auto_ptr<BackupProtocolClientSuccess> getblockindex( protocol.QueryGetBlockIndexByName(1138 std::auto_ptr<BackupProtocolClientSuccess> getblockindex(apProtocol->QueryGetBlockIndexByName( 1085 1139 BackupProtocolClientListDirectory::RootDirectory, uploads[UPLOAD_DELETE_EN].name)); 1086 1140 TEST_THAT(getblockindex->GetObjectID() == uploads[UPLOAD_DELETE_EN].allocated_objid); 1087 std::auto_ptr<IOStream> blockIndexStream( protocol.ReceiveStream());1141 std::auto_ptr<IOStream> blockIndexStream(apProtocol->ReceiveStream()); 1088 1142 TEST_THAT(check_block_index("testfiles/downloaddelobj", *blockIndexStream)); 1089 1143 } … … 1093 1147 { 1094 1148 printf("%d\n", t); 1095 std::auto_ptr<BackupProtocolClientSuccess> getFile( protocol.QueryGetFile(BackupProtocolClientListDirectory::RootDirectory, uploads[t].allocated_objid));1149 std::auto_ptr<BackupProtocolClientSuccess> getFile(apProtocol->QueryGetFile(BackupProtocolClientListDirectory::RootDirectory, uploads[t].allocated_objid)); 1096 1150 TEST_THAT(getFile->GetObjectID() == uploads[t].allocated_objid); 1097 std::auto_ptr<IOStream> filestream( protocol.ReceiveStream());1151 std::auto_ptr<IOStream> filestream(apProtocol->ReceiveStream()); 1098 1152 test_test_file(t, *filestream); 1099 1153 } … … 1107 1161 printf("done.\n\n"); 1108 1162 // And on the read/write one 1109 check_dir_after_uploads( protocol, attrtest);1163 check_dir_after_uploads(*apProtocol, attrtest); 1110 1164 } 1111 1165 … … 1129 1183 ::free(buf); 1130 1184 } 1185 1186 TEST_NUM_FILES(UPLOAD_NUM, 0, 1, 1); 1187 1188 // Run housekeeping (for which we need to disconnect 1189 // ourselves) and check that it doesn't change the numbers 1190 // of files 1191 apProtocol->QueryFinished(); 1192 std::auto_ptr<BackupStoreAccountDatabase> apAccounts( 1193 BackupStoreAccountDatabase::Read("testfiles/accounts.txt")); 1194 BackupStoreAccountDatabase::Entry account = 1195 apAccounts->GetEntry(0x1234567); 1196 run_housekeeping(account); 1197 1198 // Also check that bbstoreaccounts doesn't change anything 1199 TEST_THAT_ABORTONFAIL(::system(BBSTOREACCOUNTS 1200 " -c testfiles/bbstored.conf check 01234567 fix") == 0); 1201 TestRemoteProcessMemLeaks("bbstoreaccounts.memleaks"); 1202 1203 apProtocol = test_server_login(hostname, context, conn); 1204 1205 TEST_NUM_FILES(UPLOAD_NUM, 0, 1, 1); 1206 1131 1207 { 1132 1208 // Fetch the block index for this one 1133 std::auto_ptr<BackupProtocolClientSuccess> getblockindex( protocol.QueryGetBlockIndexByName(1209 std::auto_ptr<BackupProtocolClientSuccess> getblockindex(apProtocol->QueryGetBlockIndexByName( 1134 1210 BackupProtocolClientListDirectory::RootDirectory, uploads[UPLOAD_PATCH_EN].name)); 1135 1211 TEST_THAT(getblockindex->GetObjectID() == uploads[UPLOAD_PATCH_EN].allocated_objid); 1136 std::auto_ptr<IOStream> blockIndexStream( protocol.ReceiveStream());1212 std::auto_ptr<IOStream> blockIndexStream(apProtocol->ReceiveStream()); 1137 1213 1138 1214 // Do the patching … … 1161 1237 { 1162 1238 FileStream uploadpatch(TEST_FILE_FOR_PATCHING ".patch"); 1163 std::auto_ptr<BackupProtocolClientSuccess> stored( protocol.QueryStoreFile(1239 std::auto_ptr<BackupProtocolClientSuccess> stored(apProtocol->QueryStoreFile( 1164 1240 BackupProtocolClientListDirectory::RootDirectory, 1165 1241 modtime, … … 1176 1252 1177 1253 // Then download it to check it's OK 1178 std::auto_ptr<BackupProtocolClientSuccess> getFile( protocol.QueryGetFile(BackupProtocolClientListDirectory::RootDirectory, patchedID));1254 std::auto_ptr<BackupProtocolClientSuccess> getFile(apProtocol->QueryGetFile(BackupProtocolClientListDirectory::RootDirectory, patchedID)); 1179 1255 TEST_THAT(getFile->GetObjectID() == patchedID); 1180 std::auto_ptr<IOStream> filestream( protocol.ReceiveStream());1256 std::auto_ptr<IOStream> filestream(apProtocol->ReceiveStream()); 1181 1257 BackupStoreFile::DecodeFile(*filestream, TEST_FILE_FOR_PATCHING ".downloaded", IOStream::TimeOutInfinite); 1182 1258 // Check it's the same 1183 1259 TEST_THAT(check_files_same(TEST_FILE_FOR_PATCHING ".downloaded", TEST_FILE_FOR_PATCHING ".mod")); 1260 1261 TEST_NUM_FILES(UPLOAD_NUM, 1, 1, 1); 1184 1262 } 1185 1263 … … 1190 1268 // Attributes 1191 1269 MemBlockStream attr(attr1, sizeof(attr1)); 1192 std::auto_ptr<BackupProtocolClientSuccess> dirCreate( protocol.QueryCreateDirectory(1270 std::auto_ptr<BackupProtocolClientSuccess> dirCreate(apProtocol->QueryCreateDirectory( 1193 1271 BackupProtocolClientListDirectory::RootDirectory, 1194 1272 9837429842987984LL, dirname, attr)); 1195 1273 subdirid = dirCreate->GetObjectID(); 1196 1274 TEST_THAT(subdirid == maxID + 1); 1275 1276 TEST_NUM_FILES(UPLOAD_NUM, 1, 1, 2); 1197 1277 } 1198 1278 … … 1206 1286 std::auto_ptr<IOStream> upload(BackupStoreFile::EncodeFile(filename.c_str(), subdirid, uploads[0].name, &modtime)); 1207 1287 1208 std::auto_ptr<BackupProtocolClientSuccess> stored( protocol.QueryStoreFile(1288 std::auto_ptr<BackupProtocolClientSuccess> stored(apProtocol->QueryStoreFile( 1209 1289 subdirid, 1210 1290 modtime, … … 1214 1294 *upload)); 1215 1295 subdirfileid = stored->GetObjectID(); 1296 1297 TEST_NUM_FILES(UPLOAD_NUM + 1, 1, 1, 2); 1216 1298 } 1217 1299 … … 1304 1386 { 1305 1387 MemBlockStream attrnew(attr2, sizeof(attr2)); 1306 std::auto_ptr<BackupProtocolClientSuccess> changereply( protocol.QueryChangeDirAttributes(1388 std::auto_ptr<BackupProtocolClientSuccess> changereply(apProtocol->QueryChangeDirAttributes( 1307 1389 subdirid, 1308 1390 329483209443598LL, … … 1337 1419 BackupStoreFilenameClear newName("moved-files"); 1338 1420 1339 std::auto_ptr<BackupProtocolClientSuccess> rep( protocol.QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid,1421 std::auto_ptr<BackupProtocolClientSuccess> rep(apProtocol->QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid, 1340 1422 BackupProtocolClientListDirectory::RootDirectory, 1341 1423 subdirid, BackupProtocolClientMoveObject::Flags_MoveAllWithSameName, newName)); … … 1346 1428 { 1347 1429 BackupStoreFilenameClear newName("moved-files"); 1348 TEST_CHECK_THROWS( protocol.QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid,1430 TEST_CHECK_THROWS(apProtocol->QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid, 1349 1431 BackupProtocolClientListDirectory::RootDirectory, 1350 1432 subdirid, BackupProtocolClientMoveObject::Flags_MoveAllWithSameName, newName), 1351 1433 ConnectionException, Conn_Protocol_UnexpectedReply); 1352 TEST_CHECK_THROWS( protocol.QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid,1434 TEST_CHECK_THROWS(apProtocol->QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid, 1353 1435 subdirid, 1354 1436 subdirid, BackupProtocolClientMoveObject::Flags_MoveAllWithSameName, newName), … … 1359 1441 { 1360 1442 BackupStoreFilenameClear newName("moved-files-x"); 1361 protocol.QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid,1443 apProtocol->QueryMoveObject(uploads[UPLOAD_FILE_TO_MOVE].allocated_objid, 1362 1444 subdirid, 1363 1445 subdirid, BackupProtocolClientMoveObject::Flags_MoveAllWithSameName, newName); … … 1424 1506 // Attributes 1425 1507 MemBlockStream attr(attr1, sizeof(attr1)); 1426 std::auto_ptr<BackupProtocolClientSuccess> dirCreate( protocol.QueryCreateDirectory(1508 std::auto_ptr<BackupProtocolClientSuccess> dirCreate(apProtocol->QueryCreateDirectory( 1427 1509 subdirid, 1428 1510 9837429842987984LL, nd, attr)); … … 1431 1513 FileStream upload("testfiles/file1_upload1"); 1432 1514 BackupStoreFilenameClear nf("file2"); 1433 std::auto_ptr<BackupProtocolClientSuccess> stored( protocol.QueryStoreFile(1515 std::auto_ptr<BackupProtocolClientSuccess> stored(apProtocol->QueryStoreFile( 1434 1516 subsubdirid, 1435 1517 0x123456789abcdefLL, /* modification time */ … … 1446 1528 // Query names -- test that invalid stuff returns not found OK 1447 1529 { 1448 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(3248972347823478927LL, subsubdirid));1530 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(3248972347823478927LL, subsubdirid)); 1449 1531 TEST_THAT(nameRep->GetNumNameElements() == 0); 1450 1532 } 1451 1533 { 1452 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(subsubfileid, 2342378424LL));1534 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(subsubfileid, 2342378424LL)); 1453 1535 TEST_THAT(nameRep->GetNumNameElements() == 0); 1454 1536 } 1455 1537 { 1456 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(38947234789LL, 2342378424LL));1538 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(38947234789LL, 2342378424LL)); 1457 1539 TEST_THAT(nameRep->GetNumNameElements() == 0); 1458 1540 } 1459 1541 { 1460 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(BackupProtocolClientGetObjectName::ObjectID_DirectoryOnly, 2234342378424LL));1542 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(BackupProtocolClientGetObjectName::ObjectID_DirectoryOnly, 2234342378424LL)); 1461 1543 TEST_THAT(nameRep->GetNumNameElements() == 0); 1462 1544 } … … 1464 1546 // Query names... first, get info for the file 1465 1547 { 1466 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(subsubfileid, subsubdirid));1467 std::auto_ptr<IOStream> namestream( protocol.ReceiveStream());1548 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(subsubfileid, subsubdirid)); 1549 std::auto_ptr<IOStream> namestream(apProtocol->ReceiveStream()); 1468 1550 1469 1551 TEST_THAT(nameRep->GetNumNameElements() == 3); … … 1482 1564 // Query names... secondly, for the directory 1483 1565 { 1484 std::auto_ptr<BackupProtocolClientObjectName> nameRep( protocol.QueryGetObjectName(BackupProtocolClientGetObjectName::ObjectID_DirectoryOnly, subsubdirid));1485 std::auto_ptr<IOStream> namestream( protocol.ReceiveStream());1566 std::auto_ptr<BackupProtocolClientObjectName> nameRep(apProtocol->QueryGetObjectName(BackupProtocolClientGetObjectName::ObjectID_DirectoryOnly, subsubdirid)); 1567 std::auto_ptr<IOStream> namestream(apProtocol->ReceiveStream()); 1486 1568 1487 1569 TEST_THAT(nameRep->GetNumNameElements() == 2); … … 1498 1580 //} skip: 1499 1581 1500 std::auto_ptr<BackupStoreAccountDatabase> apAccounts(1501 BackupStoreAccountDatabase::Read(1502 "testfiles/accounts.txt"));1503 1582 std::auto_ptr<BackupStoreRefCountDatabase> apRefCount( 1504 1583 BackupStoreRefCountDatabase::Load( … … 1506 1585 1507 1586 // Create some nice recursive directories 1508 int64_t dirtodelete = create_test_data_subdirs( protocol,1587 int64_t dirtodelete = create_test_data_subdirs(*apProtocol, 1509 1588 BackupProtocolClientListDirectory::RootDirectory, 1510 1589 "test_delete", 6 /* depth */, *apRefCount); … … 1512 1591 // And delete them 1513 1592 { 1514 std::auto_ptr<BackupProtocolClientSuccess> dirdel( protocol.QueryDeleteDirectory(1593 std::auto_ptr<BackupProtocolClientSuccess> dirdel(apProtocol->QueryDeleteDirectory( 1515 1594 dirtodelete)); 1516 1595 TEST_THAT(dirdel->GetObjectID() == dirtodelete); … … 1550 1629 protocolReadOnly.QueryFinished(); 1551 1630 #endif 1552 protocol.QueryFinished();1631 apProtocol->QueryFinished(); 1553 1632 1554 1633 // Close logs … … 1743 1822 TEST_CHECK_THROWS(info->RemovedDeletedDirectory(2), BackupStoreException, StoreInfoIsReadOnly); 1744 1823 TEST_CHECK_THROWS(info->AddDeletedDirectory(2), BackupStoreException, StoreInfoIsReadOnly); 1824 TEST_CHECK_THROWS(info->SetAccountName("hello"), BackupStoreException, StoreInfoIsReadOnly); 1745 1825 } 1746 1826 { … … 1759 1839 info->AddDeletedDirectory(4); 1760 1840 info->RemovedDeletedDirectory(3); 1841 info->SetAccountName("whee"); 1761 1842 TEST_CHECK_THROWS(info->RemovedDeletedDirectory(9), BackupStoreException, StoreInfoDirNotInList); 1762 1843 info->Save(); … … 1769 1850 TEST_THAT(info->GetBlocksSoftLimit() == 3461231233455433LL); 1770 1851 TEST_THAT(info->GetBlocksHardLimit() == 2934852487LL); 1852 TEST_THAT(info->GetAccountName() == "whee"); 1771 1853 const std::vector<int64_t> &delfiles(info->GetDeletedDirectories()); 1772 1854 TEST_THAT(delfiles.size() == 2); … … 1849 1931 1850 1932 TLSContext context; 1851 std::auto_ptr<SocketStreamTLS> conn = open_conn("localhost", 1852 context); 1853 test_server_login(*conn)->QueryFinished(); 1933 std::auto_ptr<SocketStreamTLS> conn; 1934 test_server_login("localhost", context, conn)->QueryFinished(); 1854 1935 1855 1936 BackupStoreAccountDatabase::Entry account =
Note: See TracChangeset
for help on using the changeset viewer.
