|
12 | 12 | import static org.mockito.Mockito.verifyNoInteractions;
|
13 | 13 | import static org.mockito.Mockito.when;
|
14 | 14 |
|
| 15 | +import java.util.ArrayList; |
| 16 | +import java.util.Arrays; |
| 17 | +import java.util.Collection; |
| 18 | +import java.util.Collections; |
| 19 | +import java.util.List; |
15 | 20 | import java.util.concurrent.CompletableFuture;
|
16 | 21 | import java.util.concurrent.CompletionException;
|
17 | 22 | import org.junit.jupiter.api.BeforeEach;
|
|
22 | 27 |
|
23 | 28 | public class S3BackedPayloadStoreAsyncTest {
|
24 | 29 | private static final String S3_BUCKET_NAME = "test-bucket-name";
|
| 30 | + private static final String OTHER_S3_BUCKET_NAME = "other-bucket-name"; |
25 | 31 | private static final String ANY_PAYLOAD = "AnyPayload";
|
26 | 32 | private static final String ANY_S3_KEY = "AnyS3key";
|
| 33 | + private static final String ANY_OTHER_S3_KEY = "AnyOtherS3key"; |
27 | 34 | private static final String INCORRECT_POINTER_EXCEPTION_MSG = "Failed to read the S3 object pointer from given string";
|
28 | 35 | private PayloadStoreAsync payloadStore;
|
29 | 36 | private S3AsyncDao s3AsyncDao;
|
@@ -175,4 +182,70 @@ public void testDeleteOriginalPayloadIncorrectPointer() {
|
175 | 182 | verifyNoInteractions(s3AsyncDao);
|
176 | 183 | }
|
177 | 184 |
|
| 185 | + @Test |
| 186 | + public void testDeleteOriginalPayloadsOnSuccess() { |
| 187 | + when(s3AsyncDao.deletePayloadsFromS3(any(), any())).thenReturn(CompletableFuture.completedFuture(null)); |
| 188 | + |
| 189 | + List<String> payloadPointers = new ArrayList<>(); |
| 190 | + payloadPointers.add(new PayloadS3Pointer(S3_BUCKET_NAME, ANY_S3_KEY).toJson()); |
| 191 | + payloadStore.deleteOriginalPayloads(payloadPointers).join(); |
| 192 | + |
| 193 | + ArgumentCaptor<String> bucketNameCaptor = ArgumentCaptor.forClass(String.class); |
| 194 | + ArgumentCaptor<Collection> keyCaptor = ArgumentCaptor.forClass(Collection.class); |
| 195 | + verify(s3AsyncDao, times(1)).deletePayloadsFromS3(bucketNameCaptor.capture(), keyCaptor.capture()); |
| 196 | + |
| 197 | + assertEquals(Collections.singletonList(ANY_S3_KEY), keyCaptor.getValue()); |
| 198 | + assertEquals(S3_BUCKET_NAME, bucketNameCaptor.getValue()); |
| 199 | + } |
| 200 | + |
| 201 | + @Test |
| 202 | + public void testDeleteOriginalPayloadsSameBucket() { |
| 203 | + when(s3AsyncDao.deletePayloadsFromS3(any(), any())).thenReturn(CompletableFuture.completedFuture(null)); |
| 204 | + |
| 205 | + List<String> payloadPointers = new ArrayList<>(); |
| 206 | + payloadPointers.add(new PayloadS3Pointer(S3_BUCKET_NAME, ANY_S3_KEY).toJson()); |
| 207 | + payloadPointers.add(new PayloadS3Pointer(S3_BUCKET_NAME, ANY_OTHER_S3_KEY).toJson()); |
| 208 | + payloadStore.deleteOriginalPayloads(payloadPointers).join(); |
| 209 | + |
| 210 | + ArgumentCaptor<String> bucketNameCaptor = ArgumentCaptor.forClass(String.class); |
| 211 | + ArgumentCaptor<Collection> keyCaptor = ArgumentCaptor.forClass(Collection.class); |
| 212 | + verify(s3AsyncDao, times(1)).deletePayloadsFromS3(bucketNameCaptor.capture(), keyCaptor.capture()); |
| 213 | + |
| 214 | + assertEquals(Arrays.asList(ANY_S3_KEY, ANY_OTHER_S3_KEY), keyCaptor.getValue()); |
| 215 | + assertEquals(S3_BUCKET_NAME, bucketNameCaptor.getValue()); |
| 216 | + } |
| 217 | + |
| 218 | + @Test |
| 219 | + public void testDeleteOriginalPayloadsDifferentBuckets() { |
| 220 | + when(s3AsyncDao.deletePayloadsFromS3(any(), any())).thenReturn(CompletableFuture.completedFuture(null)); |
| 221 | + |
| 222 | + List<String> payloadPointers = new ArrayList<>(); |
| 223 | + payloadPointers.add(new PayloadS3Pointer(S3_BUCKET_NAME, ANY_S3_KEY).toJson()); |
| 224 | + payloadPointers.add(new PayloadS3Pointer(OTHER_S3_BUCKET_NAME, ANY_OTHER_S3_KEY).toJson()); |
| 225 | + payloadStore.deleteOriginalPayloads(payloadPointers).join(); |
| 226 | + |
| 227 | + ArgumentCaptor<String> bucketNameCaptor = ArgumentCaptor.forClass(String.class); |
| 228 | + ArgumentCaptor<Collection> keyCaptor = ArgumentCaptor.forClass(Collection.class); |
| 229 | + verify(s3AsyncDao, times(2)).deletePayloadsFromS3(bucketNameCaptor.capture(), keyCaptor.capture()); |
| 230 | + |
| 231 | + assertEquals(Collections.singletonList(ANY_S3_KEY), keyCaptor.getAllValues().get(0)); |
| 232 | + assertEquals(Collections.singletonList(ANY_OTHER_S3_KEY), keyCaptor.getAllValues().get(1)); |
| 233 | + assertEquals(S3_BUCKET_NAME, bucketNameCaptor.getAllValues().get(0)); |
| 234 | + assertEquals(OTHER_S3_BUCKET_NAME, bucketNameCaptor.getAllValues().get(1)); |
| 235 | + } |
| 236 | + |
| 237 | + @Test |
| 238 | + public void testDeleteOriginalPayloadsIncorrectPointer() { |
| 239 | + List<String> payloadPointers = new ArrayList<>(); |
| 240 | + payloadPointers.add(new PayloadS3Pointer(S3_BUCKET_NAME, ANY_S3_KEY).toJson()); |
| 241 | + payloadPointers.add("IncorrectPointer"); |
| 242 | + |
| 243 | + CompletionException exception = assertThrows(CompletionException.class, () -> { |
| 244 | + payloadStore.deleteOriginalPayloads(payloadPointers).join(); |
| 245 | + }); |
| 246 | + |
| 247 | + assertTrue(exception.getMessage().contains(INCORRECT_POINTER_EXCEPTION_MSG)); |
| 248 | + verifyNoInteractions(s3AsyncDao); |
| 249 | + } |
| 250 | + |
178 | 251 | }
|
0 commit comments