"virtual-path/testing.txt",
"vîrtüál-πå†h/tés†ing.txt"
};
for (int i = 0; i < objectNames.length; i++) {
StorageObject object = new StorageObject(
objectNames[i], "A little data");
object.addMetadata("object-offset", "" + i);
service.putObject(sourceBucketName, object);
}
// Copy objects within bucket, retaining metadata
String targetPath = "copies/";
for (String objectName: objectNames) {
StorageObject targetObject = new StorageObject(
targetPath + objectName);
service.copyObject(sourceBucketName, objectName,
sourceBucketName, targetObject,
false // replaceMetadata
);
}
// Ensure objects are in target location and have the same metadata
for (int i = 0; i < objectNames.length; i++) {
StorageObject object = service.getObjectDetails(
sourceBucketName, targetPath + objectNames[i]);
assertEquals("" + i, object.getMetadata("object-offset"));
}
// Copy object within bucket, replacing metadata
StorageObject targetObject = new StorageObject(
targetPath + objectNames[0]);
targetObject.addMetadata("replaced-metadata", "booyah!");
service.copyObject(sourceBucketName, objectNames[0],
sourceBucketName, targetObject,
true // replaceMetadata
);
StorageObject copiedObject = service.getObjectDetails(
sourceBucketName, targetObject.getName());
assertNull(copiedObject.getMetadata("object-offset"));
assertEquals("booyah!", copiedObject.getMetadata("replaced-metadata"));
// Copy objects between buckets
List<Map<String, Object>> copyResults =
new ArrayList<Map<String, Object>>();
for (String objectName: objectNames) {
targetObject = new StorageObject(objectName);
Map<String, Object> copyResult = service.copyObject(
sourceBucketName, objectName,
targetBucketName, targetObject,
false // replaceMetadata
);
copyResults.add(copyResult);
copiedObject = service.getObjectDetails(
targetBucketName, targetObject.getName());
}
assertEquals(4, service.listObjects(targetBucketName).length);
// Check results map from copy operation
Map<String, Object> firstCopyResult = copyResults.get(0);
assertEquals("\"5d11eb8a313fc3e205fef245b7be06c7\"",
firstCopyResult.get("ETag"));
assertEquals(sourceBucketName,
firstCopyResult.get("X-JetS3t-SourceBucketName"));
assertEquals(objectNames[0],
firstCopyResult.get("X-JetS3t-SourceObjectKey"));
assertEquals(targetBucketName,
firstCopyResult.get("X-JetS3t-DestinationBucketName"));
assertEquals(objectNames[0], // Note same source and target key
firstCopyResult.get("X-JetS3t-DestinationObjectKey"));
assertNull(
firstCopyResult.get("X-JetS3t-VersionId"));
assertNull(
firstCopyResult.get("X-JetS3t-DestinationObjectStorageClass"));
assertNull(
firstCopyResult.get("X-JetS3t-DestinationObjectServerSideEncryptionAlgorithm"));
// Rename convenience method
int objectOffset = 3;
targetObject = new StorageObject("my-new-name");
service.renameObject(
sourceBucketName, objectNames[objectOffset], targetObject);
copiedObject = service.getObjectDetails(
sourceBucketName, targetObject.getName());
// Ensure we have a new object with the same metadata
assertEquals("my-new-name", copiedObject.getKey());
assertEquals("" + objectOffset, copiedObject.getMetadata("object-offset"));
// Update metadata convenience method
objectOffset = 2;
targetObject = new StorageObject(objectNames[objectOffset]);
targetObject.addMetadata("object-offset", "" + objectOffset); // Unchanged
targetObject.addMetadata("was-i-updated", "yes!");
service.updateObjectMetadata(sourceBucketName, targetObject);
copiedObject = service.getObjectDetails(
sourceBucketName, targetObject.getName());
// Ensure we have the same object with updated metadata
assertEquals("yes!", copiedObject.getUserMetadataMap().get("was-i-updated"));
// Move object convenience method - retain metadata
objectOffset = 0;
targetObject = new StorageObject(objectNames[objectOffset]);
service.moveObject(sourceBucketName, objectNames[objectOffset],
targetBucketName, targetObject, false);
try {
service.getObjectDetails(
sourceBucketName, objectNames[objectOffset]);
fail("Source object should be moved");
} catch (ServiceException e) {
// Expected
}
copiedObject = service.getObjectDetails(
targetBucketName, targetObject.getName());
assertEquals("" + objectOffset, copiedObject.getUserMetadataMap().get("object-offset"));
// Move object convenience method - replace metadata
objectOffset = 1;
targetObject = new StorageObject(objectNames[objectOffset]);
targetObject.addMetadata("was-i-moved-with-new-metadata", "yes!");
service.moveObject(sourceBucketName, objectNames[objectOffset],
targetBucketName, targetObject, true);
try {
service.getObjectDetails(
sourceBucketName, objectNames[objectOffset]);
fail("Source object should be moved");
} catch (ServiceException e) {
// Expected
}
copiedObject = service.getObjectDetails(
targetBucketName, targetObject.getName());
assertNull(copiedObject.getMetadata("object-offset"));
assertEquals("yes!", copiedObject.getMetadata("was-i-moved-with-new-metadata"));
} finally {
cleanupBucketForTest("testCopyObjects-source");
cleanupBucketForTest("testCopyObjects-target");
}
}