Make deleting a non-existent file is tolerable

This commit is contained in:
Torsten Grote
2022-01-21 15:04:51 -03:00
parent 0fba65a722
commit 61ea7ff8de
4 changed files with 22 additions and 2 deletions

View File

@@ -92,9 +92,13 @@ interface MailboxApi {
* Used by owner and contacts to delete files.
* <p>
* Returns 200 OK (no exception) if deletion was successful.
*
* @throws TolerableFailureException on 404 response,
* because file was most likely deleted already.
*/
void deleteFile(MailboxProperties properties, String folderId,
String fileId) throws IOException, ApiException;
String fileId)
throws IOException, ApiException, TolerableFailureException;
/**
* Lists all contact outboxes that have files available

View File

@@ -223,7 +223,8 @@ class MailboxApiImpl implements MailboxApi {
@Override
public void deleteFile(MailboxProperties properties, String folderId,
String fileId) throws IOException, ApiException {
String fileId)
throws IOException, ApiException, TolerableFailureException {
String path = "/files/" + folderId + "/" + fileId;
Request request = getRequestBuilder(properties.getAuthToken())
.delete()
@@ -231,6 +232,7 @@ class MailboxApiImpl implements MailboxApi {
.build();
OkHttpClient client = httpClientProvider.get();
Response response = client.newCall(request).execute();
if (response.code() == 404) throw new TolerableFailureException();
if (response.code() != 200) throw new ApiException();
}

View File

@@ -591,6 +591,7 @@ public class MailboxApiTest extends BrambleTestCase {
server.enqueue(new MockResponse());
server.enqueue(new MockResponse().setResponseCode(205));
server.enqueue(new MockResponse().setResponseCode(401));
server.enqueue(new MockResponse().setResponseCode(404));
server.start();
String baseUrl = getBaseUrl(server);
MailboxProperties properties =
@@ -621,6 +622,15 @@ public class MailboxApiTest extends BrambleTestCase {
assertEquals("/files/" + contactInboxId + "/" + name,
request3.getPath());
assertToken(request3, token);
// file not found is tolerable
assertThrows(TolerableFailureException.class, () ->
api.deleteFile(properties, contactInboxId, name));
RecordedRequest request4 = server.takeRequest();
assertEquals("DELETE", request4.getMethod());
assertEquals("/files/" + contactInboxId + "/" + name,
request4.getPath());
assertToken(request4, token);
}
@Test

View File

@@ -225,6 +225,10 @@ public class MailboxIntegrationTest extends BrambleTestCase {
api.getFiles(ownerProperties, contact.outboxId));
assertEquals(emptyList(), api.getFolders(ownerProperties));
// deleting a non-existent file is tolerable
assertThrows(TolerableFailureException.class, () ->
api.deleteFile(ownerProperties, contact.outboxId, file3name));
// owner deletes contact again to leave clean state for other tests
api.deleteContact(ownerProperties, contactId);
assertEquals(emptyList(), api.getContacts(ownerProperties));