Repository: googleapis/java-storage
Pull request #1048 (2021-09-27 21:52:02)

build: add jdk 17 to java units and dependency builds
This PR was generated using Autosynth. :rainbow:

Synth log will be available here:
https://source.cloud.google.com/results/invocations/9bbd73e8-8bab-4ac3-8765-d8161b05920c/targets

- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)

Source-Link: https://github.com/googleapis/synthtool/commit/a4be3384ccb92364795d981f2863f6986fcee620
Source-Link: https://github.com/googleapis/synthtool/commit/67ab4f9f4272ad13f4b809de47fd0dec05f425ad


Patch:
diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml
index 1a23ea42..2176b054 100644
--- a/.github/blunderbuss.yml
+++ b/.github/blunderbuss.yml
@@ -1,5 +1,5 @@
 # Configuration for the Blunderbuss GitHub app. For more info see
-# https://github.com/googleapis/repo-automation-bots/tree/master/packages/blunderbuss
+# https://github.com/googleapis/repo-automation-bots/tree/main/packages/blunderbuss
 assign_prs_by:
 - labels:
   - samples
diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml
index 583b39c6..85d52c14 100644
--- a/.github/sync-repo-settings.yaml
+++ b/.github/sync-repo-settings.yaml
@@ -2,7 +2,7 @@ rebaseMergeAllowed: false
 squashMergeAllowed: true
 mergeCommitAllowed: false
 branchProtectionRules:
-  - pattern: master
+  - pattern: main
     isAdminEnforced: true
     requiredApprovingReviewCount: 1
     requiresCodeOwnerReviews: true
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 3becb5c0..2425d723 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -1,7 +1,7 @@
 on:
   push:
     branches:
-    - master
+    - main
   pull_request:
 name: ci
 jobs:
@@ -9,14 +9,15 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        java: [8, 11]
+        java: [8, 11, 17]
     steps:
     - uses: actions/checkout@v2
     - uses: stCarolas/setup-maven@v4
       with:
         maven-version: 3.8.1
-    - uses: actions/setup-java@v1
+    - uses: actions/setup-java@v2
       with:
+        distribution: zulu
         java-version: ${{matrix.java}}
     - run: java -version
     - run: .kokoro/build.sh
@@ -29,8 +30,9 @@ jobs:
     - uses: stCarolas/setup-maven@v4
       with:
         maven-version: 3.8.1
-    - uses: actions/setup-java@v1
+    - uses: actions/setup-java@v2
       with:
+        distribution: zulu
         java-version: 8
     - run: java -version
     - run: .kokoro/build.bat
@@ -40,14 +42,15 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        java: [8, 11]
+        java: [8, 11, 17]
     steps:
     - uses: actions/checkout@v2
     - uses: stCarolas/setup-maven@v4
       with:
         maven-version: 3.8.1
-    - uses: actions/setup-java@v1
+    - uses: actions/setup-java@v2
       with:
+        distribution: zulu
         java-version: ${{matrix.java}}
     - run: java -version
     - run: .kokoro/dependencies.sh
@@ -58,8 +61,9 @@ jobs:
     - uses: stCarolas/setup-maven@v4
       with:
         maven-version: 3.8.1
-    - uses: actions/setup-java@v1
+    - uses: actions/setup-java@v2
       with:
+        distribution: zulu
         java-version: 8
     - run: java -version
     - run: .kokoro/build.sh
@@ -72,8 +76,9 @@ jobs:
     - uses: stCarolas/setup-maven@v4
       with:
         maven-version: 3.8.1
-    - uses: actions/setup-java@v1
+    - uses: actions/setup-java@v2
       with:
+        distribution: zulu
         java-version: 8
     - run: java -version
     - run: .kokoro/build.sh
diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh
index 9030ba8f..9a5105d7 100755
--- a/.kokoro/dependencies.sh
+++ b/.kokoro/dependencies.sh
@@ -28,7 +28,28 @@ source ${scriptDir}/common.sh
 java -version
 echo $JOB_TYPE
 
-export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=128m"
+function determineMavenOpts() {
+  local javaVersion=$(
+    # filter down to the version line, then pull out the version between quotes,
+    # then trim the version number down to its minimal number (removing any
+    # update or suffix number).
+    java -version 2>&1 | grep "version" \
+      | sed -E 's/^.*"(.*?)".*$/\1/g' \
+      | sed -E 's/^(1\.[0-9]\.0).*$/\1/g'
+  )
+
+  case $javaVersion in
+    "17")
+      # MaxPermSize is no longer supported as of jdk 17
+      echo -n "-Xmx1024m"
+      ;;
+    *)
+      echo -n "-Xmx1024m -XX:MaxPermSize=128m"
+      ;;
+  esac
+}
+
+export MAVEN_OPTS=$(determineMavenOpts)
 
 # this should run maven enforcer
 retry_with_backoff 3 10 \
diff --git a/README.md b/README.md
index d3ac3993..024add90 100644
--- a/README.md
+++ b/README.md
@@ -149,7 +149,7 @@ Blob blob = storage.create(blobInfo, "a simple blob".getBytes(UTF_8));
 ```
 
 A complete example for creating a blob can be found at
-[CreateBlob.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateBlob.java).
+[CreateBlob.java](https://github.com/googleapis/google-cloud-java/tree/main/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateBlob.java).
 
 At this point, you will be able to see your newly created bucket and blob on the Google Developers Console.
 
@@ -164,7 +164,7 @@ String contentString = new String(content, UTF_8);
 ```
 
 A complete example for accessing blobs can be found at
