Skip to content

Commit 06f7292

Browse files
authored
fix: remove server unimplemented GrpcStorageImpl#{get,list,create,delete,Update}HmacKey (#2717)
Partial revert of 84e4adf
1 parent 9de9a92 commit 06f7292

File tree

6 files changed

+23
-175
lines changed

6 files changed

+23
-175
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java

Lines changed: 5 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,6 @@
6161
import com.google.cloud.storage.UnifiedOpts.BucketSourceOpt;
6262
import com.google.cloud.storage.UnifiedOpts.BucketTargetOpt;
6363
import com.google.cloud.storage.UnifiedOpts.Fields;
64-
import com.google.cloud.storage.UnifiedOpts.HmacKeyListOpt;
65-
import com.google.cloud.storage.UnifiedOpts.HmacKeySourceOpt;
66-
import com.google.cloud.storage.UnifiedOpts.HmacKeyTargetOpt;
6764
import com.google.cloud.storage.UnifiedOpts.Mapper;
6865
import com.google.cloud.storage.UnifiedOpts.NamedField;
6966
import com.google.cloud.storage.UnifiedOpts.ObjectListOpt;
@@ -76,32 +73,25 @@
7673
import com.google.common.collect.ImmutableList;
7774
import com.google.common.collect.ImmutableSet;
7875
import com.google.common.collect.Streams;
79-
import com.google.common.io.BaseEncoding;
8076
import com.google.common.io.ByteStreams;
8177
import com.google.common.util.concurrent.MoreExecutors;
8278
import com.google.iam.v1.GetIamPolicyRequest;
8379
import com.google.iam.v1.SetIamPolicyRequest;
8480
import com.google.iam.v1.TestIamPermissionsRequest;
85-
import com.google.protobuf.ByteString;
86-
import com.google.protobuf.FieldMask;
8781
import com.google.storage.v2.BidiWriteObjectRequest;
8882
import com.google.storage.v2.BucketAccessControl;
8983
import com.google.storage.v2.ComposeObjectRequest;
9084
import com.google.storage.v2.ComposeObjectRequest.SourceObject;
9185
import com.google.storage.v2.CreateBucketRequest;
92-
import com.google.storage.v2.CreateHmacKeyRequest;
9386
import com.google.storage.v2.CreateNotificationConfigRequest;
9487
import com.google.storage.v2.DeleteBucketRequest;
95-
import com.google.storage.v2.DeleteHmacKeyRequest;
9688
import com.google.storage.v2.DeleteNotificationConfigRequest;
9789
import com.google.storage.v2.DeleteObjectRequest;
9890
import com.google.storage.v2.GetBucketRequest;
99-
import com.google.storage.v2.GetHmacKeyRequest;
10091
import com.google.storage.v2.GetNotificationConfigRequest;
10192
import com.google.storage.v2.GetObjectRequest;
10293
import com.google.storage.v2.GetServiceAccountRequest;
10394
import com.google.storage.v2.ListBucketsRequest;
104-
import com.google.storage.v2.ListHmacKeysRequest;
10595
import com.google.storage.v2.ListNotificationConfigsRequest;
10696
import com.google.storage.v2.ListNotificationConfigsResponse;
10797
import com.google.storage.v2.ListObjectsRequest;
@@ -118,7 +108,6 @@
118108
import com.google.storage.v2.StorageClient;
119109
import com.google.storage.v2.StorageClient.ListNotificationConfigsPage;
120110
import com.google.storage.v2.UpdateBucketRequest;
121-
import com.google.storage.v2.UpdateHmacKeyRequest;
122111
import com.google.storage.v2.UpdateObjectRequest;
123112
import com.google.storage.v2.WriteObjectRequest;
124113
import com.google.storage.v2.WriteObjectResponse;
@@ -1317,119 +1306,28 @@ public List<Acl> listAcls(BlobId blob) {
13171306

13181307
@Override
13191308
public HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options) {
1320-
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
1321-
GrpcCallContext grpcCallContext =
1322-
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
1323-
CreateHmacKeyRequest request =
1324-
defaultProjectId
1325-
.createHmacKey()
1326-
.andThen(opts.createHmacKeysRequest())
1327-
.apply(CreateHmacKeyRequest.newBuilder())
1328-
.setServiceAccountEmail(serviceAccount.getEmail())
1329-
.build();
1330-
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
1331-
return Retrying.run(
1332-
getOptions(),
1333-
retryAlgorithmManager.getFor(request),
1334-
() -> storageClient.createHmacKeyCallable().call(request, merge),
1335-
resp -> {
1336-
ByteString secretKeyBytes = resp.getSecretKeyBytes();
1337-
String b64SecretKey = BaseEncoding.base64().encode(secretKeyBytes.toByteArray());
1338-
return HmacKey.newBuilder(b64SecretKey)
1339-
.setMetadata(codecs.hmacKeyMetadata().decode(resp.getMetadata()))
1340-
.build();
1341-
});
1309+
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "createHmacKey");
13421310
}
13431311

