From 61ea7ff8dee0df31936a5aefafa272a30f6bc7bd Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 21 Jan 2022 15:04:51 -0300 Subject: [PATCH] Make deleting a non-existent file is tolerable --- .../org/briarproject/bramble/mailbox/MailboxApi.java | 6 +++++- .../briarproject/bramble/mailbox/MailboxApiImpl.java | 4 +++- .../briarproject/bramble/mailbox/MailboxApiTest.java | 10 ++++++++++ .../bramble/mailbox/MailboxIntegrationTest.java | 4 ++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java index 29f94e55f..5f2e2ee91 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApi.java @@ -92,9 +92,13 @@ interface MailboxApi { * Used by owner and contacts to delete files. *

* 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 diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java index 60ee4858f..1042b559f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxApiImpl.java @@ -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(); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java index 2e90525af..35d15943a 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxApiTest.java @@ -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 diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java index f02b3f3a6..7fd133d05 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxIntegrationTest.java @@ -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));