Skip to content

Commit 5814159

Browse files
fix: better compare for mixin package includes (#1219)
* fix: better compare for mixin package includes
1 parent 9c6384c commit 5814159

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

gapic-generator/lib/gapic/model/mixins.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ def self.mixin_service_address? service_address, gem_name: nil
176176
def self.mixin_message_field_address? message_field_address, gem_name: nil
177177
message_field_address = message_field_address.join "." unless message_field_address.is_a? String
178178
# NB: messages are checked against package, not service
179-
service_address = MIXIN_GEM_NAMES.keys.find { |sn| message_field_address.start_with? MIXIN_PACKAGE_NAMES[sn] }
179+
# The dot is added to the package name to ensure that e.g. `google.iam.v1` is not considered
180+
# a parent package to messages and fields within `google.iam.v1beta1`
181+
service_address = MIXIN_GEM_NAMES.keys.find do |sn|
182+
message_field_address.start_with? "#{MIXIN_PACKAGE_NAMES[sn]}."
183+
end
180184

181185
!service_address.nil? && gem_name != MIXIN_GEM_NAMES[service_address]
182186
end

gapic-generator/test/gapic/mixins/mixins_test.rb

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,21 @@ def test_mixin_service_address_checker
4545
refute Gapic::Model::Mixins.mixin_service_address? "testing.mixins.ServiceWithLoc"
4646
end
4747

48+
# This checks for service `WorkloadIdentityPools` in gem google.iam.v1beta which is not a mixin
49+
def test_mixin_service_address_checker_beta
50+
refute Gapic::Model::Mixins.mixin_service_address? "google.iam.v1beta.IAMPolicy"
51+
refute Gapic::Model::Mixins.mixin_service_address? "google.iam.v1beta.IAMPolicy",
52+
gem_name: "google-iam-v1beta"
53+
refute Gapic::Model::Mixins.mixin_service_address? "google.iam.v1beta.IAMPolicy",
54+
gem_name: "google-cloud-something else"
55+
refute Gapic::Model::Mixins.mixin_service_address? ["google", "iam", "v1beta", "IAMPolicy"]
56+
57+
assert Gapic::Model::Mixins.mixin_service_address? "google.iam.v1.IAMPolicy"
58+
assert Gapic::Model::Mixins.mixin_service_address? "google.iam.v1.IAMPolicy",
59+
gem_name: "google-cloud-something-else"
60+
assert Gapic::Model::Mixins.mixin_service_address? ["google", "iam", "v1", "IAMPolicy"]
61+
end
62+
4863
def test_mixin_message_field_address_checker
4964
# sic. no `s` at the end, this is a message named `Location`, not service named `Locations`
5065
assert Gapic::Model::Mixins.mixin_message_field_address? "google.cloud.location.Location"
@@ -64,6 +79,41 @@ def test_mixin_message_field_address_checker
6479
refute Gapic::Model::Mixins.mixin_message_field_address? "testing.mixins.Request"
6580
end
6681

82+
# This checks for message `ListWorkloadIdentityPoolsRequest` in gem google.iam.v1beta which is not a mixin
83+
def test_mixin_message_field_address_checker_beta
84+
# sic. no `s` at the end, this is a message named `Location`, not service named `Locations`
85+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest"
86+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest.resource"
87+
88+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest",
89+
gem_name: "google-iam-v1beta"
90+
91+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest",
92+
gem_name: "google-cloud-something-else"
93+
94+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest.resource",
95+
gem_name: "google-iam-v1beta"
96+
97+
refute Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1beta.SetIamPolicyRequest.resource",
98+
gem_name: "google-cloud-something-else"
99+
100+
refute Gapic::Model::Mixins.mixin_message_field_address? ["google", "iam", "v1beta", "SetIamPolicyRequest"]
101+
refute Gapic::Model::Mixins.mixin_message_field_address? ["google", "iam", "v1beta", "SetIamPolicyRequest",
102+
"resource"]
103+
104+
assert Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1.SetIamPolicyRequest"
105+
assert Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1.SetIamPolicyRequest.resource"
106+
107+
assert Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1.SetIamPolicyRequest",
108+
gem_name: "google-cloud-something-else"
109+
110+
assert Gapic::Model::Mixins.mixin_message_field_address? "google.iam.v1.SetIamPolicyRequest.resource",
111+
gem_name: "google-cloud-something-else"
112+
113+
assert Gapic::Model::Mixins.mixin_message_field_address? ["google", "iam", "v1", "SetIamPolicyRequest"]
114+
assert Gapic::Model::Mixins.mixin_message_field_address? ["google", "iam", "v1", "SetIamPolicyRequest", "resource"]
115+
end
116+
67117
# Test the `Garbage` library, which does NOT have mixins specified
68118
# in its service.yaml (or service.yaml at all)
69119
def test_garbage_mixins

0 commit comments

Comments
 (0)