Skip to content

Commit 5a98020

Browse files
modular-magicianEdward Sun
and
Edward Sun
authored
Issue13513 (#7355) (#13862)
* fix suppress func * update func * update to fix func errors * update regex and tests --------- Signed-off-by: Modular Magician <[email protected]> Co-authored-by: Edward Sun <[email protected]>
1 parent a7eb989 commit 5a98020

File tree

3 files changed

+167
-1
lines changed

3 files changed

+167
-1
lines changed

.changelog/7355.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
cloudfunctions: fixed no diff found on `event_trigger.resource` of `google_cloudfunctions_function`
3+
```

google/resource_cloudfunctions_function.go

+34-1
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,43 @@ func validateResourceCloudFunctionsFunctionName(v interface{}, k string) (ws []s
7979
return validateRegexp(re)(v, k)
8080
}
8181

82+
func partsCompare(a, b, reg string) bool {
83+
84+
regex := regexp.MustCompile(reg)
85+
if regex.MatchString(a) && regex.MatchString(b) {
86+
aParts := regex.FindStringSubmatch(a)
87+
bParts := regex.FindStringSubmatch(b)
88+
for i := 0; i < len(aParts); i++ {
89+
if aParts[i] != bParts[i] {
90+
return false
91+
}
92+
}
93+
} else if regex.MatchString(a) {
94+
aParts := regex.FindStringSubmatch(a)
95+
if aParts[len(aParts)-1] != b {
96+
return false
97+
}
98+
} else if regex.MatchString(b) {
99+
bParts := regex.FindStringSubmatch(b)
100+
if bParts[len(bParts)-1] != a {
101+
return false
102+
}
103+
} else {
104+
if a != b {
105+
return false
106+
}
107+
}
108+
109+
return true
110+
}
111+
82112
// based on compareSelfLinkOrResourceName, but less reusable and allows multi-/
83113
// strings in the new state (config) part
84114
func compareSelfLinkOrResourceNameWithMultipleParts(_, old, new string, _ *schema.ResourceData) bool {
85-
return strings.HasSuffix(old, new)
115+
// two formats based on expandEventTrigger()
116+
regex1 := "projects/(.+)/databases/\\(default\\)/documents/(.+)"
117+
regex2 := "projects/(.+)/(.+)/(.+)"
118+
return partsCompare(old, new, regex1) || partsCompare(old, new, regex2)
86119
}
87120

88121
func ResourceCloudFunctionsFunction() *schema.Resource {

google/resource_cloudfunctions_function_test.go

+130
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,136 @@ func TestValidLabelKeys(t *testing.T) {
118118
}
119119
}
120120

121+
func TestCompareSelfLinkOrResourceNameWithMultipleParts(t *testing.T) {
122+
cases := map[string]struct {
123+
Old, New string
124+
ExpectDiffSuppress bool
125+
}{
126+
"projects to no projects doc": {
127+
Old: "projects/myproject/databases/default/documents/resource",
128+
New: "resource",
129+
ExpectDiffSuppress: true,
130+
},
131+
"no projects to projects doc": {
132+
Old: "resource",
133+
New: "projects/myproject/databases/default/documents/resource",
134+
ExpectDiffSuppress: true,
135+
},
136+
"projects to projects doc": {
137+
Old: "projects/myproject/databases/default/documents/resource",
138+
New: "projects/myproject/databases/default/documents/resource",
139+
ExpectDiffSuppress: true,
140+
},
141+
"multi messages doc": {
142+
Old: "messages/{messageId}",
143+
New: "projects/myproject/databases/(default)/documents/messages/{messageId}",
144+
ExpectDiffSuppress: true,
145+
},
146+
"multi messages 2 doc": {
147+
Old: "projects/myproject/databases/(default)/documents/messages/{messageId}",
148+
New: "messages/{messageId}",
149+
ExpectDiffSuppress: true,
150+
},
151+
"projects to no projects topics": {
152+
Old: "projects/myproject/topics/resource",
153+
New: "resource",
154+
ExpectDiffSuppress: true,
155+
},
156+
"no projects to projects topics": {
157+
Old: "resource",
158+
New: "projects/myproject/topics/resource",
159+
ExpectDiffSuppress: true,
160+
},
161+
"projects to projects topics": {
162+
Old: "projects/myproject/topics/resource",
163+
New: "projects/myproject/topics/resource",
164+
ExpectDiffSuppress: true,
165+
},
166+
167+
"unmatched projects to no projects doc": {
168+
Old: "projects/myproject/databases/default/documents/resource",
169+
New: "resourcex",
170+
ExpectDiffSuppress: false,
171+
},
172+
"unmatched no projects to projects doc": {
173+
Old: "resourcex",
174+
New: "projects/myproject/databases/default/documents/resource",
175+
ExpectDiffSuppress: false,
176+
},
177+
"unmatched projects to projects doc": {
178+
Old: "projects/myproject/databases/default/documents/resource",
179+
New: "projects/myproject/databases/default/documents/resourcex",
180+
ExpectDiffSuppress: false,
181+
},
182+
"unmatched projects to projects 2 doc": {
183+
Old: "projects/myprojectx/databases/default/documents/resource",
184+
New: "projects/myproject/databases/default/documents/resource",
185+
ExpectDiffSuppress: false,
186+
},
187+
"unmatched projects to empty doc": {
188+
Old: "",
189+
New: "projects/myproject/databases/default/documents/resource",
190+
ExpectDiffSuppress: false,
191+
},
192+
"unmatched empty to projects 2 doc": {
193+
Old: "projects/myprojectx/databases/default/documents/resource",
194+
New: "",
195+
ExpectDiffSuppress: false,
196+
},
197+
"unmatched default to default2 doc": {
198+
Old: "projects/myproject/databases/default/documents/resource",
199+
New: "projects/myproject/databases/default2/documents/resource",
200+
ExpectDiffSuppress: false,
201+
},
202+
"unmatched projects to no projects topics": {
203+
Old: "projects/myproject/topics/resource",
204+
New: "resourcex",
205+
ExpectDiffSuppress: false,
206+
},
207+
"unmatched no projects to projects topics": {
208+
Old: "resourcex",
209+
New: "projects/myproject/topics/resource",
210+
ExpectDiffSuppress: false,
211+
},
212+
"unmatched projects to projects topics": {
213+
Old: "projects/myproject/topics/resource",
214+
New: "projects/myproject/topics/resourcex",
215+
ExpectDiffSuppress: false,
216+
},
217+
"unmatched projects to projects 2 topics": {
218+
Old: "projects/myprojectx/topics/resource",
219+
New: "projects/myproject/topics/resource",
220+
ExpectDiffSuppress: false,
221+
},
222+
"unmatched projects to empty topics": {
223+
Old: "projects/myproject/topics/resource",
224+
New: "",
225+
ExpectDiffSuppress: false,
226+
},
227+
"unmatched empty to projects topics": {
228+
Old: "",
229+
New: "projects/myproject/topics/resource",
230+
ExpectDiffSuppress: false,
231+
},
232+
"unmatched resource to resource-partial": {
233+
Old: "resource",
234+
New: "resource-partial",
235+
ExpectDiffSuppress: false,
236+
},
237+
"unmatched resource-partial to projects": {
238+
Old: "resource-partial",
239+
New: "projects/myproject/topics/resource",
240+
ExpectDiffSuppress: false,
241+
},
242+
}
243+
244+
for tn, tc := range cases {
245+
if compareSelfLinkOrResourceNameWithMultipleParts("resource", tc.Old, tc.New, nil) != tc.ExpectDiffSuppress {
246+
t.Fatalf("bad: %s, '%s' => '%s' expect %t", tn, tc.Old, tc.New, tc.ExpectDiffSuppress)
247+
}
248+
}
249+
}
250+
121251
func TestAccCloudFunctionsFunction_basic(t *testing.T) {
122252
t.Parallel()
123253

0 commit comments

Comments
 (0)