Skip to content

Commit

Permalink
Add and use ApplyFromBuffer to create unique resources
Browse files Browse the repository at this point in the history
  • Loading branch information
bjee19 committed Aug 8, 2024
1 parent e4e8829 commit e3c56be
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 41 deletions.
63 changes: 41 additions & 22 deletions tests/framework/resourcemanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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
}
}

Expand Down
31 changes: 12 additions & 19 deletions tests/suite/reconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
"strconv"
"strings"
Expand Down Expand Up @@ -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
}

Expand Down

0 comments on commit e3c56be

Please sign in to comment.