### Question:
JetS3Template extends S3Template { public List<BlobDetails> listContainerObjectDetails() { return listContainerObjectDetails(getDefaultContainerName()); } JetS3Template(final AwsCredentials awsCredentials);  JetS3Template(final AwsCredentials awsCredentials, final String defaultContainerName); boolean createContainer(String containerName); void createPublicContainer(String containerName); void deleteContainer(String containerName); void deleteObject(String objectName); void deleteObject(String containerName, String objectName); List<String> listContainerNames(); List<BlobDetails> listContainerObjectDetails(); ContainerStatus checkContainerStatus(String containerName); List<BlobDetails> listContainerObjectDetails(String containerName); String send(String objectName, String stringToSend); String send(String containerName, String objectName, String stringToSend); String send(File fileToSend); String send(String containerName, File fileToSend); String send(String containerName, String objectName, File fileToSend); String send(String objectName, InputStream is); String send(String containerName, String objectName, InputStream is); String sendAndReceiveUrl(String objectName, String stringToSend); String sendAndReceiveUrl(String containerName, String objectName, String stringToSend); String sendAndReceiveUrl(String containerName, String objectName, File fileToSend); String sendAndReceiveUrl(File fileToSend); String sendAndReceiveUrl(String objectName, InputStream is); String sendAndReceiveUrl(String containerName, File fileToSend); String sendAndReceiveUrl(String containerName, String objectName, InputStream is); String receiveAsString(String keyName); String receiveAsString(String containerName, String objectName); String receiveAndSaveToFile(String objectName, File toFile); String receiveAndSaveToFile(String containerName, String objectName, File toFile); InputStream receiveAsInputStream(String objectName); InputStream receiveAsInputStream(String containerName, String objectName); String createdSignedUrl(String containerName, String objectName, Date expiryDate);  }### Answer:
@Test(expected = StorageCommunicationException.class) public void testListBucketObjectsCauseS3CommunicationException() throws S3ServiceException { doThrow(new S3ServiceException()).when(s3Service).listObjects(argThat(S3_BUCKET_NAME_MATCHER)); template.listContainerObjectDetails(BUCKET_NAME); }
@Test public void testListBucketObjects() throws S3ServiceException { long currentMills = System.currentTimeMillis(); S3Object[] objs = new S3Object[]{new S3Object(), new S3Object(), new S3Object()}; for (int i = 0; i < objs.length; i++) { objs[i].setKey("key" + i); objs[i].setETag("eTag" + i); objs[i].setLastModifiedDate(new Date(currentMills - (24 * 60 * 60 * 1000 * i))); } doReturn(objs).when(s3Service).listObjects(argThat(S3_BUCKET_NAME_MATCHER)); List<BlobDetails> bucketObjects = template.listContainerObjectDetails(BUCKET_NAME); verify(s3Service).listObjects(argThat(S3_BUCKET_NAME_MATCHER)); assertEquals(objs.length, bucketObjects.size()); for (int i = 0; i < objs.length; i++) { assertEquals(objs[i].getKey(), bucketObjects.get(i).getName()); assertEquals(objs[i].getETag(), bucketObjects.get(i).getETag()); assertEquals(objs[i].getLastModifiedDate(), bucketObjects.get(i).getLastModified()); } }