forked from eugenp/tutorials
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BAEL-1595 - Using jets3t as a client for Amazon S3 (eugenp#4018)
* BAEL-1595 - Using jets3t as a client for Amazon S3 * BAEL-1595 - Using jets3t as a client for Amazon S3. Missed jar versions.
- Loading branch information
1 parent
b073255
commit 9adb3e3
Showing
2 changed files
with
366 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
351 changes: 351 additions & 0 deletions
351
aws/src/test/java/com/baeldung/jets3t/JetS3tLiveTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,351 @@ | ||
package com.baeldung.jets3t; | ||
|
||
import org.apache.commons.codec.digest.DigestUtils; | ||
import org.apache.commons.logging.Log; | ||
import org.apache.commons.logging.LogFactory; | ||
import org.jets3t.service.S3Service; | ||
import org.jets3t.service.ServiceException; | ||
import org.jets3t.service.impl.rest.httpclient.RestS3Service; | ||
import org.jets3t.service.model.S3Bucket; | ||
import org.jets3t.service.model.S3Object; | ||
import org.jets3t.service.model.StorageObject; | ||
import org.jets3t.service.security.AWSCredentials; | ||
import org.junit.BeforeClass; | ||
import org.junit.Test; | ||
|
||
import java.io.*; | ||
import java.nio.file.Files; | ||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.stream.Collectors; | ||
|
||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; | ||
import static junit.framework.TestCase.assertEquals; | ||
import static org.junit.Assert.assertNotNull; | ||
import static org.junit.Assert.assertTrue; | ||
|
||
public class JetS3tLiveTest { | ||
|
||
private Log log = LogFactory.getLog(JetS3tLiveTest.class); | ||
|
||
private static final String BucketName = "baeldung-barfoo"; | ||
private static final String TestString = "test string"; | ||
private static final String TestStringName = "string object"; | ||
private static final String TgtBucket = "baeldung-tgtbucket"; | ||
|
||
private static S3Service s3Service; | ||
|
||
@BeforeClass | ||
public static void connectS3() throws Exception { | ||
|
||
// Replace with your keys | ||
String awsAccessKey = "your access key"; | ||
String awsSecretKey = "your secret key"; | ||
|
||
// Create credentials | ||
AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey); | ||
|
||
// Create service | ||
s3Service = new RestS3Service(awsCredentials); | ||
} | ||
|
||
@Test | ||
public void givenCreate_AndDeleteBucket_CountGoesUpThenDown() throws Exception { | ||
|
||
// List buckets, get a count | ||
S3Bucket[] myBuckets = s3Service.listAllBuckets(); | ||
int count = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size(); | ||
|
||
// Create a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// List again | ||
myBuckets = s3Service.listAllBuckets(); | ||
int newCount = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size(); | ||
|
||
// We should have one more | ||
assertEquals((count + 1), newCount); | ||
|
||
// Delete so next test doesn't fail | ||
deleteBucket(); | ||
|
||
// Check the count again, just for laughs | ||
myBuckets = s3Service.listAllBuckets(); | ||
newCount = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size(); | ||
assertEquals(count, newCount); | ||
|
||
} | ||
|
||
private S3Bucket createBucket() throws Exception { | ||
S3Bucket bucket = s3Service.createBucket(BucketName); | ||
log.info(bucket); | ||
return bucket; | ||
} | ||
|
||
|
||
private void deleteBucket() throws ServiceException { | ||
s3Service.deleteBucket(BucketName); | ||
} | ||
|
||
@Test | ||
public void givenString_Uploaded_StringInfoIsAvailable() throws Exception { | ||
|
||
// Create a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// Upload a string | ||
uploadStringData(); | ||
|
||
// Get the details | ||
StorageObject objectDetailsOnly = s3Service.getObjectDetails(BucketName, TestStringName); | ||
log.info("Content type: " + objectDetailsOnly.getContentType() + " length: " + objectDetailsOnly.getContentLength()); | ||
|
||
// Delete it | ||
deleteObject(TestStringName); | ||
|
||
// For next test | ||
deleteBucket(); | ||
} | ||
|
||
private void uploadStringData() throws Exception { | ||
S3Object stringObject = new S3Object(TestStringName, TestString); | ||
s3Service.putObject(BucketName, stringObject); | ||
log.info("Content type:" + stringObject.getContentType()); | ||
} | ||
|
||
private void deleteObject(String objectName) throws ServiceException { | ||
s3Service.deleteObject(BucketName, objectName); | ||
} | ||
|
||
@Test | ||
public void givenStringUploaded_StringIsDownloaded() throws Exception { | ||
|
||
// Get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
uploadStringData(); | ||
|
||
// Download | ||
S3Object stringObject = s3Service.getObject(BucketName, TestStringName); | ||
|
||
// Process stream into a string | ||
String downloadedString = new BufferedReader(new InputStreamReader(stringObject.getDataInputStream())).lines().collect(Collectors.joining("\n")); | ||
|
||
// Verify | ||
assertTrue(TestString.equals(downloadedString)); | ||
|
||
|
||
// Clean up for next test | ||
deleteObject(TestStringName); | ||
deleteBucket(); | ||
} | ||
|
||
@Test | ||
public void givenBinaryFileUploaded_FileIsDownloaded() throws Exception { | ||
|
||
// get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// Put a binary file | ||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg")); | ||
s3Service.putObject(BucketName, fileObject); | ||
|
||
// Print info about type and name | ||
log.info("Content type:" + fileObject.getContentType()); | ||
log.info("File object name is " + fileObject.getName()); | ||
|
||
// Download | ||
S3Object newFileObject = s3Service.getObject(BucketName, "test.jpg"); | ||
|
||
// Save to a different name | ||
File newFile = new File("src/test/resources/newtest.jpg"); | ||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING); | ||
|
||
|
||
// Get hashes and compare | ||
String origMD5 = getFileMD5("src/test/resources/test.jpg"); | ||
String newMD5 = getFileMD5("src/test/resources/newtest.jpg"); | ||
assertTrue(origMD5.equals(newMD5)); | ||
|
||
// Clean up | ||
deleteObject("test.jpg"); | ||
deleteBucket(); | ||
} | ||
|
||
// Get MD5 hash for a file | ||
private String getFileMD5(String filename) throws IOException { | ||
try (FileInputStream fis = new FileInputStream(new File(filename))) { | ||
return DigestUtils.md5Hex(fis); | ||
} | ||
} | ||
|
||
|
||
|
||
@Test | ||
public void givenStreamDataUploaded_StreamDataIsDownloaded() throws Exception { | ||
|
||
// get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
ArrayList<Integer> numbers = new ArrayList<>(); | ||
numbers.add(2); | ||
numbers.add(3); | ||
numbers.add(5); | ||
numbers.add(7); | ||
|
||
// Serialize ArrayList | ||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); | ||
ObjectOutputStream objectOutputStream = new ObjectOutputStream(bytes); | ||
objectOutputStream.writeObject(numbers); | ||
|
||
// Wrap bytes | ||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes.toByteArray()); | ||
|
||
// Create and populate object | ||
S3Object streamObject = new S3Object("stream"); | ||
streamObject.setDataInputStream(byteArrayInputStream); | ||
streamObject.setContentLength(byteArrayInputStream.available()); | ||
streamObject.setContentType("binary/octet-stream"); | ||
|
||
// Put it | ||
s3Service.putObject(BucketName, streamObject); | ||
|
||
// Get it | ||
S3Object newStreamObject = s3Service.getObject(BucketName, "stream"); | ||
|
||
// Convert back to ArrayList | ||
ObjectInputStream objectInputStream = new ObjectInputStream(newStreamObject.getDataInputStream()); | ||
ArrayList<Integer> newNumbers = (ArrayList<Integer>)objectInputStream.readObject(); | ||
|
||
assertEquals(2, (int)newNumbers.get(0)); | ||
assertEquals(3, (int)newNumbers.get(1)); | ||
assertEquals(5, (int)newNumbers.get(2)); | ||
assertEquals(7, (int)newNumbers.get(3)); | ||
|
||
// Clean up | ||
deleteObject("stream"); | ||
deleteBucket(); | ||
} | ||
|
||
@Test | ||
public void whenFileCopied_CopyIsSame() throws Exception { | ||
|
||
// get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// Put a binary file | ||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg")); | ||
s3Service.putObject(BucketName, fileObject); | ||
|
||
|
||
// Copy it | ||
S3Object targetObject = new S3Object("testcopy.jpg"); | ||
s3Service.copyObject(BucketName, "test.jpg", BucketName, targetObject, false); | ||
|
||
|
||
// Download | ||
S3Object newFileObject = s3Service.getObject(BucketName, "testcopy.jpg"); | ||
|
||
// Save to a different name | ||
File newFile = new File("src/test/resources/testcopy.jpg"); | ||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING); | ||
|
||
|
||
// Get hashes and compare | ||
String origMD5 = getFileMD5("src/test/resources/test.jpg"); | ||
String newMD5 = getFileMD5("src/test/resources/testcopy.jpg"); | ||
assertTrue(origMD5.equals(newMD5)); | ||
|
||
// Clean up | ||
deleteObject("test.jpg"); | ||
deleteObject("testcopy.jpg"); | ||
deleteBucket(); | ||
|
||
} | ||
|
||
|
||
@Test | ||
public void whenFileRenamed_NewNameIsSame() throws Exception { | ||
|
||
// get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// Put a binary file | ||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg")); | ||
s3Service.putObject(BucketName, fileObject); | ||
|
||
|
||
// Copy it | ||
s3Service.renameObject(BucketName, "test.jpg", new S3Object("spidey.jpg")); | ||
|
||
|
||
// Download | ||
S3Object newFileObject = s3Service.getObject(BucketName, "spidey.jpg"); | ||
|
||
// Save to a different name | ||
File newFile = new File("src/test/resources/spidey.jpg"); | ||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING); | ||
|
||
|
||
// Get hashes and compare | ||
String origMD5 = getFileMD5("src/test/resources/test.jpg"); | ||
String newMD5 = getFileMD5("src/test/resources/spidey.jpg"); | ||
assertTrue(origMD5.equals(newMD5)); | ||
|
||
// Clean up | ||
deleteObject("test.jpg"); | ||
deleteObject("spidey.jpg"); | ||
deleteBucket(); | ||
|
||
} | ||
|
||
@Test | ||
public void whenFileMoved_NewInstanceIsSame() throws Exception { | ||
|
||
// get a bucket | ||
S3Bucket bucket = createBucket(); | ||
assertNotNull(bucket); | ||
|
||
// create another bucket | ||
S3Bucket tgtBucket = s3Service.createBucket(TgtBucket); | ||
|
||
|
||
// Put a binary file | ||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg")); | ||
s3Service.putObject(BucketName, fileObject); | ||
|
||
|
||
// Copy it | ||
s3Service.moveObject(BucketName, "test.jpg", TgtBucket, | ||
new S3Object("spidey.jpg"), false); | ||
|
||
|
||
// Download | ||
S3Object newFileObject = s3Service.getObject(TgtBucket, "spidey.jpg"); | ||
|
||
// Save to a different name | ||
File newFile = new File("src/test/resources/spidey.jpg"); | ||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING); | ||
|
||
|
||
// Get hashes and compare | ||
String origMD5 = getFileMD5("src/test/resources/test.jpg"); | ||
String newMD5 = getFileMD5("src/test/resources/spidey.jpg"); | ||
assertTrue(origMD5.equals(newMD5)); | ||
|
||
// Clean up | ||
deleteBucket(); | ||
|
||
s3Service.deleteObject(TgtBucket, "spidey.jpg"); | ||
s3Service.deleteBucket(TgtBucket); | ||
} | ||
|
||
|
||
} |