Skip to content

Commit

Permalink
fix(resnames): ensure deterministic resname order for samplegen (#813)
Browse files Browse the repository at this point in the history
  • Loading branch information
miraleung committed Aug 5, 2021
1 parent 8c601f5 commit c4709df
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 9 deletions.
Expand Up @@ -59,6 +59,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
Expand All @@ -70,6 +71,7 @@ public static String composeClassHeaderMethodSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
// Use the first pure unary RPC method's sample code as showcase, if no such method exists, use
// the first method in the service's methods list.
Method method =
Expand Down Expand Up @@ -232,6 +234,7 @@ public static String composeRpcMethodHeaderSampleCode(
List<MethodArgument> arguments,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -278,6 +281,7 @@ public static String composeRpcDefaultMethodHeaderSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -336,6 +340,7 @@ public static String composeLroCallableMethodHeaderSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -448,6 +453,7 @@ public static String composePagedCallableMethodHeaderSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -567,6 +573,7 @@ public static String composeRegularCallableMethodHeaderSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -616,6 +623,7 @@ public static String composeStreamCallableMethodHeaderSampleCode(
TypeNode clientType,
Map<String, ResourceName> resourceNames,
Map<String, Message> messageTypes) {
resourceNames = sortAlphabetically(resourceNames);
VariableExpr clientVarExpr =
VariableExpr.withVariable(
Variable.builder()
Expand Down Expand Up @@ -1349,4 +1357,16 @@ private static boolean isProtoEmptyType(TypeNode type) {
return type.reference().pakkage().equals("com.google.protobuf")
&& type.reference().name().equals("Empty");
}

/**
* Returns the same "resource type name" to "resource name" key-value map as given, but sorted in
* alphabetical order. This prevents resource name flip-flopping between executions on the various
* machines used for client library publication.
*/
private static TreeMap<String, ResourceName> sortAlphabetically(
Map<String, ResourceName> unsorted) {
// This simple wrapper is not redundant because it hides implementation details from the
// callers.
return new TreeMap<>(unsorted);
}
}
Expand Up @@ -27,7 +27,7 @@
* try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
* BatchGetAssetsHistoryRequest request =
* BatchGetAssetsHistoryRequest.newBuilder()
* .setParent(ProjectName.of("[PROJECT]").toString())
* .setParent(FeedName.ofProjectFeedName("[PROJECT]", "[FEED]").toString())
* .addAllAssetNames(new ArrayList<String>())
* .setContentType(ContentType.forNumber(0))
* .setReadTimeWindow(TimeWindow.newBuilder().build())
Expand Down
Expand Up @@ -2147,7 +2147,7 @@ public final CryptoKeyVersion updateCryptoKeyVersion(UpdateCryptoKeyVersionReque
* <pre>{@code
* try (KeyManagementServiceClient keyManagementServiceClient =
* KeyManagementServiceClient.create()) {
* ResourceName name = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]");
* ResourceName name = CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]");
* ByteString plaintext = ByteString.EMPTY;
* EncryptResponse response = keyManagementServiceClient.encrypt(name, plaintext);
* }
Expand Down Expand Up @@ -2187,7 +2187,8 @@ public final EncryptResponse encrypt(ResourceName name, ByteString plaintext) {
* <pre>{@code
* try (KeyManagementServiceClient keyManagementServiceClient =
* KeyManagementServiceClient.create()) {
* String name = KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString();
* String name =
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]").toString();
* ByteString plaintext = ByteString.EMPTY;
* EncryptResponse response = keyManagementServiceClient.encrypt(name, plaintext);
* }
Expand Down Expand Up @@ -2226,7 +2227,9 @@ public final EncryptResponse encrypt(String name, ByteString plaintext) {
* KeyManagementServiceClient.create()) {
* EncryptRequest request =
* EncryptRequest.newBuilder()
* .setName(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setName(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .setPlaintext(ByteString.EMPTY)
* .setAdditionalAuthenticatedData(ByteString.EMPTY)
* .setPlaintextCrc32C(Int64Value.newBuilder().build())
Expand Down Expand Up @@ -2257,7 +2260,9 @@ public final EncryptResponse encrypt(EncryptRequest request) {
* KeyManagementServiceClient.create()) {
* EncryptRequest request =
* EncryptRequest.newBuilder()
* .setName(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setName(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .setPlaintext(ByteString.EMPTY)
* .setAdditionalAuthenticatedData(ByteString.EMPTY)
* .setPlaintextCrc32C(Int64Value.newBuilder().build())
Expand Down Expand Up @@ -3153,7 +3158,9 @@ public final CryptoKeyVersion restoreCryptoKeyVersion(RestoreCryptoKeyVersionReq
* KeyManagementServiceClient.create()) {
* GetIamPolicyRequest request =
* GetIamPolicyRequest.newBuilder()
* .setResource(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setResource(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .setOptions(GetPolicyOptions.newBuilder().build())
* .build();
* Policy response = keyManagementServiceClient.getIamPolicy(request);
Expand All @@ -3179,7 +3186,9 @@ public final Policy getIamPolicy(GetIamPolicyRequest request) {
* KeyManagementServiceClient.create()) {
* GetIamPolicyRequest request =
* GetIamPolicyRequest.newBuilder()
* .setResource(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setResource(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .setOptions(GetPolicyOptions.newBuilder().build())
* .build();
* ApiFuture<Policy> future =
Expand Down Expand Up @@ -3342,7 +3351,9 @@ public final UnaryCallable<GetLocationRequest, Location> getLocationCallable() {
* KeyManagementServiceClient.create()) {
* TestIamPermissionsRequest request =
* TestIamPermissionsRequest.newBuilder()
* .setResource(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setResource(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .addAllPermissions(new ArrayList<String>())
* .build();
* TestIamPermissionsResponse response = keyManagementServiceClient.testIamPermissions(request);
Expand All @@ -3368,7 +3379,9 @@ public final TestIamPermissionsResponse testIamPermissions(TestIamPermissionsReq
* KeyManagementServiceClient.create()) {
* TestIamPermissionsRequest request =
* TestIamPermissionsRequest.newBuilder()
* .setResource(KeyRingName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]").toString())
* .setResource(
* CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
* .toString())
* .addAllPermissions(new ArrayList<String>())
* .build();
* ApiFuture<TestIamPermissionsResponse> future =
Expand Down

0 comments on commit c4709df

Please sign in to comment.