From e3c56be6d633aa113eca9566085106f85a1124a9 Mon Sep 17 00:00:00 2001 From: Benjamin Jee Date: Thu, 8 Aug 2024 12:08:50 -0700 Subject: [PATCH] Add and use ApplyFromBuffer to create unique resources --- tests/framework/resourcemanager.go | 63 +++++++++++++++++++----------- tests/suite/reconfig_test.go | 31 ++++++--------- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/tests/framework/resourcemanager.go b/tests/framework/resourcemanager.go index e7a585cf79..4ce3fec712 100644 --- a/tests/framework/resourcemanager.go +++ b/tests/framework/resourcemanager.go @@ -115,6 +115,20 @@ func (rm *ResourceManager) Apply(resources []client.Object) error { // ApplyFromFiles creates or updates Kubernetes resources defined within the provided YAML files. func (rm *ResourceManager) ApplyFromFiles(files []string, namespace string) error { + for _, file := range files { + data, err := rm.GetFileContents(file) + if err != nil { + return err + } + + if err = rm.ApplyFromBuffer(data, namespace); err != nil { + return err + } + } + return nil +} + +func (rm *ResourceManager) ApplyFromBuffer(buffer *bytes.Buffer, namespace string) error { ctx, cancel := context.WithTimeout(context.Background(), rm.TimeoutConfig.CreateTimeout) defer cancel() @@ -150,7 +164,7 @@ func (rm *ResourceManager) ApplyFromFiles(files []string, namespace string) erro return nil } - return rm.readAndHandleObjects(handlerFunc, files) + return rm.readAndHandleObject(handlerFunc, buffer) } // Delete deletes Kubernetes resources defined as Go objects. @@ -213,36 +227,41 @@ func (rm *ResourceManager) DeleteFromFiles(files []string, namespace string) err return nil } - return rm.readAndHandleObjects(handlerFunc, files) -} - -func (rm *ResourceManager) readAndHandleObjects( - handle func(unstructured.Unstructured) error, - files []string, -) error { for _, file := range files { data, err := rm.GetFileContents(file) if err != nil { return err } - decoder := yaml.NewYAMLOrJSONDecoder(data, 4096) - for { - obj := unstructured.Unstructured{} - if err := decoder.Decode(&obj); err != nil { - if errors.Is(err, io.EOF) { - break - } - return fmt.Errorf("error decoding resource: %w", err) - } + if err = rm.readAndHandleObject(handlerFunc, data); err != nil { + return err + } + } - if len(obj.Object) == 0 { - continue - } + return nil +} - if err := handle(obj); err != nil { - return err +func (rm *ResourceManager) readAndHandleObject( + handle func(unstructured.Unstructured) error, + data *bytes.Buffer, +) error { + decoder := yaml.NewYAMLOrJSONDecoder(data, 4096) + + for { + obj := unstructured.Unstructured{} + if err := decoder.Decode(&obj); err != nil { + if errors.Is(err, io.EOF) { + break } + return fmt.Errorf("error decoding resource: %w", err) + } + + if len(obj.Object) == 0 { + continue + } + + if err := handle(obj); err != nil { + return err } } diff --git a/tests/suite/reconfig_test.go b/tests/suite/reconfig_test.go index afd622cb07..ea5859eca6 100644 --- a/tests/suite/reconfig_test.go +++ b/tests/suite/reconfig_test.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "os" - "os/exec" "path/filepath" "strconv" "strings" @@ -80,30 +79,24 @@ var _ = Describe("Reconfiguration Performance Testing", Ordered, Label("reconfig createUniqueResources := func(resourceCount int, fileName string) error { for i := 1; i <= resourceCount; i++ { - nsName := "namespace" + strconv.Itoa(i) - // Command to run sed and capture its output - //nolint:gosec - sedCmd := exec.Command("sed", - "-e", - "s/coffee/coffee"+nsName+"/g", - "-e", - "s/tea/tea"+nsName+"/g", - fileName, - ) - // Command to apply using kubectl - kubectlCmd := exec.Command("kubectl", "apply", "-n", nsName, "-f", "-") + namespace := "namespace" + strconv.Itoa(i) - sedOutput, err := sedCmd.Output() + b, err := resourceManager.GetFileContents(fileName) if err != nil { - return err + return fmt.Errorf("error getting manifest file: %w", err) } - kubectlCmd.Stdin = bytes.NewReader(sedOutput) - _, err = kubectlCmd.CombinedOutput() - if err != nil { - return err + fileString := b.String() + fileString = strings.ReplaceAll(fileString, "coffee", "coffee"+namespace) + fileString = strings.ReplaceAll(fileString, "tea", "tea"+namespace) + + data := bytes.NewBufferString(fileString) + + if err := resourceManager.ApplyFromBuffer(data, namespace); err != nil { + return fmt.Errorf("error processing manifest file: %w", err) } } + return nil }