13441312
@Override
13451313
public Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options) {
1346-
Opts<HmacKeyListOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
1347-
GrpcCallContext grpcCallContext =
1348-
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
1349-
1350-
ListHmacKeysRequest request =
1351-
defaultProjectId
1352-
.listHmacKeys()
1353-
.andThen(opts.listHmacKeysRequest())
1354-
.apply(ListHmacKeysRequest.newBuilder())
1355-
.build();
1356-
try {
1357-
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
1358-
return Retrying.run(
1359-
getOptions(),
1360-
retryAlgorithmManager.getFor(request),
1361-
() -> storageClient.listHmacKeysPagedCallable().call(request, merge),
1362-
resp ->
1363-
new TransformingPageDecorator<>(
1364-
resp.getPage(),
1365-
codecs.hmacKeyMetadata(),
1366-
getOptions(),
1367-
retryAlgorithmManager.getFor(request)));
1368-
} catch (Exception e) {
1369-
throw StorageException.coalesce(e);
1370-
}
1314+
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "listHmacKey");
13711315
}
13721316

13731317
@Override
13741318
public HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options) {
1375-
Opts<HmacKeySourceOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
1376-
GrpcCallContext grpcCallContext =
1377-
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
1378-
GetHmacKeyRequest request =
1379-
defaultProjectId
1380-
.getHmacKey()
1381-
.andThen(opts.getHmacKeysRequest())
1382-
.apply(GetHmacKeyRequest.newBuilder())
1383-
.setAccessId(accessId)
1384-
.build();
1385-
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
1386-
return Retrying.run(
1387-
getOptions(),
1388-
retryAlgorithmManager.getFor(request),
1389-
() -> storageClient.getHmacKeyCallable().call(request, merge),
1390-
codecs.hmacKeyMetadata());
1319+
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "getHmacKey");
13911320
}
13921321

13931322
@Override
13941323
public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options) {
1395-
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
1396-
GrpcCallContext grpcCallContext =
1397-
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
1398-
DeleteHmacKeyRequest req =
1399-
DeleteHmacKeyRequest.newBuilder()
1400-
.setAccessId(hmacKeyMetadata.getAccessId())
1401-
.setProject(projectNameCodec.encode(hmacKeyMetadata.getProjectId()))
1402-
.build();
1403-
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
1404-
Retrying.run(
1405-
getOptions(),
1406-
retryAlgorithmManager.getFor(req),
1407-
() -> {
1408-
storageClient.deleteHmacKeyCallable().call(req, merge);
1409-
return null;
1410-
},
1411-
Decoder.identity());
1324+
CrossTransportUtils.throwHttpJsonOnly(Storage.class, "deleteHmacKey");
14121325
}
14131326

14141327
@Override
14151328
public HmacKeyMetadata updateHmacKeyState(
14161329
HmacKeyMetadata hmacKeyMetadata, HmacKeyState state, UpdateHmacKeyOption... options) {
1417-
Opts<HmacKeyTargetOpt> opts = Opts.unwrap(options).prepend(defaultOpts);
1418-
GrpcCallContext grpcCallContext =
1419-
opts.grpcMetadataMapper().apply(GrpcCallContext.createDefault());
1420-
com.google.storage.v2.HmacKeyMetadata encode =
1421-
codecs.hmacKeyMetadata().encode(hmacKeyMetadata).toBuilder().setState(state.name()).build();
1422-
1423-
UpdateHmacKeyRequest.Builder builder =
1424-
opts.updateHmacKeysRequest().apply(UpdateHmacKeyRequest.newBuilder()).setHmacKey(encode);
1425-
UpdateHmacKeyRequest request =
1426-
builder.setUpdateMask(FieldMask.newBuilder().addPaths("state").build()).build();
1427-
GrpcCallContext merge = Utils.merge(grpcCallContext, Retrying.newCallContext());
1428-
return Retrying.run(
1429-
getOptions(),
1430-
retryAlgorithmManager.getFor(request),
1431-
() -> storageClient.updateHmacKeyCallable().call(request, merge),
1432-
codecs.hmacKeyMetadata());
1330+
return CrossTransportUtils.throwHttpJsonOnly(Storage.class, "updateHmacKeyState");
14331331
}
14341332

