Skip to content

Commit e3c56be

Browse files
committed
Add and use ApplyFromBuffer to create unique resources
1 parent e4e8829 commit e3c56be

File tree

2 files changed

+53
-41
lines changed

2 files changed

+53
-41
lines changed

tests/framework/resourcemanager.go

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,20 @@ func (rm *ResourceManager) Apply(resources []client.Object) error {
115115

116116
// ApplyFromFiles creates or updates Kubernetes resources defined within the provided YAML files.
117117
func (rm *ResourceManager) ApplyFromFiles(files []string, namespace string) error {
118+
for _, file := range files {
119+
data, err := rm.GetFileContents(file)
120+
if err != nil {
121+
return err
122+
}
123+
124+
if err = rm.ApplyFromBuffer(data, namespace); err != nil {
125+
return err
126+
}
127+
}
128+
return nil
129+
}
130+
131+
func (rm *ResourceManager) ApplyFromBuffer(buffer *bytes.Buffer, namespace string) error {
118132
ctx, cancel := context.WithTimeout(context.Background(), rm.TimeoutConfig.CreateTimeout)
119133
defer cancel()
120134

@@ -150,7 +164,7 @@ func (rm *ResourceManager) ApplyFromFiles(files []string, namespace string) erro
150164
return nil
151165
}
152166

153-
return rm.readAndHandleObjects(handlerFunc, files)
167+
return rm.readAndHandleObject(handlerFunc, buffer)
154168
}
155169

156170
// Delete deletes Kubernetes resources defined as Go objects.
@@ -213,36 +227,41 @@ func (rm *ResourceManager) DeleteFromFiles(files []string, namespace string) err
213227
return nil
214228
}
215229

216-
return rm.readAndHandleObjects(handlerFunc, files)
217-
}
218-
219-
func (rm *ResourceManager) readAndHandleObjects(
220-
handle func(unstructured.Unstructured) error,
221-
files []string,
222-
) error {
223230
for _, file := range files {
224231
data, err := rm.GetFileContents(file)
225232
if err != nil {
226233
return err
227234
}
228235

229-
decoder := yaml.NewYAMLOrJSONDecoder(data, 4096)
230-
for {
231-
obj := unstructured.Unstructured{}
232-
if err := decoder.Decode(&obj); err != nil {
233-
if errors.Is(err, io.EOF) {
234-
break
235-
}
236-
return fmt.Errorf("error decoding resource: %w", err)
237-
}
236+
if err = rm.readAndHandleObject(handlerFunc, data); err != nil {
237+
return err
238+
}
239+
}
238240

239-
if len(obj.Object) == 0 {
240-
continue
241-
}
241+
return nil
242+
}
242243

243-
if err := handle(obj); err != nil {
244-
return err
244+
func (rm *ResourceManager) readAndHandleObject(
245+
handle func(unstructured.Unstructured) error,
246+
data *bytes.Buffer,
247+
) error {
248+
decoder := yaml.NewYAMLOrJSONDecoder(data, 4096)
249+
250+
for {
251+
obj := unstructured.Unstructured{}
252+
if err := decoder.Decode(&obj); err != nil {
253+
if errors.Is(err, io.EOF) {
254+
break
245255
}
256+
return fmt.Errorf("error decoding resource: %w", err)
257+
}
258+
259+
if len(obj.Object) == 0 {
260+
continue
261+
}
262+
263+
if err := handle(obj); err != nil {
264+
return err
246265
}
247266
}
248267

tests/suite/reconfig_test.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"fmt"
77
"io"
88
"os"
9-
"os/exec"
109
"path/filepath"
1110
"strconv"
1211
"strings"
@@ -80,30 +79,24 @@ var _ = Describe("Reconfiguration Performance Testing", Ordered, Label("reconfig
8079

8180
createUniqueResources := func(resourceCount int, fileName string) error {
8281
for i := 1; i <= resourceCount; i++ {
83-
nsName := "namespace" + strconv.Itoa(i)
84-
// Command to run sed and capture its output
85-
//nolint:gosec
86-
sedCmd := exec.Command("sed",
87-
"-e",
88-
"s/coffee/coffee"+nsName+"/g",
89-
"-e",
90-
"s/tea/tea"+nsName+"/g",
91-
fileName,
92-
)
93-
// Command to apply using kubectl
94-
kubectlCmd := exec.Command("kubectl", "apply", "-n", nsName, "-f", "-")
82+
namespace := "namespace" + strconv.Itoa(i)
9583

96-
sedOutput, err := sedCmd.Output()
84+
b, err := resourceManager.GetFileContents(fileName)
9785
if err != nil {
98-
return err
86+
return fmt.Errorf("error getting manifest file: %w", err)
9987
}
100-
kubectlCmd.Stdin = bytes.NewReader(sedOutput)
10188

102-
_, err = kubectlCmd.CombinedOutput()
103-
if err != nil {
104-
return err
89+
fileString := b.String()
90+
fileString = strings.ReplaceAll(fileString, "coffee", "coffee"+namespace)
91+
fileString = strings.ReplaceAll(fileString, "tea", "tea"+namespace)
92+
93+
data := bytes.NewBufferString(fileString)
94+
95+
if err := resourceManager.ApplyFromBuffer(data, namespace); err != nil {
96+
return fmt.Errorf("error processing manifest file: %w", err)
10597
}
10698
}
99+
107100
return nil
108101
}
109102

0 commit comments

Comments
 (0)