From d6851ec735688f2b9cb0fe7aae562826fa9d77fd Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Thu, 29 Feb 2024 09:50:38 +0100 Subject: [PATCH] scheduler_perf: fail when input YAML is invalid The YAML files get decoded into an unstructured object, without validation, and then sent to the apiserver with a generic client. The default behavior is to issue a warning to the client, which gets logged by client-go. What we want instead is an error that causes the test to fail in a clean way right at the beginning. --- test/integration/scheduler_perf/create.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/integration/scheduler_perf/create.go b/test/integration/scheduler_perf/create.go index ddc0e350e75..3eef3328934 100644 --- a/test/integration/scheduler_perf/create.go +++ b/test/integration/scheduler_perf/create.go @@ -95,17 +95,23 @@ func (c *createAny) run(tCtx ktesting.TContext) { return fmt.Errorf("map %q to resource: %v", gk, err) } resourceClient := tCtx.Dynamic().Resource(mapping.Resource) - + options := metav1.CreateOptions{ + // If the YAML input is invalid, then we want the + // apiserver to tell us via an error. This can + // happen because decoding into an unstructured object + // doesn't validate. + FieldValidation: "Strict", + } if c.Namespace != "" { if mapping.Scope.Name() != meta.RESTScopeNameNamespace { return fmt.Errorf("namespace %q set for %q, but %q has scope %q", c.Namespace, c.TemplatePath, gk, mapping.Scope.Name()) } - _, err = resourceClient.Namespace(c.Namespace).Create(tCtx, obj, metav1.CreateOptions{}) + _, err = resourceClient.Namespace(c.Namespace).Create(tCtx, obj, options) } else { if mapping.Scope.Name() != meta.RESTScopeNameRoot { return fmt.Errorf("namespace not set for %q, but %q has scope %q", c.TemplatePath, gk, mapping.Scope.Name()) } - _, err = resourceClient.Create(tCtx, obj, metav1.CreateOptions{}) + _, err = resourceClient.Create(tCtx, obj, options) } return err }