@@ -310,6 +310,65 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta
310
310
}
311
311
}
312
312
313
+ func TestInvalidCRUD (t * testing.T ) {
314
+ tearDown , apiExtensionClient , dynamicClient , err := fixtures .StartDefaultServerWithClients (t )
315
+ if err != nil {
316
+ t .Fatal (err )
317
+ }
318
+ defer tearDown ()
319
+
320
+ noxuDefinition := fixtures .NewNoxuCustomResourceDefinition (apiextensionsv1beta1 .ClusterScoped )
321
+ noxuDefinition , err = fixtures .CreateNewCustomResourceDefinition (noxuDefinition , apiExtensionClient , dynamicClient )
322
+ if err != nil {
323
+ t .Fatal (err )
324
+ }
325
+
326
+ noxuResourceClients := map [string ]dynamic.ResourceInterface {}
327
+ noxuWatchs := map [string ]watch.Interface {}
328
+ disabledVersions := map [string ]bool {}
329
+ for _ , v := range noxuDefinition .Spec .Versions {
330
+ disabledVersions [v .Name ] = ! v .Served
331
+ }
332
+ for _ , v := range noxuDefinition .Spec .Versions {
333
+ noxuResourceClients [v .Name ] = newNamespacedCustomResourceVersionedClient ("" , dynamicClient , noxuDefinition , v .Name )
334
+
335
+ noxuWatch , err := noxuResourceClients [v .Name ].Watch (metav1.ListOptions {})
336
+ if disabledVersions [v .Name ] {
337
+ if ! errors .IsNotFound (err ) {
338
+ t .Errorf ("expected the watch operation fail with NotFound for disabled version %s, got error: %v" , v .Name , err )
339
+ }
340
+ } else {
341
+ if err != nil {
342
+ t .Fatal (err )
343
+ }
344
+ noxuWatchs [v .Name ] = noxuWatch
345
+ }
346
+ }
347
+ defer func () {
348
+ for _ , w := range noxuWatchs {
349
+ w .Stop ()
350
+ }
351
+ }()
352
+
353
+ for version , noxuResourceClient := range noxuResourceClients {
354
+ // Case when typeless Unstructured object is passed
355
+ typelessInstance := & unstructured.Unstructured {}
356
+ if _ , err := noxuResourceClient .Create (typelessInstance , metav1.CreateOptions {}); ! errors .IsBadRequest (err ) {
357
+ t .Errorf ("expected badrequest for submitting empty object, got %#v" , err )
358
+ }
359
+ // Case when apiVersion and Kind would be set up from GVK, but no other objects are present
360
+ typedNoBodyInstance := & unstructured.Unstructured {
361
+ Object : map [string ]interface {}{
362
+ "apiVersion" : "mygroup.example.com/" + version ,
363
+ "kind" : "WishIHadChosenNoxu" ,
364
+ },
365
+ }
366
+ if _ , err := noxuResourceClient .Create (typedNoBodyInstance , metav1.CreateOptions {}); ! errors .IsInvalid (err ) {
367
+ t .Errorf ("expected invalid request for submitting malformed object, got %#v" , err )
368
+ }
369
+ }
370
+ }
371
+
313
372
func testFieldSelector (t * testing.T , ns string , noxuDefinition * apiextensionsv1beta1.CustomResourceDefinition , dynamicClient dynamic.Interface ) {
314
373
noxuResourceClient := newNamespacedCustomResourceClient (ns , dynamicClient , noxuDefinition )
315
374
initialList , err := noxuResourceClient .List (metav1.ListOptions {})
0 commit comments