Skip to content

Commit f8a4b12

Browse files
authored
feat: add support of null to remove the CORS configuration from bucket (#438)
* feat: add support of null to remove bucket CORS configuration * feat: addresse review changes
1 parent e63feb7 commit f8a4b12

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,7 @@ Builder setMetageneration(Long metageneration) {
12401240

12411241
@Override
12421242
public Builder setCors(Iterable<Cors> cors) {
1243-
this.cors = cors != null ? ImmutableList.copyOf(cors) : null;
1243+
this.cors = cors != null ? ImmutableList.copyOf(cors) : ImmutableList.<Cors>of();
12441244
return this;
12451245
}
12461246

google-cloud-storage/src/test/java/com/google/cloud/storage/BucketTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,4 +886,36 @@ public void testUpdateBucketLogging() {
886886
assertThat(actualUpdatedBucket.getLogging().getLogBucket()).isNull();
887887
assertThat(actualUpdatedBucket.getLogging().getLogObjectPrefix()).isNull();
888888
}
889+
890+
@Test
891+
public void testRemoveBucketCORS() {
892+
initializeExpectedBucket(6);
893+
List<Cors.Origin> origins = ImmutableList.of(Cors.Origin.of("http://cloud.google.com"));
894+
List<HttpMethod> httpMethods = ImmutableList.of(HttpMethod.GET);
895+
List<String> responseHeaders = ImmutableList.of("Content-Type");
896+
Cors cors =
897+
Cors.newBuilder()
898+
.setOrigins(origins)
899+
.setMethods(httpMethods)
900+
.setResponseHeaders(responseHeaders)
901+
.setMaxAgeSeconds(100)
902+
.build();
903+
BucketInfo bucketInfo = BucketInfo.newBuilder("b").setCors(ImmutableList.of(cors)).build();
904+
Bucket bucket = new Bucket(serviceMockReturnsOptions, new BucketInfo.BuilderImpl(bucketInfo));
905+
assertThat(bucket.getCors()).isNotNull();
906+
assertThat(bucket.getCors().get(0).getMaxAgeSeconds()).isEqualTo(100);
907+
assertThat(bucket.getCors().get(0).getMethods()).isEqualTo(httpMethods);
908+
assertThat(bucket.getCors().get(0).getOrigins()).isEqualTo(origins);
909+
assertThat(bucket.getCors().get(0).getResponseHeaders()).isEqualTo(responseHeaders);
910+
911+
// Remove bucket CORS configuration.
912+
Bucket expectedUpdatedBucket = bucket.toBuilder().setCors(null).build();
913+
expect(storage.getOptions()).andReturn(mockOptions).times(2);
914+
expect(storage.update(expectedUpdatedBucket)).andReturn(expectedUpdatedBucket);
915+
replay(storage);
916+
initializeBucket();
917+
Bucket updatedBucket = new Bucket(storage, new BucketInfo.BuilderImpl(expectedUpdatedBucket));
918+
Bucket actualUpdatedBucket = updatedBucket.update();
919+
assertThat(actualUpdatedBucket.getCors()).isEmpty();
920+
}
889921
}

google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import com.google.cloud.storage.BucketInfo.LifecycleRule.LifecycleAction;
6767
import com.google.cloud.storage.BucketInfo.LifecycleRule.LifecycleCondition;
6868
import com.google.cloud.storage.CopyWriter;
69+
import com.google.cloud.storage.Cors;
6970
import com.google.cloud.storage.HmacKey;
7071
import com.google.cloud.storage.HttpMethod;
7172
import com.google.cloud.storage.PostPolicyV4;
@@ -3474,4 +3475,50 @@ public void testAutoContentTypeCreateFrom() throws IOException {
34743475
public void testAutoContentTypeWriter() throws IOException {
34753476
testAutoContentType("writer");
34763477
}
3478+
3479+
@Test
3480+
public void testRemoveBucketCORS() throws ExecutionException, InterruptedException {
3481+
String bucketName = RemoteStorageHelper.generateBucketName();
3482+
List<Cors.Origin> origins = ImmutableList.of(Cors.Origin.of("http://cloud.google.com"));
3483+
List<HttpMethod> httpMethods = ImmutableList.of(HttpMethod.GET);
3484+
List<String> responseHeaders = ImmutableList.of("Content-Type");
3485+
try {
3486+
Cors cors =
3487+
Cors.newBuilder()
3488+
.setOrigins(origins)
3489+
.setMethods(httpMethods)
3490+
.setResponseHeaders(responseHeaders)
3491+
.setMaxAgeSeconds(100)
3492+
.build();
3493+
storage.create(BucketInfo.newBuilder(bucketName).setCors(ImmutableList.of(cors)).build());
3494+
3495+
// case-1 : Cors are set and field selector is selected then returns not-null.
3496+
Bucket remoteBucket =
3497+
storage.get(bucketName, Storage.BucketGetOption.fields(BucketField.CORS));
3498+
assertThat(remoteBucket.getCors()).isNotNull();
3499+
assertThat(remoteBucket.getCors().get(0).getMaxAgeSeconds()).isEqualTo(100);
3500+
assertThat(remoteBucket.getCors().get(0).getMethods()).isEqualTo(httpMethods);
3501+
assertThat(remoteBucket.getCors().get(0).getOrigins()).isEqualTo(origins);
3502+
assertThat(remoteBucket.getCors().get(0).getResponseHeaders()).isEqualTo(responseHeaders);
3503+
3504+
// case-2 : Cors are set but field selector isn't selected then returns not-null.
3505+
remoteBucket = storage.get(bucketName);
3506+
assertThat(remoteBucket.getCors()).isNotNull();
3507+
3508+
// Remove CORS configuration from the bucket.
3509+
Bucket updatedBucket = remoteBucket.toBuilder().setCors(null).build().update();
3510+
assertThat(updatedBucket.getCors()).isNull();
3511+
3512+
// case-3 : Cors are not set and field selector is selected then returns null.
3513+
updatedBucket = storage.get(bucketName, Storage.BucketGetOption.fields(BucketField.CORS));
3514+
assertThat(updatedBucket.getCors()).isNull();
3515+
3516+
// case-4 : Cors are not set and field selector isn't selected then returns null.
3517+
updatedBucket = storage.get(bucketName);
3518+
assertThat(updatedBucket.getCors()).isNull();
3519+
3520+
} finally {
3521+
RemoteStorageHelper.forceDelete(storage, bucketName, 5, TimeUnit.SECONDS);
3522+
}
3523+
}
34773524
}

0 commit comments

Comments
 (0)