1717package com .google .cloud .storage .it ;
1818
1919import static com .google .common .truth .Truth .assertThat ;
20- import static org .junit .Assert .assertArrayEquals ;
2120import static org .junit .Assert .assertEquals ;
2221import static org .junit .Assert .assertFalse ;
2322import static org .junit .Assert .assertNotEquals ;
4039import com .google .cloud .storage .Rpo ;
4140import com .google .cloud .storage .Storage ;
4241import com .google .cloud .storage .Storage .BlobField ;
42+ import com .google .cloud .storage .Storage .BlobTargetOption ;
4343import com .google .cloud .storage .Storage .BucketField ;
4444import com .google .cloud .storage .Storage .BucketGetOption ;
4545import com .google .cloud .storage .Storage .BucketListOption ;
6262import java .time .OffsetDateTime ;
6363import java .time .temporal .ChronoUnit ;
6464import java .util .ArrayList ;
65- import java .util .Collections ;
6665import java .util .List ;
6766import java .util .Map ;
6867import java .util .Optional ;
6968import java .util .stream .StreamSupport ;
70- import org .junit .Ignore ;
7169import org .junit .Test ;
7270import org .junit .runner .RunWith ;
7371
@@ -321,54 +319,6 @@ private void retentionPolicyLockRequesterPays(boolean requesterPays) {
321319 }
322320 }
323321
324- @ Test
325- // Bug in UpdateMask
326- @ CrossRun .Exclude (transports = Transport .GRPC )
327- @ Ignore ("Make hermetic, currently mutates global bucket" )
328- public void testUpdateBucketLabel () {
329- Bucket remoteBucket =
330- storage .get (
331- bucket .getName (), Storage .BucketGetOption .fields (BucketField .ID , BucketField .BILLING ));
332- assertNull (remoteBucket .getLabels ());
333- remoteBucket = remoteBucket .toBuilder ().setLabels (BUCKET_LABELS ).build ();
334- Bucket updatedBucket = storage .update (remoteBucket );
335- assertEquals (BUCKET_LABELS , updatedBucket .getLabels ());
336- remoteBucket .toBuilder ().setLabels (Collections .emptyMap ()).build ().update ();
337- assertNull (storage .get (bucket .getName ()).getLabels ());
338- }
339-
340- @ Test
341- @ CrossRun .Exclude (transports = Transport .GRPC )
342- @ Ignore ("Make hermetic, currently mutates global bucket" )
343- public void testUpdateBucketRequesterPays () {
344- // Bug in UpdateMask
345- unsetRequesterPays ();
346- Bucket remoteBucket =
347- storage .get (
348- requesterPaysBucket .getName (),
349- Storage .BucketGetOption .fields (BucketField .ID , BucketField .BILLING ));
350- assertTrue (remoteBucket .requesterPays () == null || !remoteBucket .requesterPays ());
351- remoteBucket = remoteBucket .toBuilder ().setRequesterPays (true ).build ();
352- Bucket updatedBucket = storage .update (remoteBucket );
353- assertTrue (updatedBucket .requesterPays ());
354-
355- String projectId = storage .getOptions ().getProjectId ();
356- Bucket .BlobTargetOption option = Bucket .BlobTargetOption .userProject (projectId );
357- String blobName = "test-create-empty-blob-requester-pays" ;
358- Blob remoteBlob = updatedBucket .create (blobName , BLOB_BYTE_CONTENT , option );
359- assertNotNull (remoteBlob );
360- byte [] readBytes =
361- storage .readAllBytes (
362- requesterPaysBucket .getName (),
363- blobName ,
364- Storage .BlobSourceOption .userProject (projectId ));
365- assertArrayEquals (BLOB_BYTE_CONTENT , readBytes );
366- remoteBucket = remoteBucket .toBuilder ().setRequesterPays (false ).build ();
367- updatedBucket = storage .update (remoteBucket , Storage .BucketTargetOption .userProject (projectId ));
368-
369- assertFalse (updatedBucket .requesterPays ());
370- }
371-
372322 @ Test
373323 public void testEnableDisableBucketDefaultEventBasedHold () {
374324 String bucketName = generator .randomBucketName ();
@@ -378,19 +328,30 @@ public void testEnableDisableBucketDefaultEventBasedHold() {
378328 assertTrue (remoteBucket .getDefaultEventBasedHold ());
379329 remoteBucket =
380330 storage .get (
381- bucketName , Storage .BucketGetOption .fields (BucketField .DEFAULT_EVENT_BASED_HOLD ));
331+ bucketName ,
332+ Storage .BucketGetOption .fields (
333+ BucketField .DEFAULT_EVENT_BASED_HOLD , BucketField .METAGENERATION ));
382334 assertTrue (remoteBucket .getDefaultEventBasedHold ());
383335 String blobName = generator .randomObjectName ();
384336 BlobInfo blobInfo = BlobInfo .newBuilder (bucketName , blobName ).build ();
385- Blob remoteBlob = storage .create (blobInfo );
337+ Blob remoteBlob = storage .create (blobInfo , BlobTargetOption . doesNotExist () );
386338 assertTrue (remoteBlob .getEventBasedHold ());
387339 remoteBlob =
388340 storage .get (
389- blobInfo .getBlobId (), Storage .BlobGetOption .fields (BlobField .EVENT_BASED_HOLD ));
341+ blobInfo .getBlobId (),
342+ Storage .BlobGetOption .fields (BlobField .EVENT_BASED_HOLD , BlobField .METAGENERATION ));
390343 assertTrue (remoteBlob .getEventBasedHold ());
391- remoteBlob = remoteBlob .toBuilder ().setEventBasedHold (false ).build ().update ();
344+ remoteBlob =
345+ remoteBlob .toBuilder ()
346+ .setEventBasedHold (false )
347+ .build ()
348+ .update (BlobTargetOption .metagenerationMatch ());
392349 assertFalse (remoteBlob .getEventBasedHold ());
393- remoteBucket = remoteBucket .toBuilder ().setDefaultEventBasedHold (false ).build ().update ();
350+ remoteBucket =
351+ remoteBucket .toBuilder ()
352+ .setDefaultEventBasedHold (false )
353+ .build ()
354+ .update (BucketTargetOption .metagenerationMatch ());
394355 assertFalse (remoteBucket .getDefaultEventBasedHold ());
395356 } finally {
396357 BucketCleaner .doCleanup (bucketName , storage );
@@ -465,7 +426,9 @@ public void testObjectRetention() {
465426 .setRetainUntilTime (now .plusHours (1 ))
466427 .build ())
467428 .build ()
468- .update (Storage .BlobTargetOption .overrideUnlockedRetention (true ));
429+ .update (
430+ Storage .BlobTargetOption .overrideUnlockedRetention (true ),
431+ BlobTargetOption .metagenerationMatch ());
469432
470433 remoteBlob = storage .get (bucketName , "retentionObject" );
471434 assertEquals (
@@ -480,7 +443,9 @@ public void testObjectRetention() {
480443 remoteBlob .toBuilder ()
481444 .setRetention (null )
482445 .build ()
483- .update (Storage .BlobTargetOption .overrideUnlockedRetention (true ));
446+ .update (
447+ Storage .BlobTargetOption .overrideUnlockedRetention (true ),
448+ BlobTargetOption .metagenerationMatch ());
484449
485450 remoteBlob = storage .get (bucketName , "retentionObject" );
486451 assertNull (remoteBlob .getRetention ());
@@ -545,7 +510,7 @@ public void testUpdateBucket_noModification() throws Exception {
545510 storage .get (
546511 bucket .getName (), BucketGetOption .metagenerationMatch (bucket .getMetageneration ()));
547512
548- Bucket gen2 = storage .update (gen1 );
513+ Bucket gen2 = storage .update (gen1 , BucketTargetOption . metagenerationMatch () );
549514 assertThat (gen2 ).isEqualTo (gen1 );
550515 }
551516 }
@@ -606,7 +571,7 @@ public void testSoftDeletePolicy() {
606571 .setRetentionDuration (Duration .ofDays (20 ))
607572 .build ())
608573 .build ()
609- .update ();
574+ .update (BucketTargetOption . metagenerationMatch () );
610575
611576 assertEquals (
612577 Duration .ofDays (20 ),
@@ -688,19 +653,4 @@ public void testListObjectsWithFolders() throws Exception {
688653 BucketCleaner .doCleanup (bucketName , storage );
689654 }
690655 }
691-
692- private void unsetRequesterPays () {
693- Bucket remoteBucket =
694- storage .get (
695- requesterPaysBucket .getName (),
696- Storage .BucketGetOption .fields (BucketField .ID , BucketField .BILLING ),
697- Storage .BucketGetOption .userProject (storage .getOptions ().getProjectId ()));
698- // Disable requester pays in case a test fails to clean up.
699- if (remoteBucket .requesterPays () != null && remoteBucket .requesterPays () == true ) {
700- remoteBucket .toBuilder ()
701- .setRequesterPays (false )
702- .build ()
703- .update (Storage .BucketTargetOption .userProject (storage .getOptions ().getProjectId ()));
704- }
705- }
706656}
0 commit comments