-[CreateBlob.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateBlob.java).
+[CreateBlob.java](https://github.com/googleapis/google-cloud-java/tree/main/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateBlob.java).
 
 #### Updating data
 Another thing we may want to do is update a blob. The following snippet shows how to update a Storage blob if it exists.
@@ -182,7 +182,7 @@ if (blob != null) {
 ```
 
 The complete source code can be found at
-[UpdateBlob.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/UpdateBlob.java).
+[UpdateBlob.java](https://github.com/googleapis/google-cloud-java/tree/main/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/UpdateBlob.java).
 
 #### Listing buckets and contents of buckets
 Suppose that you've added more buckets and blobs, and now you want to see the names of your buckets and the contents
@@ -205,7 +205,7 @@ for (Bucket bucket : storage.list().iterateAll()) {
 #### Complete source code
 
 In
-[CreateAndListBucketsAndBlobs.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateAndListBucketsAndBlobs.java)
+[CreateAndListBucketsAndBlobs.java](https://github.com/googleapis/google-cloud-java/tree/main/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/CreateAndListBucketsAndBlobs.java)
 we put together examples creating and listing buckets and blobs into one program. The program assumes that you are
 running on Compute Engine or from your own desktop. To run the example on App Engine, simply move
 the code from the main method to your application's servlet class and change the print statements to
@@ -213,21 +213,21 @@ display on your webpage.
 
 ### Example Applications
 
-- [`StorageExample`](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/StorageExample.java) is a simple command line interface that provides some of Cloud Storage's functionality.  Read more about using the application on the [`StorageExample` docs page](https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-examples/README.md).
-- [`Bookshelf`](https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/bookshelf) - An App Engine application that manages a virtual bookshelf.
+- [`StorageExample`](https://github.com/googleapis/google-cloud-java/tree/main/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/StorageExample.java) is a simple command line interface that provides some of Cloud Storage's functionality.  Read more about using the application on the [`StorageExample` docs page](https://github.com/googleapis/google-cloud-java/blob/main/google-cloud-examples/README.md).
+- [`Bookshelf`](https://github.com/GoogleCloudPlatform/getting-started-java/tree/main/bookshelf) - An App Engine application that manages a virtual bookshelf.
   - This app uses `google-cloud` to interface with Cloud Datastore and Cloud Storage. It also uses Cloud SQL, another Google Cloud Platform service.
-- [`Flexible Environment/Storage example`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/cloudstorage) - An app that uploads files to a public Cloud Storage bucket on the App Engine Flexible Environment runtime.
+- [`Flexible Environment/Storage example`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/main/flexible/cloudstorage) - An app that uploads files to a public Cloud Storage bucket on the App Engine Flexible Environment runtime.
 
 
 
 
 ## Samples
 
-Samples are in the [`samples/`](https://github.com/googleapis/java-storage/tree/master/samples) directory.
+Samples are in the [`samples/`](https://github.com/googleapis/java-storage/tree/main/samples) directory.
 
 | Sample                      | Source Code                       | Try it |
 | --------------------------- | --------------------------------- | ------ |
-| Quickstart Sample | [source code](https://github.com/googleapis/java-storage/blob/master/samples/snippets/src/main/java/com/example/storage/QuickstartSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/storage/QuickstartSample.java) |
+| Quickstart Sample | [source code](https://github.com/googleapis/java-storage/blob/main/samples/snippets/src/main/java/com/example/storage/QuickstartSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-storage&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/storage/QuickstartSample.java) |
 
 
 
@@ -336,10 +336,10 @@ Java is a registered trademark of Oracle and/or its affiliates.
 [developer-console]: https://console.developers.google.com/
 [create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects
 [cloud-sdk]: https://cloud.google.com/sdk/
-[troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/master/troubleshooting/readme.md#troubleshooting
-[contributing]: https://github.com/googleapis/java-storage/blob/master/CONTRIBUTING.md
-[code-of-conduct]: https://github.com/googleapis/java-storage/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
-[license]: https://github.com/googleapis/java-storage/blob/master/LICENSE
+[troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/main/troubleshooting/readme.md#troubleshooting
+[contributing]: https://github.com/googleapis/java-storage/blob/main/CONTRIBUTING.md
+[code-of-conduct]: https://github.com/googleapis/java-storage/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct
+[license]: https://github.com/googleapis/java-storage/blob/main/LICENSE
 [enable-billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing
 [enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=storage.googleapis.com
 [libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
index 2bc3df39..83a836f7 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java
@@ -113,13 +113,19 @@ public class BucketInfo implements Serializable {
    */
   public enum PublicAccessPrevention {
     ENFORCED("enforced"),
-    /** Default value for Public Access Prevention */
-    UNSPECIFIED("unspecified"),
+    /**
+     * Default value for Public Access Prevention
+     *
+     * @deprecated use {@link #INHERITED}
+     */
+    @Deprecated
+    UNSPECIFIED("inherited"),
     /**
      * If the api returns a value that isn't defined in {@link PublicAccessPrevention} this value
      * will be returned.
      */
-    UNKNOWN(null);
+    UNKNOWN(null),
+    INHERITED("inherited");
 
     private final String value;
 
@@ -133,10 +139,14 @@ public class BucketInfo implements Serializable {
 
     public static PublicAccessPrevention parse(String value) {
       String upper = value.toUpperCase();
-      try {
-        return valueOf(upper);
-      } catch (IllegalArgumentException ignore) {
-        return UNKNOWN;
+      switch (upper) {
+        case "ENFORCED":
+          return ENFORCED;
+        case "UNSPECIFIED":
+        case "INHERITED":
+          return INHERITED;
+        default:
+          return UNKNOWN;
       }
     }
   }
@@ -300,7 +310,7 @@ public class BucketInfo implements Serializable {
 
       /**
        * Sets the bucket's Public Access Prevention configuration. Currently supported options are
-       * {@link PublicAccessPrevention#UNSPECIFIED} or {@link PublicAccessPrevention#ENFORCED}
+       * {@link PublicAccessPrevention#INHERITED} or {@link PublicAccessPrevention#ENFORCED}
        *
        * @see <a
        *     href="https://cloud.google.com/storage/docs/public-access-prevention">public-access-prevention</a>
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableMedia.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableMedia.java
index d0e212ef..78a0e562 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableMedia.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/ResumableMedia.java
@@ -16,7 +16,6 @@
 
 package com.google.cloud.storage;
 
-import com.google.api.core.ApiFutures;
 import com.google.cloud.ExceptionHandler;
 import com.google.cloud.storage.spi.v1.StorageRpc;
 import java.net.URL;
@@ -42,7 +41,7 @@ final class ResumableMedia {
   static Supplier<String> startUploadForSignedUrl(
       final StorageOptions storageOptions, final URL signedURL, ExceptionHandler exceptionHandler) {
     if (!isValidSignedURL(signedURL.getQuery())) {
-      ApiFutures.immediateFailedFuture(new StorageException(2, "invalid signedURL"));
+      throw new StorageException(2, "invalid signedURL");
     }
     return () ->
         Retrying.run(
diff --git a/pom.xml b/pom.xml
index 3285250c..308367e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,7 +70,7 @@
       <dependency>
         <groupId>com.google.apis</groupId>
         <artifactId>google-api-services-storage</artifactId>
-        <version>v1-rev20210914-1.32.1</version>
+        <version>v1-rev20210918-1.32.1</version>
       </dependency>
       <dependency>
         <groupId>org.easymock</groupId>
diff --git a/synth.metadata b/synth.metadata
index 56fd80e9..40a98002 100644
--- a/synth.metadata
+++ b/synth.metadata
@@ -4,7 +4,7 @@
       "git": {
         "name": ".",
         "remote": "https://github.com/googleapis/java-storage.git",
-        "sha": "d6d95456f1e300ca4a9dc4b1c47940dea7b3a82a"
+        "sha": "2e7f041ef7873ede8c2d1ebb526639d1aff61963"
       }
     },
     {
@@ -19,7 +19,7 @@
       "git": {
         "name": "synthtool",
         "remote": "https://github.com/googleapis/synthtool.git",
-        "sha": "0752ff727a19a467dffed335d5e59303689cf0d1"
+        "sha": "a4be3384ccb92364795d981f2863f6986fcee620"
       }
     }
   ],


Test patch:
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/PostPolicyV4Test.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/PostPolicyV4Test.java
index 8213f609..eed13cd3 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/PostPolicyV4Test.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/PostPolicyV4Test.java
@@ -17,7 +17,6 @@
 package com.google.cloud.storage;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -33,8 +32,7 @@ import org.junit.Test;
 public class PostPolicyV4Test {
   private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
 
-  private void assertNotSameButEqual(Map<String, String> expected, Map<String, String> returned) {
-    assertNotSame(expected, returned);
+  private void assertMapsEquals(Map<String, String> expected, Map<String, String> returned) {
     assertEquals("map sizes", expected.size(), returned.size());
     for (String key : expected.keySet()) {
       assertEquals("value of $" + key, expected.get(key), returned.get(key));
@@ -78,7 +76,7 @@ public class PostPolicyV4Test {
     String url = "http://example.com";
     PostPolicyV4 policy = PostPolicyV4.of(url, ALL_FIELDS);
     assertEquals(url, policy.getUrl());
-    assertNotSameButEqual(ALL_FIELDS, policy.getFields());
+    assertMapsEquals(ALL_FIELDS, policy.getFields());
   }
 
   @Test
@@ -115,7 +113,7 @@ public class PostPolicyV4Test {
   @Test
   public void testPostFieldsV4_of() {
     PostPolicyV4.PostFieldsV4 fields = PostPolicyV4.PostFieldsV4.of(ALL_FIELDS);
-    assertNotSameButEqual(ALL_FIELDS, fields.getFieldsMap());
+    assertMapsEquals(ALL_FIELDS, fields.getFieldsMap());
   }
 
   @Test
@@ -157,7 +155,7 @@ public class PostPolicyV4Test {
     expectedUpdated.put("content-type", "new-content-type");
     expectedUpdated.put("success_action_status", "42");
     Map<String, String> updated = builder.build().getFieldsMap();
-    assertNotSameButEqual(expectedUpdated, updated);
+    assertMapsEquals(expectedUpdated, updated);
   }
 
   @Test
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ResumableMediaTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ResumableMediaTest.java
index 47b165dc..d6fc7d67 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ResumableMediaTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ResumableMediaTest.java
@@ -16,17 +16,24 @@
 
 package com.google.cloud.storage;
 
+import static com.google.common.truth.Truth.assertThat;
 import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.google.cloud.BaseService;
 import com.google.cloud.ExceptionHandler;
+import com.google.cloud.storage.spi.v1.StorageRpc;
 import java.net.URL;
+import java.util.function.Supplier;
 import org.junit.Assert;
 import org.junit.Test;
 
 public final class ResumableMediaTest {
-  private static final String SIGNED_URL =
-      "http://www.test.com/test-bucket/test1.txt?GoogleAccessId=testClient-test@test.com&Expires=1553839761&Signature=MJUBXAZ7";
+  private static final String SIGNED_URL_INVALID =
+      "http://localhost/test-bucket/test1.txt?GoogAccessId=testClient-test@test.com&Expires=1553839761&Signature=MJUBXAZ7";
+  private static final String SIGNED_URL_VALID =
+      "http://localhost/test-bucket/test1.txt?GoogleAccessId=testClient-test@test.com&Expires=1553839761&Signature=MJUBXAZ7";
 
   private final ExceptionHandler createResultExceptionHandler = BaseService.EXCEPTION_HANDLER;
 
@@ -35,7 +42,7 @@ public final class ResumableMediaTest {
     try {
       ResumableMedia.startUploadForSignedUrl(
               StorageOptions.newBuilder().build(),
-              new URL(SIGNED_URL),
+              new URL(SIGNED_URL_INVALID),
               createResultExceptionHandler)
           .get();
       Assert.fail();
@@ -43,4 +50,17 @@ public final class ResumableMediaTest {
       assertNotNull(ex.getMessage());
     }
   }
+
+  @Test
+  public void startUploadForSignedUrl_whenUrlValid() throws Exception {
+    StorageRpc rpc = mock(StorageRpc.class);
+    StorageOptions options = StorageOptions.newBuilder().setServiceRpcFactory(opts -> rpc).build();
+
+    URL url = new URL(SIGNED_URL_VALID);
+    when(rpc.open(url.toString())).thenReturn("upload-id");
+
+    Supplier<String> uploadIdSupplier =
+        ResumableMedia.startUploadForSignedUrl(options, url, createResultExceptionHandler);
+    assertThat(uploadIdSupplier.get()).isEqualTo("upload-id");
+  }
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RpcMethodMappings.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RpcMethodMappings.java
index af756b6a..f2d188a1 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RpcMethodMappings.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RpcMethodMappings.java
@@ -612,6 +612,20 @@ final class RpcMethodMappings {
       private static void setIamPolicy(ArrayList<RpcMethodMapping> a) {
         a.add(
             RpcMethodMapping.newBuilder(18, buckets.setIamPolicy)
+                .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
+                .withTest(
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(
+                                    ctx.getStorage()
+                                        .setIamPolicy(
+                                            state.getBucket().getName(),
+                                            Policy.newBuilder().build()))))
+                .build()); // TODO: configure policy
+        a.add(
+            RpcMethodMapping.newBuilder(240, buckets.setIamPolicy)
+                .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
                     (ctx, c) ->
                         ctx.map(
@@ -619,7 +633,10 @@ final class RpcMethodMappings {
                                 state.with(
                                     ctx.getStorage()
                                         .setIamPolicy(
-                                            c.getBucketName(), Policy.newBuilder().build()))))
+                                            state.getBucket().getName(),
+                                            Policy.newBuilder().build(),
+                                            BucketSourceOption.metagenerationMatch(
+                                                state.getBucket().getMetageneration())))))
                 .build()); // TODO: configure policy
       }
 
@@ -829,6 +846,7 @@ final class RpcMethodMappings {
       private static void update(ArrayList<RpcMethodMapping> a) {
         a.add(
             RpcMethodMapping.newBuilder(29, hmacKey.update)
+                .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
                 .withTest(
                     (ctx, c) ->
                         ctx.map(
@@ -1005,59 +1023,52 @@ final class RpcMethodMappings {
             RpcMethodMapping.newBuilder(36, objects.delete)
                 .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
                 .withTest(
-                    blobIdWithoutGeneration.andThen(
-                        (ctx, c) ->
-                            ctx.map(
-                                state -> state.with(ctx.getStorage().delete(state.getBlobId())))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(ctx.getStorage().delete(state.getBlob().getBlobId()))))
                 .build()); // TODO: Why does this exist, varargs should suffice
         a.add(
             RpcMethodMapping.newBuilder(37, objects.delete)
                 .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
-                    blobIdWithoutGeneration.andThen(
-                        (ctx, c) ->
-                            ctx.map(
-                                state ->
-                                    state.with(
-                                        ctx.getStorage()
-                                            .delete(
-                                                state.getBlobId(),
-                                                BlobSourceOption.metagenerationMatch(1L))))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(
+                                    ctx.getStorage()
+                                        .delete(
+                                            state.getBlob().getBlobId(),
+                                            BlobSourceOption.generationMatch()))))
                 .build()); // TODO: Correct arg?
         a.add(
             RpcMethodMapping.newBuilder(38, objects.delete)
                 .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
-                    blobIdWithoutGeneration.andThen(
-                        (ctx, c) ->
-                            ctx.map(
-                                state ->
-                                    state.with(
-                                        ctx.getStorage()
-                                            .delete(
-                                                state.getBlobId().getBucket(),
-                                                state.getBlobId().getName(),
-                                                BlobSourceOption.metagenerationMatch(1L))))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(
+                                    ctx.getStorage()
+                                        .delete(
+                                            state.getBlob().getBlobId().getBucket(),
+                                            state.getBlob().getBlobId().getName(),
+                                            BlobSourceOption.generationMatch(
+                                                state.getBlob().getGeneration())))))
                 .build()); // TODO: Correct arg?
         a.add(
             RpcMethodMapping.newBuilder(67, objects.delete)
-                .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen((ctx, c) -> ctx.peek(state -> state.getBlob().delete())))
+                .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
+                .withTest((ctx, c) -> ctx.peek(state -> state.getBlob().delete()))
                 .build());
         a.add(
             RpcMethodMapping.newBuilder(68, objects.delete)
+                .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen(
-                            (ctx, c) ->
-                                ctx.peek(
-                                    state ->
-                                        state
-                                            .getBlob()
-                                            .delete(Blob.BlobSourceOption.metagenerationMatch()))))
+                    (ctx, c) ->
+                        ctx.peek(
+                            state ->
+                                state.getBlob().delete(Blob.BlobSourceOption.generationMatch())))
                 .build());
       }
 
@@ -1770,51 +1781,41 @@ final class RpcMethodMappings {
       private static void patch(ArrayList<RpcMethodMapping> a) {
         a.add(
             RpcMethodMapping.newBuilder(56, objects.patch)
+                .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
                 .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen(
-                            (ctx, c) ->
-                                ctx.map(
-                                    state ->
-                                        state.with(
-                                            ctx.getStorage().update(ctx.getState().getBlob())))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state -> state.with(ctx.getStorage().update(ctx.getState().getBlob()))))
                 .build()); // TODO: Why does this exist, varargs should suffice
         a.add(
             RpcMethodMapping.newBuilder(57, objects.patch)
+                .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen(
-                            (ctx, c) ->
-                                ctx.map(
-                                    state ->
-                                        state.with(
-                                            ctx.getStorage()
-                                                .update(
-                                                    ctx.getState().getBlob(),
-                                                    BlobTargetOption.metagenerationMatch())))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(
+                                    ctx.getStorage()
+                                        .update(
+                                            ctx.getState().getBlob(),
+                                            BlobTargetOption.metagenerationMatch()))))
                 .build());
         a.add(
             RpcMethodMapping.newBuilder(79, objects.patch)
-                .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen((ctx, c) -> ctx.peek(state -> state.getBlob().update())))
+                .withApplicable(not(TestRetryConformance::isPreconditionsProvided))
+                .withTest((ctx, c) -> ctx.peek(state -> state.getBlob().update()))
                 .build());
         a.add(
             RpcMethodMapping.newBuilder(80, objects.patch)
+                .withApplicable(TestRetryConformance::isPreconditionsProvided)
                 .withTest(
-                    blobIdWithoutGeneration
-                        .andThen(Rpc.blobWithGeneration)
-                        .andThen(
-                            (ctx, c) ->
-                                ctx.map(
-                                    state ->
-                                        state.with(
-                                            state
-                                                .getBlob()
-                                                .update(BlobTargetOption.generationMatch())))))
+                    (ctx, c) ->
+                        ctx.map(
+                            state ->
+                                state.with(
+                                    state
+                                        .getBlob()
+                                        .update(BlobTargetOption.metagenerationMatch()))))
                 .build()); // TODO: Correct arg?
       }
 
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
index f8f51d38..73ef7e9b 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITStorageTest.java
@@ -3296,7 +3296,7 @@ public class ITStorageTest {
                     .setPublicAccessPrevention(
                         enforced
                             ? BucketInfo.PublicAccessPrevention.ENFORCED
-                            : BucketInfo.PublicAccessPrevention.UNSPECIFIED)
+                            : BucketInfo.PublicAccessPrevention.INHERITED)
                     .build())
             .build());
   }
@@ -3389,7 +3389,7 @@ public class ITStorageTest {
       Bucket bucket = generatePublicAccessPreventionBucket(papBucket, false);
       assertEquals(
           bucket.getIamConfiguration().getPublicAccessPrevention(),
-          BucketInfo.PublicAccessPrevention.UNSPECIFIED);
+          BucketInfo.PublicAccessPrevention.INHERITED);
       assertFalse(bucket.getIamConfiguration().isUniformBucketLevelAccessEnabled());
       assertFalse(bucket.getIamConfiguration().isBucketPolicyOnlyEnabled());
 
diff --git a/google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt b/google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt
index 2b3f8f2b..2dcb832d 100644
--- a/google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt
+++ b/google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt
@@ -2,7 +2,7 @@
 # Each test name present in the file will be expected to pass in a CI environment
 #
 # This list can be regenerated by running the following command in a shell:
-#    mvn test && xq '//testsuite/testcase[not(./error) and not(./failure) and not(./skipped)]/@name' google-cloud-storage/target/failsafe-reports/TEST-com.google.cloud.storage.conformance.retry.ITRetryConformanceTest-sponge_log.xml | tail -n+2 | head -n-1 | sed 's#  <result>test\[##g' | sed 's#\]</result>##g' | sort | tee -a google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt
+#    mvn -Penable-integration-test clean verify && xq '//testsuite/testcase[not(./error) and not(./failure) and not(./skipped)]/@name' google-cloud-storage/target/failsafe-reports/TEST-com.google.cloud.storage.conformance.retry.ITRetryConformanceTest-sponge_log.xml | tail -n+2 | head -n-1 | sed 's#  <result>test\[##g' | sed 's#\]</result>##g' | sort | tee -a google-cloud-storage/src/test/resources/com/google/cloud/storage/conformance/retry/testNamesWhichShouldSucceed.txt
 # where xq is the package from https://github.com/jeffbr13/xq
 
 TestRetryConformance/1-[return-503_return-503]-storage.bucket_acl.get-3
@@ -14,15 +14,16 @@ TestRetryConformance/1-[return-503_return-503]-storage.bucket_acl.list-90
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.delete-11
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.delete-92
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.get-12
+TestRetryConformance/1-[return-503_return-503]-storage.buckets.get-94
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.get-96
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.getIamPolicy-13
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.insert-14
-TestRetryConformance/1-[return-503_return-503]-storage.buckets.lockRetentionPolicy-100
 TestRetryConformance/1-[return-503_return-503]-storage.buckets.testIamPermissions-19
 TestRetryConformance/1-[return-503_return-503]-storage.default_object_acl.get-103
 TestRetryConformance/1-[return-503_return-503]-storage.default_object_acl.get-21
 TestRetryConformance/1-[return-503_return-503]-storage.default_object_acl.list-105
 TestRetryConformance/1-[return-503_return-503]-storage.default_object_acl.list-23
+TestRetryConformance/1-[return-503_return-503]-storage.hmacKey.delete-26
 TestRetryConformance/1-[return-503_return-503]-storage.hmacKey.get-27
 TestRetryConformance/1-[return-503_return-503]-storage.hmacKey.list-28
 TestRetryConformance/1-[return-503_return-503]-storage.object_acl.get-31
@@ -38,6 +39,7 @@ TestRetryConformance/1-[return-503_return-503]-storage.objects.get-42
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-43
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-44
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-45
+TestRetryConformance/1-[return-503_return-503]-storage.objects.get-60
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-69
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-70
 TestRetryConformance/1-[return-503_return-503]-storage.objects.get-71
@@ -57,15 +59,16 @@ TestRetryConformance/1-[return-reset-connection_return-503]-storage.bucket_acl.l
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.delete-11
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.delete-92
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.get-12
+TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.get-94
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.get-96
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.getIamPolicy-13
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.insert-14
-TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.lockRetentionPolicy-100
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.buckets.testIamPermissions-19
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.default_object_acl.get-103
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.default_object_acl.get-21
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.default_object_acl.list-105
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.default_object_acl.list-23
+TestRetryConformance/1-[return-reset-connection_return-503]-storage.hmacKey.delete-26
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.hmacKey.get-27
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.hmacKey.list-28
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.object_acl.get-31
@@ -81,6 +84,7 @@ TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-43
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-44
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-45
+TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-60
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-69
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-70
 TestRetryConformance/1-[return-reset-connection_return-503]-storage.objects.get-71
@@ -100,15 +104,16 @@ TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.delete-11
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.delete-92
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.get-12
+TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.get-94
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.get-96
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.getIamPolicy-13
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.insert-14
-TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.lockRetentionPolicy-100
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.buckets.testIamPermissions-19
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.default_object_acl.get-103
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.default_object_acl.get-21
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.default_object_acl.list-105
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.default_object_acl.list-23
+TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.hmacKey.delete-26
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.hmacKey.get-27
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.hmacKey.list-28
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.object_acl.get-31
@@ -124,6 +129,7 @@ TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-43
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-44
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-45
+TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-60
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-69
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-70
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.get-71
@@ -135,40 +141,31 @@ TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.objects.list-55
 TestRetryConformance/1-[return-reset-connection_return-reset-connection]-storage.serviceaccount.get-59
 TestRetryConformance/2-[return-503_return-503]-storage.buckets.patch-101
-TestRetryConformance/2-[return-503_return-503]-storage.hmacKey.update-29
+TestRetryConformance/2-[return-503_return-503]-storage.buckets.patch-122
 TestRetryConformance/2-[return-503_return-503]-storage.objects.delete-37
 TestRetryConformance/2-[return-503_return-503]-storage.objects.delete-38
-TestRetryConformance/2-[return-503_return-503]-storage.objects.delete-67
 TestRetryConformance/2-[return-503_return-503]-storage.objects.delete-68
 TestRetryConformance/2-[return-503_return-503]-storage.objects.insert-46
 TestRetryConformance/2-[return-503_return-503]-storage.objects.insert-47
-TestRetryConformance/2-[return-503_return-503]-storage.objects.patch-56
 TestRetryConformance/2-[return-503_return-503]-storage.objects.patch-57
-TestRetryConformance/2-[return-503_return-503]-storage.objects.patch-79
 TestRetryConformance/2-[return-503_return-503]-storage.objects.patch-80
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.buckets.patch-101
-TestRetryConformance/2-[return-reset-connection_return-503]-storage.hmacKey.update-29
+TestRetryConformance/2-[return-reset-connection_return-503]-storage.buckets.patch-122
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.delete-37
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.delete-38
-TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.delete-67
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.delete-68
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.insert-46
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.insert-47
-TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.patch-56
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.patch-57
-TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.patch-79
 TestRetryConformance/2-[return-reset-connection_return-503]-storage.objects.patch-80
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.buckets.patch-101
-TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.hmacKey.update-29
+TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.buckets.patch-122
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.delete-37
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.delete-38
-TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.delete-67
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.delete-68
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.insert-46
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.insert-47
-TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.patch-56
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.patch-57
-TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.patch-79
 TestRetryConformance/2-[return-reset-connection_return-reset-connection]-storage.objects.patch-80
 TestRetryConformance/3-[return-503]-storage.objects.insert-110
 TestRetryConformance/3-[return-503]-storage.objects.insert-111
@@ -198,7 +195,6 @@ TestRetryConformance/5-[return-400]-storage.buckets.get-94
 TestRetryConformance/5-[return-400]-storage.buckets.get-96
 TestRetryConformance/5-[return-400]-storage.buckets.getIamPolicy-13
 TestRetryConformance/5-[return-400]-storage.buckets.insert-14
-TestRetryConformance/5-[return-400]-storage.buckets.lockRetentionPolicy-100
 TestRetryConformance/5-[return-400]-storage.buckets.patch-101
 TestRetryConformance/5-[return-400]-storage.buckets.patch-17
 TestRetryConformance/5-[return-400]-storage.buckets.setIamPolicy-18
@@ -213,6 +209,7 @@ TestRetryConformance/5-[return-400]-storage.default_object_acl.list-105
 TestRetryConformance/5-[return-400]-storage.default_object_acl.list-23
 TestRetryConformance/5-[return-400]-storage.default_object_acl.patch-106
 TestRetryConformance/5-[return-400]-storage.default_object_acl.patch-24
+TestRetryConformance/5-[return-400]-storage.hmacKey.create-25
 TestRetryConformance/5-[return-400]-storage.hmacKey.delete-26
 TestRetryConformance/5-[return-400]-storage.hmacKey.get-27
 TestRetryConformance/5-[return-400]-storage.hmacKey.list-28
@@ -230,7 +227,6 @@ TestRetryConformance/5-[return-400]-storage.object_acl.patch-66
 TestRetryConformance/5-[return-400]-storage.objects.compose-35
 TestRetryConformance/5-[return-400]-storage.objects.delete-36
 TestRetryConformance/5-[return-400]-storage.objects.delete-67
-TestRetryConformance/5-[return-400]-storage.objects.delete-68
 TestRetryConformance/5-[return-400]-storage.objects.get-107
 TestRetryConformance/5-[return-400]-storage.objects.get-239
 TestRetryConformance/5-[return-400]-storage.objects.get-39
@@ -238,6 +234,8 @@ TestRetryConformance/5-[return-400]-storage.objects.get-40
 TestRetryConformance/5-[return-400]-storage.objects.get-41
 TestRetryConformance/5-[return-400]-storage.objects.get-42
 TestRetryConformance/5-[return-400]-storage.objects.get-43
+TestRetryConformance/5-[return-400]-storage.objects.get-44
+TestRetryConformance/5-[return-400]-storage.objects.get-45
 TestRetryConformance/5-[return-400]-storage.objects.get-60
 TestRetryConformance/5-[return-400]-storage.objects.get-69
 TestRetryConformance/5-[return-400]-storage.objects.get-70
@@ -259,9 +257,7 @@ TestRetryConformance/5-[return-400]-storage.objects.insert-116
 TestRetryConformance/5-[return-400]-storage.objects.insert-117
 TestRetryConformance/5-[return-400]-storage.objects.list-55
 TestRetryConformance/5-[return-400]-storage.objects.patch-56
-TestRetryConformance/5-[return-400]-storage.objects.patch-57
 TestRetryConformance/5-[return-400]-storage.objects.patch-79
-TestRetryConformance/5-[return-400]-storage.objects.patch-80
 TestRetryConformance/5-[return-400]-storage.objects.rewrite-58
 TestRetryConformance/5-[return-400]-storage.objects.rewrite-81
 TestRetryConformance/5-[return-400]-storage.objects.rewrite-82
@@ -292,7 +288,6 @@ TestRetryConformance/5-[return-401]-storage.buckets.get-94
 TestRetryConformance/5-[return-401]-storage.buckets.get-96
 TestRetryConformance/5-[return-401]-storage.buckets.getIamPolicy-13
 TestRetryConformance/5-[return-401]-storage.buckets.insert-14
-TestRetryConformance/5-[return-401]-storage.buckets.lockRetentionPolicy-100
 TestRetryConformance/5-[return-401]-storage.buckets.patch-101
 TestRetryConformance/5-[return-401]-storage.buckets.patch-17
 TestRetryConformance/5-[return-401]-storage.buckets.setIamPolicy-18
@@ -307,6 +302,7 @@ TestRetryConformance/5-[return-401]-storage.default_object_acl.list-105
 TestRetryConformance/5-[return-401]-storage.default_object_acl.list-23
 TestRetryConformance/5-[return-401]-storage.default_object_acl.patch-106
 TestRetryConformance/5-[return-401]-storage.default_object_acl.patch-24
+TestRetryConformance/5-[return-401]-storage.hmacKey.create-25
 TestRetryConformance/5-[return-401]-storage.hmacKey.delete-26
 TestRetryConformance/5-[return-401]-storage.hmacKey.get-27
 TestRetryConformance/5-[return-401]-storage.hmacKey.list-28
@@ -324,7 +320,6 @@ TestRetryConformance/5-[return-401]-storage.object_acl.patch-66
 TestRetryConformance/5-[return-401]-storage.objects.compose-35
 TestRetryConformance/5-[return-401]-storage.objects.delete-36
 TestRetryConformance/5-[return-401]-storage.objects.delete-67
-TestRetryConformance/5-[return-401]-storage.objects.delete-68
 TestRetryConformance/5-[return-401]-storage.objects.get-107
 TestRetryConformance/5-[return-401]-storage.objects.get-239
 TestRetryConformance/5-[return-401]-storage.objects.get-39
@@ -332,6 +327,8 @@ TestRetryConformance/5-[return-401]-storage.objects.get-40
 TestRetryConformance/5-[return-401]-storage.objects.get-41
 TestRetryConformance/5-[return-401]-storage.objects.get-42
 TestRetryConformance/5-[return-401]-storage.objects.get-43
+TestRetryConformance/5-[return-401]-storage.objects.get-44
+TestRetryConformance/5-[return-401]-storage.objects.get-45
 TestRetryConformance/5-[return-401]-storage.objects.get-60
 TestRetryConformance/5-[return-401]-storage.objects.get-69
 TestRetryConformance/5-[return-401]-storage.objects.get-70
@@ -353,9 +350,7 @@ TestRetryConformance/5-[return-401]-storage.objects.insert-116
 TestRetryConformance/5-[return-401]-storage.objects.insert-117
 TestRetryConformance/5-[return-401]-storage.objects.list-55
 TestRetryConformance/5-[return-401]-storage.objects.patch-56
-TestRetryConformance/5-[return-401]-storage.objects.patch-57
 TestRetryConformance/5-[return-401]-storage.objects.patch-79
-TestRetryConformance/5-[return-401]-storage.objects.patch-80
 TestRetryConformance/5-[return-401]-storage.objects.rewrite-58
 TestRetryConformance/5-[return-401]-storage.objects.rewrite-81
 TestRetryConformance/5-[return-401]-storage.objects.rewrite-82
@@ -364,3 +359,145 @@ TestRetryConformance/5-[return-401]-storage.objects.rewrite-84
 TestRetryConformance/5-[return-401]-storage.objects.rewrite-85
 TestRetryConformance/5-[return-401]-storage.objects.rewrite-86
 TestRetryConformance/5-[return-401]-storage.serviceaccount.get-59
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.get-3
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.get-4
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.get-88
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.list-7
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.list-8
+TestRetryConformance/6-[return-503_return-400]-storage.bucket_acl.list-90
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.delete-11
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.delete-92
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.delete-93
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.get-12
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.get-95
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.get-97
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.getIamPolicy-13
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.lockRetentionPolicy-100
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.patch-101
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.patch-122
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.setIamPolicy-240
+TestRetryConformance/6-[return-503_return-400]-storage.buckets.testIamPermissions-19
+TestRetryConformance/6-[return-503_return-400]-storage.default_object_acl.get-103
+TestRetryConformance/6-[return-503_return-400]-storage.default_object_acl.get-21
+TestRetryConformance/6-[return-503_return-400]-storage.default_object_acl.list-105
+TestRetryConformance/6-[return-503_return-400]-storage.default_object_acl.list-23
+TestRetryConformance/6-[return-503_return-400]-storage.hmacKey.delete-26
+TestRetryConformance/6-[return-503_return-400]-storage.hmacKey.get-27
+TestRetryConformance/6-[return-503_return-400]-storage.hmacKey.list-28
+TestRetryConformance/6-[return-503_return-400]-storage.object_acl.get-31
+TestRetryConformance/6-[return-503_return-400]-storage.object_acl.get-63
+TestRetryConformance/6-[return-503_return-400]-storage.object_acl.list-33
+TestRetryConformance/6-[return-503_return-400]-storage.object_acl.list-65
+TestRetryConformance/6-[return-503_return-400]-storage.objects.compose-35
+TestRetryConformance/6-[return-503_return-400]-storage.objects.delete-37
+TestRetryConformance/6-[return-503_return-400]-storage.objects.delete-38
+TestRetryConformance/6-[return-503_return-400]-storage.objects.delete-68
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-39
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-40
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-41
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-42
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-43
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-44
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-45
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-61
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-69
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-70
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-71
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-72
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-73
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-74
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-75
+TestRetryConformance/6-[return-503_return-400]-storage.objects.get-76
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-118
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-119
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-46
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-47
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-49
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-50
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-51
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-52
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-53
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-77
+TestRetryConformance/6-[return-503_return-400]-storage.objects.insert-78
+TestRetryConformance/6-[return-503_return-400]-storage.objects.list-55
+TestRetryConformance/6-[return-503_return-400]-storage.objects.patch-57
+TestRetryConformance/6-[return-503_return-400]-storage.objects.patch-80
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-58
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-81
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-82
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-83
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-84
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-85
+TestRetryConformance/6-[return-503_return-400]-storage.objects.rewrite-86
+TestRetryConformance/6-[return-503_return-400]-storage.serviceaccount.get-59
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.get-3
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.get-4
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.get-88
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.list-7
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.list-8
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.bucket_acl.list-90
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.delete-11
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.delete-92
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.delete-93
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.get-12
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.get-95
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.get-97
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.getIamPolicy-13
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.lockRetentionPolicy-100
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.patch-101
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.patch-122
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.setIamPolicy-240
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.buckets.testIamPermissions-19
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.default_object_acl.get-103
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.default_object_acl.get-21
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.default_object_acl.list-105
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.default_object_acl.list-23
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.hmacKey.delete-26
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.hmacKey.get-27
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.hmacKey.list-28
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.object_acl.get-31
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.object_acl.get-63
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.object_acl.list-33
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.object_acl.list-65
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.compose-35
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.delete-37
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.delete-38
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.delete-68
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-39
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-40
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-41
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-42
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-43
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-44
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-45
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-61
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-69
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-70
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-71
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-72
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-73
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-74
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-75
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.get-76
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-118
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-119
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-46
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-47
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-49
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-50
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-51
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-52
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-53
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-77
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.insert-78
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.list-55
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.patch-57
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.patch-80
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-58
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-81
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-82
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-83
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-84
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-85
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.objects.rewrite-86
+TestRetryConformance/6-[return-reset-connection_return-401]-storage.serviceaccount.get-59