diff options
-rw-r--r-- | lib/backupstore/BackupCommands.cpp | 22 | ||||
-rw-r--r-- | test/backupstore/testbackupstore.cpp | 13 |
2 files changed, 26 insertions, 9 deletions
diff --git a/lib/backupstore/BackupCommands.cpp b/lib/backupstore/BackupCommands.cpp index 468b2253..a0788f32 100644 --- a/lib/backupstore/BackupCommands.cpp +++ b/lib/backupstore/BackupCommands.cpp @@ -508,8 +508,26 @@ std::auto_ptr<BackupProtocolMessage> BackupProtocolCreateDirectory2::DoCommand( } bool alreadyExists = false; - int64_t id = rContext.AddDirectory(mContainingDirectoryID, mDirectoryName, attr, mAttributesModTime, alreadyExists); - + int64_t id; + + try + { + id = rContext.AddDirectory(mContainingDirectoryID, + mDirectoryName, attr, mAttributesModTime, mModificationTime, + alreadyExists); + } + catch(BackupStoreException &e) + { + if(e.GetSubType() == BackupStoreException::AddedFileExceedsStorageLimit) + { + return PROTOCOL_ERROR(Err_StorageLimitExceeded); + } + else + { + throw; + } + } + if(alreadyExists) { return PROTOCOL_ERROR(Err_DirectoryAlreadyExists); diff --git a/test/backupstore/testbackupstore.cpp b/test/backupstore/testbackupstore.cpp index a907e8dc..300a666b 100644 --- a/test/backupstore/testbackupstore.cpp +++ b/test/backupstore/testbackupstore.cpp @@ -2310,27 +2310,26 @@ bool test_account_limits_respected() std::auto_ptr<IOStream> upload(BackupStoreFile::EncodeFile("testfiles/test3", BackupProtocolListDirectory::RootDirectory, fnx, &modtime)); TEST_THAT(modtime != 0); - TEST_CHECK_THROWS(std::auto_ptr<BackupProtocolSuccess> stored(protocol.QueryStoreFile( + TEST_CHECK_THROWS(protocol.QueryStoreFile( BackupProtocolListDirectory::RootDirectory, modtime, modtime, /* use it for attr hash too */ 0, /* diff from ID */ fnx, - upload)), + upload), ConnectionException, Conn_Protocol_UnexpectedReply); // This currently causes a fatal error on the server, which // kills the connection. TODO FIXME return an error instead. std::auto_ptr<IOStream> attr(new MemBlockStream(&modtime, sizeof(modtime))); BackupStoreFilenameClear fnxd("exceed-limit-dir"); - TEST_CHECK_THROWS(std::auto_ptr<BackupProtocolSuccess> dirCreate( - protocol.QueryCreateDirectory( + TEST_CHECK_THROWS(protocol.QueryCreateDirectory( BackupProtocolListDirectory::RootDirectory, - 9837429842987984LL, fnxd, attr)), - ConnectionException, TLSReadFailed); + 9837429842987984LL, fnxd, attr), + ConnectionException, Conn_Protocol_UnexpectedReply); // Finish the connection. TODO FIXME reinstate this. - // protocol.QueryFinished(); + protocol.QueryFinished(); } tearDown(); |