Skip to content

Commit 6038c6b

Browse files
committed
tests: reuse normalizer for exported KRM object
The object we export from the kube-apiserver has more information than when we export the object, particularly because we do not export status. Reuse the normalizer for the kube-apiserver object, because many fields will be more easily extracted from the status, in particular identity fields.
1 parent 673c68d commit 6038c6b

File tree

4 files changed

+45
-33
lines changed

4 files changed

+45
-33
lines changed

tests/e2e/export.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,9 @@ func exportResource(h *create.Harness, obj *unstructured.Unstructured, expectati
156156
}
157157
}
158158

159-
output := h.MustReadFile(outputPath)
160-
return string(output)
159+
outputBytes := h.MustReadFile(outputPath)
160+
output := string(outputBytes)
161+
return output
161162
}
162163

163164
func exportResourceAsUnstructured(h *create.Harness, obj *unstructured.Unstructured) *unstructured.Unstructured {

tests/e2e/normalize.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ import (
3838

3939
const PlaceholderTimestamp = "2024-04-01T12:34:56.123456Z"
4040

41-
func normalizeKRMObject(t *testing.T, u *unstructured.Unstructured, project testgcp.GCPProject, folderID string, uniqueID string) error {
41+
func normalizeKRMObject(t *testing.T, u *unstructured.Unstructured, project testgcp.GCPProject, folderID string, uniqueID string) {
42+
visitor := buildKRMNormalizer(t, u, project, folderID, uniqueID)
43+
if err := visitor.VisitUnstructured(u); err != nil {
44+
t.Fatalf("failed to normalize KRM object: %v", err)
45+
}
46+
}
47+
48+
func buildKRMNormalizer(t *testing.T, u *unstructured.Unstructured, project testgcp.GCPProject, folderID string, uniqueID string) *objectWalker {
4249
replacements := NewReplacements()
4350
findLinksInKRMObject(t, replacements, u)
4451

@@ -623,7 +630,7 @@ func normalizeKRMObject(t *testing.T, u *unstructured.Unstructured, project test
623630
})
624631
}
625632

626-
return visitor.VisitUnstructured(u)
633+
return visitor
627634
}
628635

629636
func setStringAtPath(m map[string]any, atPath string, newValue string) error {
@@ -1055,9 +1062,7 @@ func NormalizeHTTPLog(t *testing.T, events test.LogEntries, services mockgcpregi
10551062
events.PrettifyJSON(func(requestURL string, obj map[string]any) {
10561063
u := &unstructured.Unstructured{}
10571064
u.Object = obj
1058-
if err := normalizeKRMObject(t, u, project, folderID, uniqueID); err != nil {
1059-
t.Fatalf("error from normalizeObject: %v", err)
1060-
}
1065+
normalizeKRMObject(t, u, project, folderID, uniqueID)
10611066
})
10621067

10631068
// Apply replacements

tests/e2e/script_test.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,7 @@ func TestE2EScript(t *testing.T) {
362362
t.Logf("ignoring failure to export resource of gvk %v", exportResource.GroupVersionKind())
363363
// t.Errorf("failed to export resource of gvk %v", exportResource.GroupVersionKind())
364364
} else {
365-
if err := normalizeKRMObject(t, u, project, folderID, uniqueID); err != nil {
366-
t.Fatalf("error from normalizeObject: %v", err)
367-
}
365+
normalizeKRMObject(t, u, project, folderID, uniqueID)
368366
got, err := yaml.Marshal(u)
369367
if err != nil {
370368
t.Errorf("failed to convert kube object to yaml: %v", err)
@@ -385,9 +383,7 @@ func TestE2EScript(t *testing.T) {
385383
if err := h.GetClient().Get(ctx, id, u); err != nil {
386384
t.Errorf("failed to get kube object: %v", err)
387385
} else {
388-
if err := normalizeKRMObject(t, u, project, folderID, uniqueID); err != nil {
389-
t.Fatalf("error from normalizeObject: %v", err)
390-
}
386+
normalizeKRMObject(t, u, project, folderID, uniqueID)
391387
got, err := yaml.Marshal(u)
392388
if err != nil {
393389
t.Errorf("failed to convert kube object to yaml: %v", err)

tests/e2e/unified_test.go

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -374,16 +374,42 @@ func runScenario(ctx context.Context, t *testing.T, testPause bool, fixture reso
374374
folderID := h.FolderID()
375375

376376
for _, obj := range exportResources {
377-
// Golden test exported GCP object
377+
// Check the final state of the object in the kube-apiserver (and compare against golden file)
378+
var normalizer *objectWalker
379+
{
380+
u := &unstructured.Unstructured{}
381+
u.SetGroupVersionKind(obj.GroupVersionKind())
382+
id := types.NamespacedName{Namespace: obj.GetNamespace(), Name: obj.GetName()}
383+
if err := h.GetClient().Get(ctx, id, u); err != nil {
384+
t.Fatalf("FAIL: failed to get KRM object: %v", err)
385+
}
386+
387+
normalizer = buildKRMNormalizer(t, u, project, folderID, uniqueID)
388+
if err := normalizer.VisitUnstructured(u); err != nil {
389+
t.Fatalf("FAIL: error from normalizer: %v", err)
390+
}
391+
392+
got, err := yaml.Marshal(u)
393+
if err != nil {
394+
t.Fatalf("FAIL: failed to convert KRM object to yaml: %v", err)
395+
}
396+
expectedPath := filepath.Join(fixture.SourceDir, fmt.Sprintf("_generated_object_%v.golden.yaml", testName))
397+
test.CompareGoldenObject(t, expectedPath, got)
398+
}
399+
400+
// Try to export the resource (and compare against golden file)
378401
exportedYAML := exportResource(h, obj, &Expectations{})
379402
if exportedYAML != "" {
380403
exportedObj := &unstructured.Unstructured{}
381404
if err := yaml.Unmarshal([]byte(exportedYAML), exportedObj); err != nil {
382405
t.Fatalf("FAIL: error from yaml.Unmarshal: %v", err)
383406
}
384-
if err := normalizeKRMObject(t, exportedObj, project, folderID, uniqueID); err != nil {
385-
t.Fatalf("FAIL: error from normalizeObject: %v", err)
407+
408+
// Note: the normalizer for the object has more information, so we reuse that normalizer
409+
if err := normalizer.VisitUnstructured(exportedObj); err != nil {
410+
t.Fatalf("FAIL: error from normalizer: %v", err)
386411
}
412+
387413
got, err := yaml.Marshal(exportedObj)
388414
if err != nil {
389415
t.Fatalf("FAIL: failed to convert KRM object to yaml: %v", err)
@@ -392,23 +418,7 @@ func runScenario(ctx context.Context, t *testing.T, testPause bool, fixture reso
392418
expectedPath := filepath.Join(fixture.SourceDir, fmt.Sprintf("_generated_export_%v.golden", testName))
393419
h.CompareGoldenFile(expectedPath, string(got), IgnoreComments)
394420
}
395-
// Golden test created KRM object
396-
u := &unstructured.Unstructured{}
397-
u.SetGroupVersionKind(obj.GroupVersionKind())
398-
id := types.NamespacedName{Namespace: obj.GetNamespace(), Name: obj.GetName()}
399-
if err := h.GetClient().Get(ctx, id, u); err != nil {
400-
t.Fatalf("FAIL: failed to get KRM object: %v", err)
401-
} else {
402-
if err := normalizeKRMObject(t, u, project, folderID, uniqueID); err != nil {
403-
t.Fatalf("FAIL: error from normalizeObject: %v", err)
404-
}
405-
got, err := yaml.Marshal(u)
406-
if err != nil {
407-
t.Fatalf("FAIL: failed to convert KRM object to yaml: %v", err)
408-
}
409-
expectedPath := filepath.Join(fixture.SourceDir, fmt.Sprintf("_generated_object_%v.golden.yaml", testName))
410-
test.CompareGoldenObject(t, expectedPath, got)
411-
}
421+
412422
}
413423
}
414424

0 commit comments

Comments
 (0)