diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java index d76d9ce4ff..21ef5b0d68 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java @@ -61,9 +61,6 @@ import com.google.cloud.storage.UnifiedOpts.BucketSourceOpt; import com.google.cloud.storage.UnifiedOpts.BucketTargetOpt; import com.google.cloud.storage.UnifiedOpts.Fields; -import com.google.cloud.storage.UnifiedOpts.HmacKeyListOpt; -import com.google.cloud.storage.UnifiedOpts.HmacKeySourceOpt; -import com.google.cloud.storage.UnifiedOpts.HmacKeyTargetOpt; import com.google.cloud.storage.UnifiedOpts.Mapper; import com.google.cloud.storage.UnifiedOpts.NamedField; import com.google.cloud.storage.UnifiedOpts.ObjectListOpt; @@ -76,32 +73,25 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Streams; -import com.google.common.io.BaseEncoding; import com.google.common.io.ByteStreams; import com.google.common.util.concurrent.MoreExecutors; import com.google.iam.v1.GetIamPolicyRequest; import com.google.iam.v1.SetIamPolicyRequest; import com.google.iam.v1.TestIamPermissionsRequest; -import com.google.protobuf.ByteString; -import com.google.protobuf.FieldMask; import com.google.storage.v2.BidiWriteObjectRequest; import com.google.storage.v2.BucketAccessControl; import com.google.storage.v2.ComposeObjectRequest; import com.google.storage.v2.ComposeObjectRequest.SourceObject; import com.google.storage.v2.CreateBucketRequest; -import com.google.storage.v2.CreateHmacKeyRequest; import com.google.storage.v2.CreateNotificationConfigRequest; import com.google.storage.v2.DeleteBucketRequest; -import com.google.storage.v2.DeleteHmacKeyRequest; import com.google.storage.v2.DeleteNotificationConfigRequest; import com.google.storage.v2.DeleteObjectRequest; import com.google.storage.v2.GetBucketRequest; -import com.google.storage.v2.GetHmacKeyRequest; import com.google.storage.v2.GetNotificationConfigRequest; import com.google.storage.v2.GetObjectRequest; import com.google.storage.v2.GetServiceAccountRequest; import com.google.storage.v2.ListBucketsRequest; -import com.google.storage.v2.ListHmacKeysRequest; import com.google.storage.v2.ListNotificationConfigsRequest; import com.google.storage.v2.ListNotificationConfigsResponse; import com.google.storage.v2.ListObjectsRequest; @@ -118,7 +108,6 @@ import com.google.storage.v2.StorageClient; import com.google.storage.v2.StorageClient.ListNotificationConfigsPage; import com.google.storage.v2.UpdateBucketRequest; -import com.google.storage.v2.UpdateHmacKeyRequest; import com.google.storage.v2.UpdateObjectRequest; import com.google.storage.v2.WriteObjectRequest; import com.google.storage.v2.WriteObjectResponse; @@ -1317,119 +1306,28 @@ public List listAcls(BlobId blob) { @Override public HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options) { - Opts opts = Opts.unwrap(options).prepend(defaultOpts); - GrpcCallContext grpcCallContext = - opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault()); - CreateHmacKeyRequest request = - defaultProjectId - .createHmacKey() - .andThen(opts.createHmacKeysRequest()) - .apply(CreateHmacKeyRequest.newBuilder()) - .setServiceAccountEmail(serviceAccount.getEmail()) - .build(); - GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext()); - return Retrying.run( - getOptions(), - retryAlgorithmManager.getFor(request), - () -> storageClient.createHmacKeyCallable().call(request, merge), - resp -> { - ByteString secretKeyBytes = resp.getSecretKeyBytes(); - String b64SecretKey = BaseEncoding.base64().encode(secretKeyBytes.toByteArray()); - return HmacKey.newBuilder(b64SecretKey) - .setMetadata(codecs.hmacKeyMetadata().decode(resp.getMetadata())) - .build(); - }); + return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "createHmacKey"); } @Override public Page listHmacKeys(ListHmacKeysOption... options) { - Opts opts = Opts.unwrap(options).prepend(defaultOpts); - GrpcCallContext grpcCallContext = - opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault()); - - ListHmacKeysRequest request = - defaultProjectId - .listHmacKeys() - .andThen(opts.listHmacKeysRequest()) - .apply(ListHmacKeysRequest.newBuilder()) - .build(); - try { - GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext()); - return Retrying.run( - getOptions(), - retryAlgorithmManager.getFor(request), - () -> storageClient.listHmacKeysPagedCallable().call(request, merge), - resp -> - new TransformingPageDecorator<>( - resp.getPage(), - codecs.hmacKeyMetadata(), - getOptions(), - retryAlgorithmManager.getFor(request))); - } catch (Exception e) { - throw StorageException.coalesce(e); - } + return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "listHmacKey"); } @Override public HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options) { - Opts opts = Opts.unwrap(options).prepend(defaultOpts); - GrpcCallContext grpcCallContext = - opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault()); - GetHmacKeyRequest request = - defaultProjectId - .getHmacKey() - .andThen(opts.getHmacKeysRequest()) - .apply(GetHmacKeyRequest.newBuilder()) - .setAccessId(accessId) - .build(); - GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext()); - return Retrying.run( - getOptions(), - retryAlgorithmManager.getFor(request), - () -> storageClient.getHmacKeyCallable().call(request, merge), - codecs.hmacKeyMetadata()); + return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "getHmacKey"); } @Override public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options) { - Opts opts = Opts.unwrap(options).prepend(defaultOpts); - GrpcCallContext grpcCallContext = - opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault()); - DeleteHmacKeyRequest req = - DeleteHmacKeyRequest.newBuilder() - .setAccessId(hmacKeyMetadata.getAccessId()) - .setProject(projectNameCodec.encode(hmacKeyMetadata.getProjectId())) - .build(); - GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext()); - Retrying.run( - getOptions(), - retryAlgorithmManager.getFor(req), - () -> { - storageClient.deleteHmacKeyCallable().call(req, merge); - return null; - }, - Decoder.identity()); + CrossTransportUtils.throwHttpJsonOnly(Storage.class, "deleteHmacKey"); } @Override public HmacKeyMetadata updateHmacKeyState( HmacKeyMetadata hmacKeyMetadata, HmacKeyState state, UpdateHmacKeyOption... options) { - Opts opts = Opts.unwrap(options).prepend(defaultOpts); - GrpcCallContext grpcCallContext = - opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault()); - com.google.storage.v2.HmacKeyMetadata encode = - codecs.hmacKeyMetadata().encode(hmacKeyMetadata).toBuilder().setState(state.name()).build(); - - UpdateHmacKeyRequest.Builder builder = - opts.updateHmacKeysRequest().apply(UpdateHmacKeyRequest.newBuilder()).setHmacKey(encode); - UpdateHmacKeyRequest request = - builder.setUpdateMask(FieldMask.newBuilder().addPaths("state").build()).build(); - GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext()); - return Retrying.run( - getOptions(), - retryAlgorithmManager.getFor(request), - () -> storageClient.updateHmacKeyCallable().call(request, merge), - codecs.hmacKeyMetadata()); + return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "updateHmacKeyState"); } @Override diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java index 70604593d9..ca55582a0c 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java @@ -4596,7 +4596,7 @@ PostPolicyV4 generateSignedPostPolicyV4( * * @throws StorageException upon failure */ - @TransportCompatibility({Transport.HTTP, Transport.GRPC}) + @TransportCompatibility({Transport.HTTP}) HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options); /** @@ -4631,7 +4631,7 @@ PostPolicyV4 generateSignedPostPolicyV4( * @param options the options to apply to this operation * @throws StorageException upon failure */ - @TransportCompatibility({Transport.HTTP, Transport.GRPC}) + @TransportCompatibility({Transport.HTTP}) Page listHmacKeys(ListHmacKeysOption... options); /** @@ -4648,7 +4648,7 @@ PostPolicyV4 generateSignedPostPolicyV4( * * @throws StorageException upon failure */ - @TransportCompatibility({Transport.HTTP, Transport.GRPC}) + @TransportCompatibility({Transport.HTTP}) HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options); /** @@ -4668,7 +4668,7 @@ PostPolicyV4 generateSignedPostPolicyV4( * * @throws StorageException upon failure */ - @TransportCompatibility({Transport.HTTP, Transport.GRPC}) + @TransportCompatibility({Transport.HTTP}) void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options); /** @@ -4685,7 +4685,7 @@ PostPolicyV4 generateSignedPostPolicyV4( * * @throws StorageException upon failure */ - @TransportCompatibility({Transport.HTTP, Transport.GRPC}) + @TransportCompatibility({Transport.HTTP}) HmacKeyMetadata updateHmacKeyState( final HmacKeyMetadata hmacKeyMetadata, final HmacKey.HmacKeyState state, 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 a60b1bb984..2288563e06 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 @@ -852,6 +852,7 @@ static final class HmacKey { private static void delete(ArrayList a) { a.add( RpcMethodMapping.newBuilder(26, hmacKey.delete) + .withApplicable(TestRetryConformance.transportIs(Transport.HTTP)) .withSetup( defaultSetup.andThen( (ctx, c) -> @@ -881,6 +882,7 @@ private static void delete(ArrayList a) { private static void get(ArrayList a) { a.add( RpcMethodMapping.newBuilder(27, hmacKey.get) + .withApplicable(TestRetryConformance.transportIs(Transport.HTTP)) .withTest( (ctx, c) -> ctx.map( @@ -895,6 +897,7 @@ private static void get(ArrayList a) { private static void list(ArrayList a) { a.add( RpcMethodMapping.newBuilder(28, hmacKey.list) + .withApplicable(TestRetryConformance.transportIs(Transport.HTTP)) .withTest( (ctx, c) -> ctx.map(state -> state.consume(ctx.getStorage().listHmacKeys()))) .build()); @@ -903,7 +906,9 @@ private static void list(ArrayList a) { private static void update(ArrayList a) { a.add( RpcMethodMapping.newBuilder(29, hmacKey.update) - .withApplicable(not(TestRetryConformance::isPreconditionsProvided)) + .withApplicable( + not(TestRetryConformance::isPreconditionsProvided) + .and(TestRetryConformance.transportIs(Transport.HTTP))) .withTest( (ctx, c) -> ctx.map( @@ -919,6 +924,7 @@ private static void update(ArrayList a) { private static void create(ArrayList a) { a.add( RpcMethodMapping.newBuilder(25, hmacKey.create) + .withApplicable(TestRetryConformance.transportIs(Transport.HTTP)) .withSetup(defaultSetup.andThen(serviceAccount)) .withTest( (ctx, c) -> diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/TestRetryConformance.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/TestRetryConformance.java index 4f1afd83e5..eb602c796c 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/TestRetryConformance.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/TestRetryConformance.java @@ -42,6 +42,7 @@ import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -237,6 +238,10 @@ public String toString() { return getTestName(); } + public static Predicate transportIs(Transport transport) { + return trc -> trc.getTransport() == transport; + } + private static Supplier resolvePathForResource( String objectName, Method method, List instructionList) { return () -> { diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcTest.java index 3ac87cad0f..9c292e885e 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITGrpcTest.java @@ -26,10 +26,6 @@ import com.google.cloud.storage.Bucket; import com.google.cloud.storage.BucketInfo; import com.google.cloud.storage.CopyWriter; -import com.google.cloud.storage.HmacKey; -import com.google.cloud.storage.HmacKey.HmacKeyMetadata; -import com.google.cloud.storage.HmacKey.HmacKeyState; -import com.google.cloud.storage.ServiceAccount; import com.google.cloud.storage.Storage; import com.google.cloud.storage.Storage.BlobListOption; import com.google.cloud.storage.Storage.BlobSourceOption; @@ -37,8 +33,6 @@ import com.google.cloud.storage.Storage.BlobWriteOption; import com.google.cloud.storage.Storage.BucketTargetOption; import com.google.cloud.storage.Storage.CopyRequest; -import com.google.cloud.storage.Storage.CreateHmacKeyOption; -import com.google.cloud.storage.Storage.ListHmacKeysOption; import com.google.cloud.storage.StorageOptions; import com.google.cloud.storage.TransportCompatibility.Transport; import com.google.cloud.storage.it.runner.StorageITRunner; @@ -110,61 +104,6 @@ public void listBuckets() { assertThat(bucketNames).contains(bucketInfo.getName()); } - @Test - public void createHmacKey() { - ServiceAccount serviceAccount = ServiceAccount.of("x@y.z"); - HmacKey hmacKey = storage.createHmacKey(serviceAccount); - assertThat(hmacKey).isNotNull(); - assertThat(hmacKey.getSecretKey()).isNotNull(); - assertThat(hmacKey.getMetadata().getServiceAccount()).isEqualTo(serviceAccount); - } - - @Test - public void getHmacKey() { - ServiceAccount serviceAccount = ServiceAccount.of("x@y.z"); - HmacKey hmacKey = storage.createHmacKey(serviceAccount); - HmacKeyMetadata actual = storage.getHmacKey(hmacKey.getMetadata().getAccessId()); - assertThat(actual).isEqualTo(hmacKey.getMetadata()); - } - - @Test - public void listHmacKeys() { - ImmutableList keys = - IntStream.rangeClosed(1, 4) - .mapToObj(i -> ServiceAccount.of(String.format("x-%d@y.z", i))) - .map(sa -> storage.createHmacKey(sa, CreateHmacKeyOption.projectId("proj"))) - .collect(ImmutableList.toImmutableList()); - - ImmutableList expected = - keys.stream().map(HmacKey::getMetadata).collect(ImmutableList.toImmutableList()); - - Page page = storage.listHmacKeys(ListHmacKeysOption.projectId("proj")); - - ImmutableList actual = - StreamSupport.stream(page.iterateAll().spliterator(), false) - .collect(ImmutableList.toImmutableList()); - - assertThat(actual).containsAtLeastElementsIn(expected); - } - - @Test - public void updateHmacKey() { - ServiceAccount serviceAccount = ServiceAccount.of("x@y.z"); - HmacKey hmacKey = storage.createHmacKey(serviceAccount); - HmacKeyMetadata updated = - storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE); - assertThat(updated.getServiceAccount()).isEqualTo(serviceAccount); - assertThat(updated.getState()).isEqualTo(HmacKeyState.INACTIVE); - } - - @Test - public void deleteHmacKey() { - ServiceAccount serviceAccount = ServiceAccount.of("x@y.z"); - HmacKey hmacKey = storage.createHmacKey(serviceAccount); - storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE); - storage.deleteHmacKey(hmacKey.getMetadata()); - } - @Test public void object_writeGetRead() { Storage s = storage; diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITHmacTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITHmacTest.java index b1907b66de..36239edc5a 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITHmacTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITHmacTest.java @@ -40,7 +40,7 @@ @RunWith(StorageITRunner.class) @CrossRun( - transports = {Transport.HTTP, Transport.GRPC}, + transports = {Transport.HTTP}, backends = {Backend.TEST_BENCH}) public class ITHmacTest {