8000 fix: remove server unimplemented GrpcStorageImpl#{get,list,create,delete,Update}HmacKey by BenWhitehead · Pull Request #2717 · googleapis/java-storage · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -1317,119 +1306,28 @@ public List<Acl> listAcls(BlobId blob) {

@Override
public HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options) {
Opts<HmacKeyTargetOpt> 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<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options) {
Opts<HmacKeyListOpt> 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<HmacKeySourceOpt> 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<HmacKeyTargetOpt> 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<HmacKeyTargetOpt> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4596,7 +4596,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options);

/**
Expand Down Expand Up @@ -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<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options);

/**
Expand All @@ -4648,7 +4648,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options);

/**
Expand All @@ -4668,7 +4668,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
*
* @throws StorageException upon failure
*/
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
@TransportCompatibility({Transport.HTTP})
void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options);

/**
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -852,6 +852,7 @@ static final class HmacKey {
private static void delete(ArrayList<RpcMethodMapping> a) {
a.add(
RpcMethodMapping.newBuilder(26, hmacKey.delete)
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
.withSetup(
defaultSetup.andThen(
(ctx, c) ->
Expand Down Expand Up @@ -881,6 +882,7 @@ private static void delete(ArrayList<RpcMethodMapping> a) {
private static void get(ArrayList<RpcMethodMapping> a) {
a.add(
RpcMethodMapping.newBuilder(27, hmacKey.get)
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
.withTest(
(ctx, c) ->
ctx.map(
Expand All @@ -895,6 +897,7 @@ private static void get(ArrayList<RpcMethodMapping> a) {
private static void list(ArrayList<RpcMethodMapping> 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());
Expand All @@ -903,7 +906,9 @@ private static void list(ArrayList<RpcMethodMapping> a) {
private static void update(ArrayList<RpcMethodMapping> 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(
Expand All @@ -919,6 +924,7 @@ private static void update(ArrayList<RpcMethodMapping> a) {
private static void create(ArrayList<RpcMethodMapping> a) {
a.add(
RpcMethodMapping.newBuilder(25, hmacKey.create)
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
.withSetup(defaultSetup.andThen(serviceAccount))
.withTest(
(ctx, c) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -237,6 +238,10 @@ public String toString() {
return getTestName();
}

public static Predicate<TestRetryConformance> transportIs(Transport transport) {
return trc -> trc.getTransport() == transport;
}

private static Supplier<Path> resolvePathForResource(
String objectName, Method method, List<String> instructionList) {
return () -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,13 @@
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;
import com.google.cloud.storage.Storage.BlobTargetOption;
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;
Expand Down Expand Up @@ -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).isN 5276 otNull();
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<HmacKey> 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<HmacKeyMetadata> expected =
keys.stream().map(HmacKey::getMetadata).collect(ImmutableList.toImmutableList());

Page<HmacKeyMetadata> page = storage.listHmacKeys(ListHmacKeysOption.projectId("proj"));

ImmutableList<HmacKeyMetadata> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

@RunWith(StorageITRunner.class)
@CrossRun(
transports = {Transport.HTTP, Transport.GRPC},
transports = {Transport.HTTP},
backends = {Backend.TEST_BENCH})
public class ITHmacTest {

Expand Down
0