diff --git a/pkg/payload/render_test.go b/pkg/payload/render_test.go index efaafc427..78f767af9 100644 --- a/pkg/payload/render_test.go +++ b/pkg/payload/render_test.go @@ -1,11 +1,16 @@ package payload import ( + "bytes" + "fmt" "os" + "path/filepath" "strings" "testing" "github.com/google/go-cmp/cmp" + + "github.com/openshift/library-go/pkg/manifest" ) func TestRenderManifest(t *testing.T) { @@ -58,3 +63,79 @@ func TestRenderManifest(t *testing.T) { }) } } + +func Test_cvoManifests(t *testing.T) { + config := manifestRenderConfig{ + ReleaseImage: "quay.io/cvo/release:latest", + ClusterProfile: "some-profile", + } + + tests := []struct { + name string + dir string + }{ + { + name: "install dir", + dir: filepath.Join("../../install"), + }, + { + name: "bootstrap dir", + dir: filepath.Join("../../bootstrap"), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + files, err := os.ReadDir(tt.dir) + if err != nil { + t.Fatalf("failed to read directory: %v", err) + } + + if len(files) == 0 { + t.Fatalf("no files found in %s", tt.dir) + } + + var manifestsWithoutIncludeAnnotation []manifest.Manifest + const prefix = "include.release.openshift.io/" + for _, manifestFile := range files { + if manifestFile.IsDir() { + continue + } + filePath := filepath.Join(tt.dir, manifestFile.Name()) + data, err := os.ReadFile(filePath) + if err != nil { + t.Fatalf("failed to read manifest file: %v", err) + } + data, err = renderManifest(config, data) + if err != nil { + t.Fatalf("failed to render manifest: %v", err) + } + manifests, err := manifest.ParseManifests(bytes.NewReader(data)) + if err != nil { + t.Fatalf("failed to load manifests: %v", err) + } + + for _, m := range manifests { + m.OriginalFilename = filePath + var found bool + for k := range m.Obj.GetAnnotations() { + if strings.HasPrefix(k, prefix) { + found = true + break + } + } + if !found { + manifestsWithoutIncludeAnnotation = append(manifestsWithoutIncludeAnnotation, m) + } + } + } + + if len(manifestsWithoutIncludeAnnotation) > 0 { + var messages []string + for _, m := range manifestsWithoutIncludeAnnotation { + messages = append(messages, fmt.Sprintf("%s/%s/%s/%s", m.OriginalFilename, m.GVK, m.Obj.GetName(), m.Obj.GetNamespace())) + } + t.Fatalf("Those manifests have no annotation with prefix %q and will not be installed by CVO: %s", prefix, strings.Join(messages, ", ")) + } + }) + } +}