@@ -161,3 +161,113 @@ func TestResourceURL(t *testing.T) {
161
161
})
162
162
}
163
163
}
164
+
165
+ func TestResourceWatchURL (t * testing.T ) {
166
+ tests := []struct {
167
+ name string
168
+ endpoint string
169
+ namespace string
170
+ resource Resource
171
+ options []Option
172
+ want string
173
+ wantErr bool
174
+ }{
175
+ {
176
+ name : "watch_pods" ,
177
+ namespace : "my-namespace" ,
178
+ endpoint : "https://k8s.example.com/foo/" ,
179
+ resource : & Pod {},
180
+ want : "https://k8s.example.com/foo/api/v1/namespaces/my-namespace/pods?watch=true" ,
181
+ },
182
+ {
183
+ name : "watch_all_pods" ,
184
+ endpoint : "https://k8s.example.com/foo/" ,
185
+ resource : & Pod {},
186
+ want : "https://k8s.example.com/foo/api/v1/pods?watch=true" ,
187
+ },
188
+ {
189
+ name : "watch_deployments" ,
190
+ namespace : "my-namespace" ,
191
+ endpoint : "https://k8s.example.com/foo/" ,
192
+ resource : & Deployment {},
193
+ want : "https://k8s.example.com/foo/apis/apps/v1beta2/namespaces/my-namespace/deployments?watch=true" ,
194
+ },
195
+ {
196
+ name : "watch_with_options" ,
197
+ namespace : "my-namespace" ,
198
+ endpoint : "https://k8s.example.com/foo/" ,
199
+ resource : & Deployment {},
200
+ options : []Option {
201
+ Timeout (time .Minute ),
202
+ },
203
+ want : "https://k8s.example.com/foo/apis/apps/v1beta2/namespaces/my-namespace/deployments?timeoutSeconds=60&watch=true" ,
204
+ },
205
+ {
206
+ name : "watch_non_namespaced" ,
207
+ endpoint : "https://k8s.example.com/foo/" ,
208
+ resource : & ClusterRole {},
209
+ want : "https://k8s.example.com/foo/apis/rbac.authorization.k8s.io/v1/clusterroles?watch=true" ,
210
+ },
211
+ {
212
+ name : "watch_non_namespaced_with_namespace" ,
213
+ namespace : "my-namespace" ,
214
+ endpoint : "https://k8s.example.com/foo/" ,
215
+ resource : & ClusterRole {},
216
+ wantErr : true , // can't provide a namespace for a non-namespaced resource
217
+ },
218
+ {
219
+ name : "watch_deployment" ,
220
+ endpoint : "https://k8s.example.com/foo/" ,
221
+ resource : & Deployment {
222
+ Metadata : & metav1.ObjectMeta {
223
+ Namespace : String ("my-namespace" ),
224
+ Name : String ("my-deployment" ),
225
+ },
226
+ },
227
+ want : "https://k8s.example.com/foo/apis/apps/v1beta2/namespaces/my-namespace/deployments/my-deployment?watch=true" ,
228
+ },
229
+ {
230
+ name : "watch_deployment_ns_in_call" ,
231
+ endpoint : "https://k8s.example.com/foo/" ,
232
+ namespace : "my-namespace" ,
233
+ resource : & Deployment {
234
+ Metadata : & metav1.ObjectMeta {
235
+ Name : String ("my-deployment" ),
236
+ },
237
+ },
238
+ want : "https://k8s.example.com/foo/apis/apps/v1beta2/namespaces/my-namespace/deployments/my-deployment?watch=true" ,
239
+ },
240
+ {
241
+ name : "watch_deployment_mismatched_ns" ,
242
+ endpoint : "https://k8s.example.com/foo/" ,
243
+ namespace : "my-other-namespace" ,
244
+ resource : & Deployment {
245
+ Metadata : & metav1.ObjectMeta {
246
+ Namespace : String ("my-namespace" ),
247
+ Name : String ("my-deployment" ),
248
+ },
249
+ },
250
+ wantErr : true ,
251
+ },
252
+ }
253
+ for _ , test := range tests {
254
+ t .Run (test .name , func (t * testing.T ) {
255
+ got , err := resourceWatchURL (
256
+ test .endpoint ,
257
+ test .namespace ,
258
+ test .resource ,
259
+ test .options ... ,
260
+ )
261
+ if err != nil {
262
+ if ! test .wantErr {
263
+ t .Fatalf ("resourceWatchURL: %v" , err )
264
+ }
265
+ return
266
+ }
267
+ if got != test .want {
268
+ t .Errorf ("want: %q" , test .want )
269
+ t .Errorf ("got : %q" , got )
270
+ }
271
+ })
272
+ }
273
+ }
0 commit comments