blob: 46a5f1800f060293444948f5c6657af24033a9d3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jclouds.googlecloudstorage.features;
import static com.google.common.io.BaseEncoding.base64;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.ws.rs.core.MediaType;
import org.jclouds.googlecloudstorage.domain.Bucket;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.DestinationPredefinedAcl;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.ObjectRole;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.StorageClass;
import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
import org.jclouds.googlecloudstorage.domain.ObjectAccessControls;
import org.jclouds.googlecloudstorage.domain.RewriteResponse;
import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageApiLiveTest;
import org.jclouds.googlecloudstorage.options.ComposeObjectOptions;
import org.jclouds.googlecloudstorage.options.CopyObjectOptions;
import org.jclouds.googlecloudstorage.options.DeleteObjectOptions;
import org.jclouds.googlecloudstorage.options.GetObjectOptions;
import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
import org.jclouds.googlecloudstorage.options.ListObjectOptions;
import org.jclouds.googlecloudstorage.options.UpdateObjectOptions;
import org.jclouds.http.internal.PayloadEnclosingImpl;
import org.jclouds.io.ByteStreams2;
import org.jclouds.io.ContentMetadata;
import org.jclouds.io.PayloadEnclosing;
import org.jclouds.io.Payloads;
import org.jclouds.io.payloads.ByteSourcePayload;
import org.jclouds.utils.TestUtils;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.beust.jcommander.internal.Lists;
import com.google.common.collect.ImmutableMap;
import com.google.common.hash.Hashing;
import com.google.common.io.ByteSource;
public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
private static final String BUCKET_NAME = "jcloudsobjectoperations" + UUID.randomUUID();
private static final String BUCKET_NAME2 = "jcloudsobjectdestination" + UUID.randomUUID();
private static final String UPLOAD_OBJECT_NAME = "objectOperation.txt";
private static final String UPLOAD_OBJECT_NAME2 = "jcloudslogo.jpg";
private static final String MULTIPART_UPLOAD_OBJECT = "multipart_related.jpg";
private static final String COPIED_OBJECT_NAME = "copyofObjectOperation.txt";
private static final String COPIED_OBJECT_NAME2 = "copyObjectWithMeta.txt";
private static final String COMPOSED_OBJECT = "ComposedObject1.txt";
private static final String COMPOSED_OBJECT2 = "ComposedObject2.json";
private static final String NONEXISTENT_OBJECT_NAME = "noSuchObject.txt";
private static final String REWRITE_OBJECT_NAME = "rewriteObject.txt";
private PayloadEnclosing testPayload;
private Long RANDOM_LONG = 100L;
private Long metageneration;
private Long generation;
private String md5Hash;
private String crc32c;
private ObjectApi api() {
return api.getObjectApi();
}
// Create the buckets
@BeforeClass
private void createBucket() {
BucketTemplate template = new BucketTemplate().name(BUCKET_NAME);
Bucket bucket = api.getBucketApi().createBucket(PROJECT_NUMBER, template);
assertNotNull(bucket);
BucketTemplate template2 = new BucketTemplate().name(BUCKET_NAME2);
Bucket bucket2 = api.getBucketApi().createBucket(PROJECT_NUMBER, template2);
assertNotNull(bucket2);
}
// Object Operations
@Test(groups = "live")
public void testSimpleUpload() throws IOException {
long contentLength = 512L;
ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload byteSourcePayload = Payloads.newByteSourcePayload(byteSource);
PayloadEnclosing payload = new PayloadEnclosingImpl(byteSourcePayload);
payload.getPayload().getContentMetadata().setContentLength(contentLength);
this.testPayload = payload;
InsertObjectOptions options = new InsertObjectOptions().name(UPLOAD_OBJECT_NAME);
GoogleCloudStorageObject gcsObject = api().simpleUpload(BUCKET_NAME, "text/plain",
payload.getPayload().getContentMetadata().getContentLength(), payload.getPayload(), options);
assertNotNull(gcsObject);
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME);
}
@Test(groups = "live", dependsOnMethods = "testSimpleUpload")
public void testRewrite() throws IOException {
GoogleCloudStorageObject gcsObject = api().getObject(BUCKET_NAME, UPLOAD_OBJECT_NAME);
System.out.println(gcsObject);
RewriteResponse response = api().rewriteObjects(BUCKET_NAME, REWRITE_OBJECT_NAME, BUCKET_NAME, UPLOAD_OBJECT_NAME);
assertNotNull(response);
assertTrue(response.done());
assertEquals(response.objectSize(), 512);
assertEquals(response.totalBytesRewritten(), 512);
assertEquals(response.rewriteToken(), null);
assertNotNull(response.resource());
}
@Test(groups = "live", dependsOnMethods = "testRewrite")
public void testDownload() throws IOException {
PayloadEnclosing impl = api().download(BUCKET_NAME, UPLOAD_OBJECT_NAME);
ContentMetadata meta = impl.getPayload().getContentMetadata();
assertNotNull(impl);
assertNotNull(impl.getPayload());
assertNotNull(meta);
assertEquals(meta.getContentType(), "text/plain");
testPayload.getPayload().getContentMetadata().setContentDisposition("attachment");
assertEquals(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream()),
ByteStreams2.toByteArrayAndClose(testPayload.getPayload().openStream()));
}
@Test(groups = "live", dependsOnMethods = "testSimpleUpload")
public void testSimpleJpegUpload() throws IOException {
long contentLength = 2 * 1024L;
ByteSource testSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload payload = Payloads.newByteSourcePayload(testSource);
InsertObjectOptions options = new InsertObjectOptions().name(UPLOAD_OBJECT_NAME2);
GoogleCloudStorageObject gcsObject = api().simpleUpload(BUCKET_NAME, "image/jpeg", contentLength, payload, options);
assertNotNull(gcsObject);
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME2);
// This is a client side validation of md5
md5Hash = base64().encode(testSource.hash(Hashing.md5()).asBytes());
// TODO: crc32c = without making a compile dep on guava 18.
checkHashCodes(gcsObject);
}
@Test(groups = "live", dependsOnMethods = "testSimpleUpload")
public void testGetObject() {
GoogleCloudStorageObject gcsObject = api().getObject(BUCKET_NAME, UPLOAD_OBJECT_NAME);
assertNotNull(gcsObject);
metageneration = gcsObject.metageneration();
generation = gcsObject.generation();
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME);
assertEquals(gcsObject.contentType(), "text/plain");
}
@Test(groups = "live", dependsOnMethods = "testGetObject")
public void testGetObjectWithOptions() {
GetObjectOptions options = new GetObjectOptions().ifGenerationMatch(generation)
.ifMetagenerationMatch(metageneration).ifGenerationNotMatch(generation + 1).projection(Projection.FULL);
GoogleCloudStorageObject gcsObject = api().getObject(BUCKET_NAME, UPLOAD_OBJECT_NAME, options);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME);
assertEquals(gcsObject.contentType(), "text/plain");
}
@Test(groups = "live", dependsOnMethods = "testGetObject")
public void testCopyObject() throws IOException {
GoogleCloudStorageObject gcsObject = api().copyObject(BUCKET_NAME2, COPIED_OBJECT_NAME, BUCKET_NAME, UPLOAD_OBJECT_NAME);
assertNotNull(gcsObject);
assertEquals(gcsObject.bucket(), BUCKET_NAME2);
assertEquals(gcsObject.name(), COPIED_OBJECT_NAME);
assertEquals(gcsObject.contentType(), "text/plain");
// Test for data
PayloadEnclosing impl = api().download(BUCKET_NAME2, COPIED_OBJECT_NAME);
assertNotNull(impl);
assertEquals(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream()),
ByteStreams2.toByteArrayAndClose(testPayload.getPayload().openStream()));
}
@Test(groups = "live", dependsOnMethods = "testGetObject")
public void testCopyObjectWithUpdatedMetadata() throws IOException {
String METADATA_KEY = "key1";
String METADATA_VALUE = "value1";
ObjectTemplate template = new ObjectTemplate().contentLanguage("fr").contentType("text/plain")
.contentDisposition("attachment").customMetadata(METADATA_KEY, METADATA_VALUE);
GoogleCloudStorageObject gcsObject = api().copyObject(BUCKET_NAME2, COPIED_OBJECT_NAME2, BUCKET_NAME, UPLOAD_OBJECT_NAME, template);
assertNotNull(gcsObject);
assertEquals(gcsObject.bucket(), BUCKET_NAME2);
assertEquals(gcsObject.name(), COPIED_OBJECT_NAME2);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.contentType(), "text/plain");
assertEquals(gcsObject.metadata().get(METADATA_KEY), METADATA_VALUE);
assertEquals(gcsObject.contentLanguage(), "fr");
// Test for data
PayloadEnclosing impl = api().download(BUCKET_NAME2, COPIED_OBJECT_NAME2);
assertNotNull(impl);
assertEquals(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream()),
ByteStreams2.toByteArrayAndClose(testPayload.getPayload().openStream()));
}
@Test(groups = "live", dependsOnMethods = "testCopyObject")
public void testCopyObjectWithOptions() {
CopyObjectOptions options = new CopyObjectOptions().ifSourceGenerationMatch(generation)
.ifSourceMetagenerationMatch(metageneration).projection(Projection.FULL);
GoogleCloudStorageObject gcsObject = api()
.copyObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME, BUCKET_NAME, UPLOAD_OBJECT_NAME, options);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME2);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME);
assertEquals(gcsObject.contentType(), "text/plain");
}
@Test(groups = "live", dependsOnMethods = "testCopyObjectWithOptions")
public void testComposeObject() {
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
ObjectTemplate destination = new ObjectTemplate().contentType("text/plain").addAcl(oacl);
List<GoogleCloudStorageObject> sourceList = Lists.newArrayList();
sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME));
sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.builder()
.fromGoogleCloudStorageObject(sourceList)
.destination(destination)
.build();
GoogleCloudStorageObject gcsObject = api().composeObjects(BUCKET_NAME2, COMPOSED_OBJECT, requestTemplate);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME2);
assertEquals(gcsObject.name(), COMPOSED_OBJECT);
assertEquals(gcsObject.contentType(), "text/plain");
}
@Test(groups = "live", dependsOnMethods = "testComposeObject")
public void testComposeObjectWithOptions() {
ObjectTemplate destination = new ObjectTemplate().contentType(MediaType.APPLICATION_JSON);
List<GoogleCloudStorageObject> sourceList = Lists.newArrayList();
sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME));
sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.builder()
.fromGoogleCloudStorageObject(sourceList)
.destination(destination)
.build();
ComposeObjectOptions options = new ComposeObjectOptions().destinationPredefinedAcl(
DestinationPredefinedAcl.BUCKET_OWNER_READ).ifMetagenerationNotMatch(RANDOM_LONG);
GoogleCloudStorageObject gcsObject = api().composeObjects(BUCKET_NAME2, COMPOSED_OBJECT2, requestTemplate, options);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME2);
assertEquals(gcsObject.name(), COMPOSED_OBJECT2);
assertEquals(gcsObject.contentType(), MediaType.APPLICATION_JSON);
}
@Test(groups = "live", dependsOnMethods = "testComposeObjectWithOptions")
public void listObjects() {
ListPageWithPrefixes<GoogleCloudStorageObject> list = api().listObjects(BUCKET_NAME);
assertNotNull(list);
assertNotEquals(list.size(), 0);
}
@Test(groups = "live", dependsOnMethods = "testComposeObjectWithOptions")
public void testListObjectsWithOptions() {
ListObjectOptions options = new ListObjectOptions().maxResults(1);
ListPageWithPrefixes<GoogleCloudStorageObject> list = api().listObjects(BUCKET_NAME, options);
while (list.nextPageToken() != null) {
assertNotNull(list);
assertEquals(list.size(), 1);
options = new ListObjectOptions().maxResults(1).pageToken(list.nextPageToken());
list = api().listObjects(BUCKET_NAME, options);
}
}
@Test(groups = "live", dependsOnMethods = "testComposeObjectWithOptions")
public void testUpdateObject() {
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
ObjectTemplate template = new ObjectTemplate().addAcl(oacl).contentType("image/jpeg");
GoogleCloudStorageObject gcsObject = api().updateObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2, template);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME2);
assertEquals(gcsObject.contentType(), "image/jpeg");
}
@Test(groups = "live", dependsOnMethods = "testUpdateObject")
public void testUpdateObjectWithOptions() {
String METADATA_KEY = "key1";
String METADATA_VALUE = "value1";
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
UpdateObjectOptions options = new UpdateObjectOptions().ifMetagenerationNotMatch(RANDOM_LONG)
.ifGenerationNotMatch(RANDOM_LONG);
ObjectTemplate template = new ObjectTemplate().addAcl(oacl).contentType("image/jpeg")
.contentDisposition("attachment").customMetadata(METADATA_KEY, METADATA_VALUE);
GoogleCloudStorageObject gcsObject = api().updateObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2, template, options);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME2);
assertEquals(gcsObject.contentType(), "image/jpeg");
assertNotNull(gcsObject.metadata());
assertNotNull(gcsObject.metadata().get(METADATA_KEY), METADATA_VALUE);
}
@Test(groups = "live", dependsOnMethods = "testUpdateObjectWithOptions")
public void testPatchObject() {
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.READER).build();
ObjectTemplate template = new ObjectTemplate().addAcl(oacl).contentType("image/jpeg");
GoogleCloudStorageObject gcsObject = api().patchObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2, template);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME2);
assertEquals(gcsObject.contentType(), "image/jpeg");
}
@Test(groups = "live", dependsOnMethods = "testPatchObject")
public void testPatchObjectsWithOptions() {
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
UpdateObjectOptions options = new UpdateObjectOptions().ifMetagenerationNotMatch(RANDOM_LONG)
.ifGenerationNotMatch(RANDOM_LONG);
ObjectTemplate template = new ObjectTemplate().addAcl(oacl).contentType("image/jpeg")
.contentDisposition("attachment");
GoogleCloudStorageObject gcsObject = api().patchObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2, template, options);
assertNotNull(gcsObject);
assertNotNull(gcsObject.acl());
assertEquals(gcsObject.bucket(), BUCKET_NAME);
assertEquals(gcsObject.name(), UPLOAD_OBJECT_NAME2);
assertEquals(gcsObject.contentType(), "image/jpeg");
assertEquals(gcsObject.contentDisposition(), "attachment");
}
@Test(groups = "live", dependsOnMethods = "testPatchObjectsWithOptions")
public void testMultipartJpegUpload() throws IOException {
long contentLength = 32 * 1024L;
ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource);
PayloadEnclosing payloadImpl = new PayloadEnclosingImpl(payload);
ObjectTemplate template = new ObjectTemplate();
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
// This would trigger server side validation of md5
md5Hash = base64().encode(byteSource.hash(Hashing.md5()).asBytes());
// TODO: crc32c = without making a compile dep on guava 18
template.contentType("image/jpeg").addAcl(oacl).size(contentLength).name(MULTIPART_UPLOAD_OBJECT)
.contentLanguage("en").contentDisposition("attachment").md5Hash(md5Hash)
.storageClass(StorageClass.NEARLINE)
.customMetadata("custommetakey1", "custommetavalue1").crc32c(crc32c)
.customMetadata(ImmutableMap.of("Adrian", "powderpuff"));
GoogleCloudStorageObject gcsObject = api().multipartUpload(BUCKET_NAME, template, payloadImpl.getPayload());
assertThat(gcsObject.bucket()).isEqualTo(BUCKET_NAME);
assertThat(gcsObject.name()).isEqualTo(MULTIPART_UPLOAD_OBJECT);
checkHashCodes(gcsObject);
assertThat(gcsObject.metadata()).contains(entry("custommetakey1", "custommetavalue1"),
entry("Adrian", "powderpuff")).doesNotContainKey("adrian");
gcsObject = api().getObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT, null);
assertThat(gcsObject).isNotNull();
assertThat(gcsObject.storageClass()).isEqualTo(StorageClass.NEARLINE);
PayloadEnclosing impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
assertThat(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream())).isEqualTo(
ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
}
@Test(groups = "live", dependsOnMethods = "testPatchObjectsWithOptions")
public void testMultipartJpegUploadArchive() throws IOException {
long contentLength = 32 * 1024L;
ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource);
PayloadEnclosing payloadImpl = new PayloadEnclosingImpl(payload);
ObjectTemplate template = new ObjectTemplate();
ObjectAccessControls oacl = ObjectAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
.role(ObjectRole.OWNER).build();
// This would trigger server side validation of md5
md5Hash = base64().encode(byteSource.hash(Hashing.md5()).asBytes());
// TODO: crc32c = without making a compile dep on guava 18
template.contentType("image/jpeg").addAcl(oacl).size(contentLength).name(MULTIPART_UPLOAD_OBJECT)
.contentLanguage("en").contentDisposition("attachment").md5Hash(md5Hash)
.storageClass(StorageClass.ARCHIVE)
.customMetadata("custommetakey1", "custommetavalue1").crc32c(crc32c)
.customMetadata(ImmutableMap.of("Adrian", "powderpuff"));
GoogleCloudStorageObject gcsObject = api().multipartUpload(BUCKET_NAME, template, payloadImpl.getPayload());
assertThat(gcsObject.bucket()).isEqualTo(BUCKET_NAME);
assertThat(gcsObject.name()).isEqualTo(MULTIPART_UPLOAD_OBJECT);
checkHashCodes(gcsObject);
assertThat(gcsObject.metadata()).contains(entry("custommetakey1", "custommetavalue1"),
entry("Adrian", "powderpuff")).doesNotContainKey("adrian");
gcsObject = api().getObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT, null);
assertThat(gcsObject).isNotNull();
assertThat(gcsObject.storageClass()).isEqualTo(StorageClass.ARCHIVE);
PayloadEnclosing impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
assertThat(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream())).isEqualTo(
ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));
}
private void checkHashCodes(GoogleCloudStorageObject gcsObject) {
assertEquals(gcsObject.md5Hash(), md5Hash);
if (crc32c != null) {
assertEquals(gcsObject.crc32c(), crc32c);
}
}
@Test(groups = "live", dependsOnMethods = "testMultipartJpegUpload")
public void testDeleteObject() {
assertTrue(api().deleteObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME));
assertTrue(api().deleteObject(BUCKET_NAME2, COMPOSED_OBJECT2));
assertTrue(api().deleteObject(BUCKET_NAME2, COMPOSED_OBJECT));
assertTrue(api().deleteObject(BUCKET_NAME2, COPIED_OBJECT_NAME));
assertTrue(api().deleteObject(BUCKET_NAME2, COPIED_OBJECT_NAME2));
assertFalse(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME));
assertTrue(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2));
assertTrue(api().deleteObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT));
assertTrue(api().deleteObject(BUCKET_NAME, REWRITE_OBJECT_NAME));
assertFalse(api().deleteObject(BUCKET_NAME, NONEXISTENT_OBJECT_NAME));
}
@Test(groups = "live", dependsOnMethods = "testPatchObjectsWithOptions")
public void testDeleteObjectWithOptions() {
DeleteObjectOptions options = new DeleteObjectOptions().ifGenerationMatch(generation).ifMetagenerationMatch(
metageneration);
api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME, options);
}
@AfterClass
private void deleteBucket() {
api.getBucketApi().deleteBucket(BUCKET_NAME);
api.getBucketApi().deleteBucket(BUCKET_NAME2);
}
}