From d1bb836321a6662a65d29e1f87e1f54512421dfd Mon Sep 17 00:00:00 2001 From: JasonPowr Date: Tue, 26 Aug 2025 12:49:33 +0100 Subject: [PATCH 1/3] ci: add structural tests for policy controller operator --- .../policy_controller/fbc_images_test.go | 115 +++++++++++++++ .../policy_controller/operator_images_test.go | 132 ++++++++++++++++++ .../pco_acceptance_suite_test.go | 18 +++ .../policy_controller/releases_images_test.go | 43 ++++++ .../{ => rhtas}/ansible_images_test.go | 0 .../{ => rhtas}/client_server_test.go | 0 .../acceptance/{ => rhtas}/fbc_images_test.go | 0 .../{ => rhtas}/operator_images_test.go | 2 +- .../{ => rhtas}/releases_images_test.go | 0 .../{ => rhtas}/tas_acceptance_suite_test.go | 0 test/support/acceptance.go | 20 +++ test/support/image_utils.go | 7 +- test/support/snapshot_map_type.go | 2 +- test/support/test_constants.go | 32 +++-- 14 files changed, 358 insertions(+), 13 deletions(-) create mode 100644 test/acceptance/policy_controller/fbc_images_test.go create mode 100644 test/acceptance/policy_controller/operator_images_test.go create mode 100644 test/acceptance/policy_controller/pco_acceptance_suite_test.go create mode 100644 test/acceptance/policy_controller/releases_images_test.go rename test/acceptance/{ => rhtas}/ansible_images_test.go (100%) rename test/acceptance/{ => rhtas}/client_server_test.go (100%) rename test/acceptance/{ => rhtas}/fbc_images_test.go (100%) rename test/acceptance/{ => rhtas}/operator_images_test.go (98%) rename test/acceptance/{ => rhtas}/releases_images_test.go (100%) rename test/acceptance/{ => rhtas}/tas_acceptance_suite_test.go (100%) diff --git a/test/acceptance/policy_controller/fbc_images_test.go b/test/acceptance/policy_controller/fbc_images_test.go new file mode 100644 index 0000000..2be958e --- /dev/null +++ b/test/acceptance/policy_controller/fbc_images_test.go @@ -0,0 +1,115 @@ +package acceptance + +import ( + "context" + "fmt" + "os" + "strings" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/securesign/structural-tests/test/support" + "github.com/securesign/structural-tests/test/support/olm" +) + +const ( + olmPackage = "policy-controller-operator" + operatorBundleImage = "registry.redhat.io/rhtas/policy-controller-operator-bundle" + fbcCatalogFileName = "catalog.json" + fbcCatalogPath = "/configs/policy-controller-operator/catalog.json" + defaultChannel = "tech-preview" +) + +var expectedChannels = []string{"tech-preview"} + +var _ = Describe("File-based catalog images", Ordered, func() { + + defer GinkgoRecover() + var ocps []TableEntry + var bundleImage string + + snapshotData, err := support.ParseSnapshotData() + Expect(err).NotTo(HaveOccurred()) + for key, snapshotImage := range snapshotData.Images { + if strings.Index(key, "pco-fbc-") == 0 { + ocps = append(ocps, Entry(key, key, snapshotImage)) + } + } + Expect(ocps).NotTo(BeEmpty()) + + bundleImage = snapshotData.Images[support.PolicyControllerOperatorBundleImageKey] + + DescribeTableSubtree("ocp", + func(key, fbcImage string) { + + var bundles []olm.Bundle + var channels []olm.Channel + var packages []olm.Package + + It("extract catalog.json", func() { + dir, err := os.MkdirTemp("", key) + Expect(err).NotTo(HaveOccurred()) + defer os.RemoveAll(dir) + + Expect(support.FileFromImage(context.Background(), fbcImage, fbcCatalogPath, dir)).To(Succeed()) + file, err := os.Open(dir + "/" + fbcCatalogFileName) + Expect(err).NotTo(HaveOccurred()) + defer file.Close() + + catalog, err := olm.ParseCatalogJSON(file) + Expect(err).NotTo(HaveOccurred()) + Expect(catalog).NotTo(BeNil()) + + for _, obj := range catalog { + switch typedObj := obj.(type) { + case olm.Bundle: + bundles = append(bundles, typedObj) + case olm.Channel: + channels = append(channels, typedObj) + case olm.Package: + packages = append(packages, typedObj) + } + } + + Expect(bundles).ToNot(BeEmpty()) + Expect(channels).ToNot(BeEmpty()) + Expect(packages).ToNot(BeEmpty()) + }) + + It("extract bundle-image from snapshot.json", func() { + snapshotData, err := support.ParseSnapshotData() + Expect(err).NotTo(HaveOccurred()) + Expect(snapshotData.Images).NotTo(BeEmpty()) + + }) + + It("verify package", func() { + for _, p := range packages { + Expect(p.Name).To(Equal(olmPackage)) + Expect(p.DefaultChannel).To(Equal(defaultChannel)) + } + }) + + It("verify channels", func() { + Expect(channels).To(HaveLen(len(expectedChannels))) + + for _, channel := range channels { + Expect(channel.Package).To(Equal(olmPackage)) + Expect(expectedChannels).To(ContainElement(channel.Name)) + } + }) + + It("contains operator-bundle", func() { + bundleImageHash := support.ExtractHash(bundleImage) + exists := false + + for _, bundle := range bundles { + Expect(bundle.Package).To(Equal(olmPackage)) + if bundle.Image == fmt.Sprintf("%s@sha256:%s", operatorBundleImage, bundleImageHash) { + exists = true + } + } + Expect(exists).To(BeTrue(), fmt.Sprintf("olm bundle with %s hash not found", bundleImageHash)) + }) + }, ocps) +}) diff --git a/test/acceptance/policy_controller/operator_images_test.go b/test/acceptance/policy_controller/operator_images_test.go new file mode 100644 index 0000000..f4259b3 --- /dev/null +++ b/test/acceptance/policy_controller/operator_images_test.go @@ -0,0 +1,132 @@ +package acceptance + +import ( + "context" + "errors" + "fmt" + "log" + "os" + "path/filepath" + "regexp" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/securesign/structural-tests/test/support" +) + +var ErrNotFoundInRegistry = errors.New("not found in registry") + +var _ = Describe("Policy Controller Operator", Ordered, func() { + + var ( + snapshotData support.SnapshotData + repositories *support.RepositoryList + operatorPcoImages support.OperatorMap + operatorOtherImages support.OperatorMap + operator string + ) + + BeforeAll(func() { + var err error + snapshotData, err = support.ParseSnapshotData() + Expect(err).NotTo(HaveOccurred()) + Expect(snapshotData.Images).NotTo(BeEmpty(), "No images were detected in snapshot file") + + repositories, err = support.LoadRepositoryList() + Expect(err).NotTo(HaveOccurred()) + Expect(repositories.Data).NotTo(BeEmpty(), "No images were detected in repositories file") + }) + + It("get operator image", func() { + operator = snapshotData.Images[support.PolicyControllerOperatorImageKey] + Expect(operator).NotTo(BeEmpty(), "Operator image not detected in snapshot file") + log.Printf("Using %s\n", operator) + }) + + It("get all PCO images used by this operator", func() { + valuesFile, err := support.RunImage(operator, []string{"cat"}, []string{"helm-charts/policy-controller-operator/values.yaml"}) + Expect(err).NotTo(HaveOccurred()) + + operatorPcoImages, operatorOtherImages = support.ParsePCOperatorImages(valuesFile) + Expect(operatorPcoImages).NotTo(BeEmpty()) + Expect(operatorOtherImages).NotTo(BeEmpty()) + support.LogMap(fmt.Sprintf("Operator Pco images (%d):", len(operatorPcoImages)), operatorPcoImages) + support.LogMap(fmt.Sprintf("Operator other images (%d):", len(operatorOtherImages)), operatorOtherImages) + }) + + It("operator images are listed in registry.redhat.io", func() { + var errs []error + for _, image := range operatorPcoImages { + if repositories.FindByImage(image) == nil { + errs = append(errs, fmt.Errorf("%w: %s", ErrNotFoundInRegistry, image)) + } + } + Expect(errs).To(BeEmpty()) + }) + + It("operator PCO images are all valid", func() { + Expect(support.GetMapKeys(operatorPcoImages)).To(ContainElements(support.MandatoryPcoOperatorImageKeys())) + Expect(len(operatorPcoImages)).To(BeNumerically("==", len(support.MandatoryPcoOperatorImageKeys()))) + Expect(operatorPcoImages).To(HaveEach(MatchRegexp(support.TasImageDefinitionRegexp))) + }) + + It("operator other images are all valid", func() { + Expect(support.GetMapKeys(operatorOtherImages)).To(ContainElements(support.OtherPCOOperatorImageKeys())) + Expect(len(operatorOtherImages)).To(BeNumerically("==", len(support.OtherPCOOperatorImageKeys()))) + Expect(operatorOtherImages).To(HaveEach(MatchRegexp(support.OtherImageDefinitionRegexp))) + }) + + It("all image hashes are also defined in releases snapshot", func() { + mapped := make(map[string]string) + for _, imageKey := range support.MandatoryPcoOperatorImageKeys() { + oSha := support.ExtractHash(operatorPcoImages[imageKey]) + if _, keyExist := snapshotData.Images[imageKey]; !keyExist { + mapped[imageKey] = "MISSING" + continue + } + sSha := support.ExtractHash(snapshotData.Images[imageKey]) + if oSha == sSha { + mapped[imageKey] = "match" + } else { + mapped[imageKey] = "DIFFERENT HASHES" + } + } + Expect(mapped).To(HaveEach("match"), "Operator images are missing or have different hashes in snapshot file") + }) + + It("image hashes are all unique", func() { + operatorHashes := support.ExtractHashes(support.GetMapValues(operatorPcoImages)) + mapped := make(map[string]int) + for _, hash := range operatorHashes { + _, exist := mapped[hash] + if exist { + mapped[hash]++ + } else { + mapped[hash] = 1 + } + } + Expect(mapped).To(HaveEach(1)) + Expect(operatorPcoImages).To(HaveLen(len(mapped))) + }) + + It("operator-bundle use the right operator", func() { + dir, err := os.MkdirTemp("", "bundle") + Expect(err).NotTo(HaveOccurred()) + defer os.RemoveAll(dir) + + Expect(support.FileFromImage( + context.Background(), + snapshotData.Images[support.PolicyControllerOperatorBundleImageKey], + support.PolicyControllerOperatorBundleClusterServiceVersionPath, dir), + ).To(Succeed()) + fileContent, err := os.ReadFile(filepath.Join(dir, support.PolicyControllerOperatorBundleClusterServiceVersionFile)) + Expect(err).NotTo(HaveOccurred()) + Expect(fileContent).NotTo(BeEmpty()) + + operatorHash := support.ExtractHash(snapshotData.Images[support.PolicyControllerOperatorImageKey]) + re := regexp.MustCompile(`(\w+:\s*[\w./-]+operator[\w-]*@sha256:` + operatorHash + `)`) + matches := re.FindAllString(string(fileContent), -1) + Expect(matches).NotTo(BeEmpty()) + support.LogArray("Operator images found in operator-bundle:", matches) + }) +}) diff --git a/test/acceptance/policy_controller/pco_acceptance_suite_test.go b/test/acceptance/policy_controller/pco_acceptance_suite_test.go new file mode 100644 index 0000000..ee22991 --- /dev/null +++ b/test/acceptance/policy_controller/pco_acceptance_suite_test.go @@ -0,0 +1,18 @@ +package acceptance + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/format" + "sigs.k8s.io/controller-runtime/pkg/log" +) + +func TestAcceptance(t *testing.T) { + format.MaxLength = 0 + + RegisterFailHandler(Fail) + log.SetLogger(GinkgoLogr) + RunSpecs(t, "Policy Controller Acceptance Tests Suite") +} diff --git a/test/acceptance/policy_controller/releases_images_test.go b/test/acceptance/policy_controller/releases_images_test.go new file mode 100644 index 0000000..9676262 --- /dev/null +++ b/test/acceptance/policy_controller/releases_images_test.go @@ -0,0 +1,43 @@ +package acceptance + +import ( + "fmt" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/securesign/structural-tests/test/support" +) + +var _ = Describe("Policy Controller Operator Releases", Ordered, func() { + + var ( + snapshotData support.SnapshotData + ) + + It("snapshot.json file exist and is parseable", func() { + var err error + snapshotData, err = support.ParseSnapshotData() + Expect(err).NotTo(HaveOccurred()) + support.LogMap(fmt.Sprintf("Snapshot images (%d):", len(snapshotData.Images)), snapshotData.Images) + Expect(snapshotData.Images).NotTo(BeEmpty(), "No images were detected in snapshot file") + }) + + It("snapshot.json file contains valid images", func() { + Expect(snapshotData.Images).To(HaveEach(MatchRegexp(support.SnapshotImageDefinitionRegexp))) + }) + + It("snapshot.json file image snapshots are all unique", func() { + snapshotHashes := support.ExtractHashes(support.GetMapValues(snapshotData.Images)) + mapped := make(map[string]int) + for _, hash := range snapshotHashes { + _, exist := mapped[hash] + if exist { + mapped[hash]++ + } else { + mapped[hash] = 1 + } + } + Expect(mapped).To(HaveEach(1)) + Expect(len(snapshotData.Images)).To(BeNumerically("==", len(mapped))) + }) +}) diff --git a/test/acceptance/ansible_images_test.go b/test/acceptance/rhtas/ansible_images_test.go similarity index 100% rename from test/acceptance/ansible_images_test.go rename to test/acceptance/rhtas/ansible_images_test.go diff --git a/test/acceptance/client_server_test.go b/test/acceptance/rhtas/client_server_test.go similarity index 100% rename from test/acceptance/client_server_test.go rename to test/acceptance/rhtas/client_server_test.go diff --git a/test/acceptance/fbc_images_test.go b/test/acceptance/rhtas/fbc_images_test.go similarity index 100% rename from test/acceptance/fbc_images_test.go rename to test/acceptance/rhtas/fbc_images_test.go diff --git a/test/acceptance/operator_images_test.go b/test/acceptance/rhtas/operator_images_test.go similarity index 98% rename from test/acceptance/operator_images_test.go rename to test/acceptance/rhtas/operator_images_test.go index 12aa77a..6bc746c 100644 --- a/test/acceptance/operator_images_test.go +++ b/test/acceptance/rhtas/operator_images_test.go @@ -44,7 +44,7 @@ var _ = Describe("Trusted Artifact Signer Operator", Ordered, func() { }) It("get all TAS images used by this operator", func() { - helpLogs, err := support.RunImage(operator, []string{"-h"}) + helpLogs, err := support.RunImage(operator, []string{"/manager"}, []string{"-h"}) Expect(err).NotTo(HaveOccurred()) operatorTasImages, operatorOtherImages = support.ParseOperatorImages(helpLogs) diff --git a/test/acceptance/releases_images_test.go b/test/acceptance/rhtas/releases_images_test.go similarity index 100% rename from test/acceptance/releases_images_test.go rename to test/acceptance/rhtas/releases_images_test.go diff --git a/test/acceptance/tas_acceptance_suite_test.go b/test/acceptance/rhtas/tas_acceptance_suite_test.go similarity index 100% rename from test/acceptance/tas_acceptance_suite_test.go rename to test/acceptance/rhtas/tas_acceptance_suite_test.go diff --git a/test/support/acceptance.go b/test/support/acceptance.go index 411959a..ab5c5cc 100644 --- a/test/support/acceptance.go +++ b/test/support/acceptance.go @@ -49,6 +49,26 @@ func ParseOperatorImages(helpContent string) (OperatorMap, OperatorMap) { return operatorTasImages, operatorOtherImages } +func ParsePCOperatorImages(valuesFile string) (OperatorMap, OperatorMap) { + imageRegex := regexp.MustCompile(`repository:\s*([^\s]+)[\s\S]+?version:\s*([^\s]+)[\s\S]+?`) + matches := imageRegex.FindAllStringSubmatch(valuesFile, -1) + operatorPcoImages := make(OperatorMap) + operatorOtherImages := make(OperatorMap) + for _, match := range matches { + if len(match) < 3 { + continue + } + repo, version := match[1], match[2] + switch { + case strings.Contains(repo, "registry.redhat.io/rhtas/policy-controller-rhel9"): + operatorPcoImages["policy-controller-image"] = fmt.Sprintf("%s@%s", repo, version) + case strings.Contains(repo, "registry.redhat.io/openshift4/ose-cli"): + operatorOtherImages["ose-cli-image"] = fmt.Sprintf("%s@sha256:%s", repo, version) + } + } + return operatorPcoImages, operatorOtherImages +} + func MapAnsibleImages(ansibleDefinitionFileContent []byte) (AnsibleMap, error) { var ansibleImages AnsibleMap err := yaml.Unmarshal(ansibleDefinitionFileContent, &ansibleImages) diff --git a/test/support/image_utils.go b/test/support/image_utils.go index 5bc9642..dfb93e8 100644 --- a/test/support/image_utils.go +++ b/test/support/image_utils.go @@ -54,7 +54,7 @@ func PullImageIfNotPresentLocally(ctx context.Context, imageDefinition string) e return fmt.Errorf("failed to inspect image: %w", err) } -func RunImage(imageDefinition string, commands []string) (string, error) { +func RunImage(imageDefinition string, entrypoint, commands []string) (string, error) { ctx := context.TODO() err := PullImageIfNotPresentLocally(ctx, imageDefinition) if err != nil { @@ -68,8 +68,9 @@ func RunImage(imageDefinition string, commands []string) (string, error) { } resp, err := cli.ContainerCreate(ctx, &container.Config{ - Image: imageDefinition, - Cmd: commands, + Image: imageDefinition, + Entrypoint: entrypoint, + Cmd: commands, }, nil, nil, nil, "") if err != nil { return "", fmt.Errorf("failed while creating container: %w", err) diff --git a/test/support/snapshot_map_type.go b/test/support/snapshot_map_type.go index 0413162..31a3574 100644 --- a/test/support/snapshot_map_type.go +++ b/test/support/snapshot_map_type.go @@ -11,7 +11,7 @@ type SnapshotData struct { Others map[string]string } -var imageRegexp = regexp.MustCompile(`^(fbc-[\w-]+|[\w-]+-image)$`) +var imageRegexp = regexp.MustCompile(`^(fbc-[\w-]+|pco-fbc-[\w-]+|[\w-]+-image)$`) func (data *SnapshotData) UnmarshalJSON(b []byte) error { var raw map[string]interface{} diff --git a/test/support/test_constants.go b/test/support/test_constants.go index 096d4a5..4e3b03c 100644 --- a/test/support/test_constants.go +++ b/test/support/test_constants.go @@ -7,14 +7,18 @@ const ( EnvTestGithubToken = "TEST_GITHUB_TOKEN" // #nosec G101 EnvVersion = "VERSION" - OperatorImageKey = "rhtas-operator-image" - OperatorBundleImageKey = "rhtas-operator-bundle-image" - AnsibleCollectionKey = "artifact-signer-ansible.collection.url" - - AnsibleCollectionSnapshotFile = "roles/tas_single_node/defaults/main.yml" - AnsibleArtifactsURL = "https://api.github.com/repos/securesign/artifact-signer-ansible/actions/artifacts" - OperatorBundleClusterServiceVersionFile = "rhtas-operator.clusterserviceversion.yaml" - OperatorBundleClusterServiceVersionPath = "manifests/" + OperatorBundleClusterServiceVersionFile + PolicyControllerOperatorImageKey = "policy-controller-operator-image" + PolicyControllerOperatorBundleImageKey = "policy-controller-operator-bundle-image" + OperatorImageKey = "rhtas-operator-image" + OperatorBundleImageKey = "rhtas-operator-bundle-image" + AnsibleCollectionKey = "artifact-signer-ansible.collection.url" + + AnsibleCollectionSnapshotFile = "roles/tas_single_node/defaults/main.yml" + AnsibleArtifactsURL = "https://api.github.com/repos/securesign/artifact-signer-ansible/actions/artifacts" + OperatorBundleClusterServiceVersionFile = "rhtas-operator.clusterserviceversion.yaml" + PolicyControllerOperatorBundleClusterServiceVersionFile = "policy-controller-operator.clusterserviceversion.yaml" + OperatorBundleClusterServiceVersionPath = "manifests/" + OperatorBundleClusterServiceVersionFile + PolicyControllerOperatorBundleClusterServiceVersionPath = "manifests/" + PolicyControllerOperatorBundleClusterServiceVersionFile TasImageDefinitionRegexp = `^registry.redhat.io/rhtas/[\w/-]+@sha256:\w{64}$` OtherImageDefinitionRegexp = `^(registry.redhat.io|registry.access.redhat.com)` @@ -50,6 +54,18 @@ func MandatoryTasOperatorImageKeys() []string { } } +func MandatoryPcoOperatorImageKeys() []string { + return []string{ + "policy-controller-image", + } +} + +func OtherPCOOperatorImageKeys() []string { + return []string{ + "ose-cli-image", + } +} + func OtherOperatorImageKeys() []string { return []string{ "trillian-netcat-image", From e066c5101a5173e2a186db6b6c77ba3f51c51f47 Mon Sep 17 00:00:00 2001 From: JasonPowr Date: Tue, 26 Aug 2025 14:19:55 +0100 Subject: [PATCH 2/3] docs: update read me --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 33f6e7f..d099c89 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Securesign project structural and acceptance tests. Based on * Securesign releases: https://github.com/securesign/releases * Securesign operator: https://github.com/securesign/secure-sign-operator * Securesign Ansible collection: https://github.com/securesign/artifact-signer-ansible +* Policy Controller operator: https://github.com/securesign/policy-controller-operator ## Automation Current automation is done via Github actions here: https://github.com/securesign/releases/actions/workflows/structural.yml @@ -37,23 +38,28 @@ Run tests based on a github file: SNAPSHOT=https://raw.githubusercontent.com/securesign/releases/refs/heads/feat/release-1.1.1/1.1.1/stable/snapshot.json \ TEST_GITHUB_TOKEN=ghp_Ae \ - go test -v ./test/... --ginkgo.v + go test -v ./test/acceptance/rhtas/... --ginkgo.v Run the same tests on a local (cloned) file: SNAPSHOT=../releases/1.1.1/stable/snapshot.json \ - go test -v ./test/... --ginkgo.v + go test -v ./test/acceptance/rhtas/... --ginkgo.v Force different ansible collection instead of the one defined in ``snapshot.json`` file. This may be useful, when checking ansible collection not yet published: SNAPSHOT=../releases/1.1.1/stable/snapshot.json \ ANSIBLE=https://api.github.com/repos/securesign/artifact-signer-ansible/actions/artifacts/2442056100/zip \ - go test -v ./test/... --ginkgo.v + go test -v ./test/acceptance/rhtas/... --ginkgo.v To run just individual test use ``--ginkgo.fokus-file`` parameter: SNAPSHOT=../releases/1.1.1/stable/snapshot.json \ - go test -v ./test/... --ginkgo.v --ginkgo.focus-file "ansible" + go test -v ./test/acceptance/rhtas/... --ginkgo.v --ginkgo.focus-file "ansible" + +To run policy controller operator tests use: +``` +go test -v ./test/acceptance/policy_controller/... --ginkgo.v +``` ## Repository List The [repositories.json](testdata/repositories.json) file is used to check of all images are published correctly. To pull the list of repositories from Pyxis API: From c7fc9b34bb2499b2ff31f72ad94f5d5473c499aa Mon Sep 17 00:00:00 2001 From: JasonPowr Date: Tue, 26 Aug 2025 15:22:58 +0100 Subject: [PATCH 3/3] refactor: fix linter issues --- .../policy_controller/fbc_images_test.go | 3 +-- test/acceptance/rhtas/operator_images_test.go | 2 +- test/support/acceptance.go | 3 ++- test/support/image_utils.go | 14 +++++++++----- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/test/acceptance/policy_controller/fbc_images_test.go b/test/acceptance/policy_controller/fbc_images_test.go index 2be958e..e5b32b9 100644 --- a/test/acceptance/policy_controller/fbc_images_test.go +++ b/test/acceptance/policy_controller/fbc_images_test.go @@ -20,8 +20,6 @@ const ( defaultChannel = "tech-preview" ) -var expectedChannels = []string{"tech-preview"} - var _ = Describe("File-based catalog images", Ordered, func() { defer GinkgoRecover() @@ -91,6 +89,7 @@ var _ = Describe("File-based catalog images", Ordered, func() { }) It("verify channels", func() { + expectedChannels := []string{"tech-preview"} Expect(channels).To(HaveLen(len(expectedChannels))) for _, channel := range channels { diff --git a/test/acceptance/rhtas/operator_images_test.go b/test/acceptance/rhtas/operator_images_test.go index 6bc746c..37eefae 100644 --- a/test/acceptance/rhtas/operator_images_test.go +++ b/test/acceptance/rhtas/operator_images_test.go @@ -44,7 +44,7 @@ var _ = Describe("Trusted Artifact Signer Operator", Ordered, func() { }) It("get all TAS images used by this operator", func() { - helpLogs, err := support.RunImage(operator, []string{"/manager"}, []string{"-h"}) + helpLogs, err := support.RunImage(operator, []string{}, []string{"-h"}) Expect(err).NotTo(HaveOccurred()) operatorTasImages, operatorOtherImages = support.ParseOperatorImages(helpLogs) diff --git a/test/support/acceptance.go b/test/support/acceptance.go index ab5c5cc..3b2c50b 100644 --- a/test/support/acceptance.go +++ b/test/support/acceptance.go @@ -50,12 +50,13 @@ func ParseOperatorImages(helpContent string) (OperatorMap, OperatorMap) { } func ParsePCOperatorImages(valuesFile string) (OperatorMap, OperatorMap) { + const minMatchLength = 3 imageRegex := regexp.MustCompile(`repository:\s*([^\s]+)[\s\S]+?version:\s*([^\s]+)[\s\S]+?`) matches := imageRegex.FindAllStringSubmatch(valuesFile, -1) operatorPcoImages := make(OperatorMap) operatorOtherImages := make(OperatorMap) for _, match := range matches { - if len(match) < 3 { + if len(match) < minMatchLength { continue } repo, version := match[1], match[2] diff --git a/test/support/image_utils.go b/test/support/image_utils.go index dfb93e8..72dbf12 100644 --- a/test/support/image_utils.go +++ b/test/support/image_utils.go @@ -67,11 +67,15 @@ func RunImage(imageDefinition string, entrypoint, commands []string) (string, er return "", fmt.Errorf("error while initializing docker client: %w", err) } - resp, err := cli.ContainerCreate(ctx, &container.Config{ - Image: imageDefinition, - Entrypoint: entrypoint, - Cmd: commands, - }, nil, nil, nil, "") + config := &container.Config{ + Image: imageDefinition, + Cmd: commands, + } + if len(entrypoint) > 0 { + config.Entrypoint = entrypoint + } + + resp, err := cli.ContainerCreate(ctx, config, nil, nil, nil, "") if err != nil { return "", fmt.Errorf("failed while creating container: %w", err) }