Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions pkg/payload/render_test.go
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down Expand Up @@ -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, ", "))
}
})
}
}