Skip to content

Commit 2698d43

Browse files
authored
test: add preconditions to several tests so they can be retried (googleapis#3326)
1 parent 64e2b2e commit 2698d43

File tree

3 files changed

+125
-266
lines changed

3 files changed

+125
-266
lines changed

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,12 +385,18 @@ public void testEnableAndDisableUniformBucketLevelAccessOnExistingBucket() throw
385385
BucketTargetOption.metagenerationMatch());
386386

387387
Bucket remoteBucket =
388-
storage.get(bpoBucket, Storage.BucketGetOption.fields(BucketField.IAMCONFIGURATION));
388+
storage.get(
389+
bpoBucket,
390+
Storage.BucketGetOption.fields(
391+
BucketField.IAMCONFIGURATION, BucketField.METAGENERATION));
389392

390393
assertTrue(remoteBucket.getIamConfiguration().isUniformBucketLevelAccessEnabled());
391394
assertNotNull(remoteBucket.getIamConfiguration().getUniformBucketLevelAccessLockedTime());
392395

393-
remoteBucket.toBuilder().setIamConfiguration(ublaDisabledIamConfiguration).build().update();
396+
remoteBucket.toBuilder()
397+
.setIamConfiguration(ublaDisabledIamConfiguration)
398+
.build()
399+
.update(BucketTargetOption.metagenerationMatch());
394400

395401
remoteBucket =
396402
storage.get(
@@ -600,7 +606,10 @@ public void testRetentionPolicyNoLock() throws Exception {
600606
assertThat(remoteBucket.retentionPolicyIsLocked()).isAnyOf(null, false);
601607

602608
Bucket remoteBucket2 =
603-
storage.get(bucketName, Storage.BucketGetOption.fields(BucketField.RETENTION_POLICY));
609+
storage.get(
610+
bucketName,
611+
Storage.BucketGetOption.fields(
612+
BucketField.RETENTION_POLICY, BucketField.METAGENERATION));
604613
assertEquals(RETENTION_PERIOD, remoteBucket2.getRetentionPeriod());
605614
assertThat(remoteBucket2.getRetentionPeriodDuration()).isEqualTo(RETENTION_PERIOD_DURATION);
606615
assertNotNull(remoteBucket2.getRetentionEffectiveTime());
@@ -611,7 +620,11 @@ public void testRetentionPolicyNoLock() throws Exception {
611620
Blob remoteBlob = storage.create(blobInfo);
612621
assertNotNull(remoteBlob.getRetentionExpirationTime());
613622

614-
Bucket remoteBucket3 = remoteBucket2.toBuilder().setRetentionPeriod(null).build().update();
623+
Bucket remoteBucket3 =
624+
remoteBucket2.toBuilder()
625+
.setRetentionPeriod(null)
626+
.build()
627+
.update(BucketTargetOption.metagenerationMatch());
615628
assertNull(remoteBucket3.getRetentionPeriod());
616629
}
617630
}
@@ -653,7 +666,7 @@ public void testEnableAndDisableBucketPolicyOnlyOnExistingBucket() throws Except
653666
.setIamConfiguration(
654667
bpoEnabledIamConfiguration.toBuilder().setIsBucketPolicyOnlyEnabled(false).build())
655668
.build()
656-
.update();
669+
.update(BucketTargetOption.metagenerationMatch());
657670

658671
remoteBucket =
659672
storage.get(

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

Lines changed: 25 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.google.cloud.storage.it;
1818

1919
import static com.google.common.truth.Truth.assertThat;
20-
import static org.junit.Assert.assertArrayEquals;
2120
import static org.junit.Assert.assertEquals;
2221
import static org.junit.Assert.assertFalse;
2322
import static org.junit.Assert.assertNotEquals;
@@ -40,6 +39,7 @@
4039
import com.google.cloud.storage.Rpo;
4140
import com.google.cloud.storage.Storage;
4241
import com.google.cloud.storage.Storage.BlobField;
42+
import com.google.cloud.storage.Storage.BlobTargetOption;
4343
import com.google.cloud.storage.Storage.BucketField;
4444
import com.google.cloud.storage.Storage.BucketGetOption;
4545
import com.google.cloud.storage.Storage.BucketListOption;
@@ -62,12 +62,10 @@
6262
import java.time.OffsetDateTime;
6363
import java.time.temporal.ChronoUnit;
6464
import java.util.ArrayList;
65-
import java.util.Collections;
6665
import java.util.List;
6766
import java.util.Map;
6867
import java.util.Optional;
6968
import java.util.stream.StreamSupport;
70-
import org.junit.Ignore;
7169
import org.junit.Test;
7270
import 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

Comments
 (0)