summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/backupstore/BackupCommands.cpp22
-rw-r--r--test/backupstore/testbackupstore.cpp13
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();