14351333
@Override

google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4596,7 +4596,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
45964596
*
45974597
* @throws StorageException upon failure
45984598
*/
4599-
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
4599+
@TransportCompatibility({Transport.HTTP})
46004600
HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption... options);
46014601

46024602
/**
@@ -4631,7 +4631,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
46314631
* @param options the options to apply to this operation
46324632
* @throws StorageException upon failure
46334633
*/
4634-
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
4634+
@TransportCompatibility({Transport.HTTP})
46354635
Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options);
46364636

46374637
/**
@@ -4648,7 +4648,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
46484648
*
46494649
* @throws StorageException upon failure
46504650
*/
4651-
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
4651+
@TransportCompatibility({Transport.HTTP})
46524652
HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options);
46534653

46544654
/**
@@ -4668,7 +4668,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
46684668
*
46694669
* @throws StorageException upon failure
46704670
*/
4671-
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
4671+
@TransportCompatibility({Transport.HTTP})
46724672
void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption... options);
46734673

46744674
/**
@@ -4685,7 +4685,7 @@ PostPolicyV4 generateSignedPostPolicyV4(
46854685
*
46864686
* @throws StorageException upon failure
46874687
*/
4688-
@TransportCompatibility({Transport.HTTP, Transport.GRPC})
4688+
@TransportCompatibility({Transport.HTTP})
46894689
HmacKeyMetadata updateHmacKeyState(
46904690
final HmacKeyMetadata hmacKeyMetadata,
46914691
final HmacKey.HmacKeyState state,

google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/RpcMethodMappings.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,7 @@ static final class HmacKey {
852852
private static void delete(ArrayList<RpcMethodMapping> a) {
853853
a.add(
854854
RpcMethodMapping.newBuilder(26, hmacKey.delete)
855+
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
855856
.withSetup(
856857
defaultSetup.andThen(
857858
(ctx, c) ->
@@ -881,6 +882,7 @@ private static void delete(ArrayList<RpcMethodMapping> a) {
881882
private static void get(ArrayList<RpcMethodMapping> a) {
882883
a.add(
883884
RpcMethodMapping.newBuilder(27, hmacKey.get)
885+
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
884886
.withTest(
885887
(ctx, c) ->
886888
ctx.map(
@@ -895,6 +897,7 @@ private static void get(ArrayList<RpcMethodMapping> a) {
895897
private static void list(ArrayList<RpcMethodMapping> a) {
896898
a.add(
897899
RpcMethodMapping.newBuilder(28, hmacKey.list)
900+
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
898901
.withTest(
899902
(ctx, c) -> ctx.map(state -> state.consume(ctx.getStorage().listHmacKeys())))
900903
.build());
@@ -903,7 +906,9 @@ private static void list(ArrayList<RpcMethodMapping> a) {
903906
private static void update(ArrayList<RpcMethodMapping> a) {
904907
a.add(
905908
RpcMethodMapping.newBuilder(29, hmacKey.update)
906-
.withApplicable(not(TestRetryConformance::isPreconditionsProvided))
909+
.withApplicable(
910+
not(TestRetryConformance::isPreconditionsProvided)
911+
.and(TestRetryConformance.transportIs(Transport.HTTP)))
907912
.withTest(
908913
(ctx, c) ->
909914
ctx.map(
@@ -919,6 +924,7 @@ private static void update(ArrayList<RpcMethodMapping> a) {
919924
private static void create(ArrayList<RpcMethodMapping> a) {
920925
a.add(
921926
RpcMethodMapping.newBuilder(25, hmacKey.create)
927+
.withApplicable(TestRetryConformance.transportIs(Transport.HTTP))
922928
.withSetup(defaultSetup.andThen(serviceAccount))
923929
.withTest(
924930
(ctx, c) ->

google-cloud-storage/src/test/java/com/google/cloud/storage/conformance/retry/TestRetryConformance.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.time.ZoneOffset;
4343
import java.time.format.DateTimeFormatter;
4444
import java.util.List;
45+
import java.util.function.Predicate;
4546
import java.util.function.Supplier;
4647
import java.util.stream.Collectors;
4748

@@ -237,6 +238,10 @@ public String toString() {
237238
return getTestName();
238239
}
239240

241+
public static Predicate<TestRetryConformance> transportIs(Transport transport) {
242+
return trc -> trc.getTransport() == transport;
243+
}
244+
240245
private static Supplier<Path> resolvePathForResource(
241246
String objectName, Method method, List<String> instructionList) {
242247
return () -> {

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

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,13 @@
2626
import com.google.cloud.storage.Bucket;
2727
import com.google.cloud.storage.BucketInfo;
2828
import com.google.cloud.storage.CopyWriter;
29-
import com.google.cloud.storage.HmacKey;
30-
import com.google.cloud.storage.HmacKey.HmacKeyMetadata;
31-
import com.google.cloud.storage.HmacKey.HmacKeyState;
32-
import com.google.cloud.storage.ServiceAccount;
3329
import com.google.cloud.storage.Storage;
3430
import com.google.cloud.storage.Storage.BlobListOption;
3531
import com.google.cloud.storage.Storage.BlobSourceOption;
3632
import com.google.cloud.storage.Storage.BlobTargetOption;
3733
import com.google.cloud.storage.Storage.BlobWriteOption;
3834
import com.google.cloud.storage.Storage.BucketTargetOption;
3935
import com.google.cloud.storage.Storage.CopyRequest;
40-
import com.google.cloud.storage.Storage.CreateHmacKeyOption;
41-
import com.google.cloud.storage.Storage.ListHmacKeysOption;
4236
import com.google.cloud.storage.StorageOptions;
4337
import com.google.cloud.storage.TransportCompatibility.Transport;
4438
import com.google.cloud.storage.it.runner.StorageITRunner;
@@ -110,61 +104,6 @@ public void listBuckets() {
110104
assertThat(bucketNames).contains(bucketInfo.getName());
111105
}
112106

113-
@Test
114-
public void createHmacKey() {
115-
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
116-
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
117-
assertThat(hmacKey).isNotNull();
118-
assertThat(hmacKey.getSecretKey()).isNotNull();
119-
assertThat(hmacKey.getMetadata().getServiceAccount()).isEqualTo(serviceAccount);
120-
}
121-
122-
@Test
123-
public void getHmacKey() {
124-
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
125-
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
126-
HmacKeyMetadata actual = storage.getHmacKey(hmacKey.getMetadata().getAccessId());
127-
assertThat(actual).isEqualTo(hmacKey.getMetadata());
128-
}
129-
130-
@Test
131-
public void listHmacKeys() {
132-
ImmutableList<HmacKey> keys =
133-
IntStream.rangeClosed(1, 4)
134-
.mapToObj(i -> ServiceAccount.of(String.format("x-%[email protected]", i)))
135-
.map(sa -> storage.createHmacKey(sa, CreateHmacKeyOption.projectId("proj")))
136-
.collect(ImmutableList.toImmutableList());
137-
138-
ImmutableList<HmacKeyMetadata> expected =
139-
keys.stream().map(HmacKey::getMetadata).collect(ImmutableList.toImmutableList());
140-
141-
Page<HmacKeyMetadata> page = storage.listHmacKeys(ListHmacKeysOption.projectId("proj"));
142-
143-
ImmutableList<HmacKeyMetadata> actual =
144-
StreamSupport.stream(page.iterateAll().spliterator(), false)
145-
.collect(ImmutableList.toImmutableList());
146-
147-
assertThat(actual).containsAtLeastElementsIn(expected);
148-
}
149-
150-
@Test
151-
public void updateHmacKey() {
152-
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
153-
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
154-
HmacKeyMetadata updated =
155-
storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE);
156-
assertThat(updated.getServiceAccount()).isEqualTo(serviceAccount);
157-
assertThat(updated.getState()).isEqualTo(HmacKeyState.INACTIVE);
158-
}
159-
160-
@Test
161-
public void deleteHmacKey() {
162-
ServiceAccount serviceAccount = ServiceAccount.of("[email protected]");
163-
HmacKey hmacKey = storage.createHmacKey(serviceAccount);
164-
storage.updateHmacKeyState(hmacKey.getMetadata(), HmacKeyState.INACTIVE);
165-
storage.deleteHmacKey(hmacKey.getMetadata());
166-
}
167-
168107
@Test
169108
public void object_writeGetRead() {
170109
Storage s = storage;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
@RunWith(StorageITRunner.class)
4242
@CrossRun(
43-
transports = {Transport.HTTP, Transport.GRPC},
43+
transports = {Transport.HTTP},
4444
backends = {Backend.TEST_BENCH})
4545
public class ITHmacTest {
4646

0 commit comments

Comments
 (0)