From d12a1fdb1fd8f77b1351de6393b30fb2b3709f10 Mon Sep 17 00:00:00 2001 From: "Jose R. Gonzalez" Date: Thu, 29 May 2025 10:54:27 -0500 Subject: [PATCH] Add testing - internal/discovery Signed-off-by: Jose R. Gonzalez --- internal/discovery/discovery.go | 7 ++-- internal/discovery/discovery_suite_test.go | 13 +++++++ internal/discovery/discovery_test.go | 42 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 internal/discovery/discovery_suite_test.go create mode 100644 internal/discovery/discovery_test.go diff --git a/internal/discovery/discovery.go b/internal/discovery/discovery.go index 363e60d..bc86c34 100644 --- a/internal/discovery/discovery.go +++ b/internal/discovery/discovery.go @@ -12,7 +12,10 @@ import ( "github.com/opdev/productctl/internal/resource" ) -var ErrDuplicateComponentName = errors.New("duplicate component name") +var ( + ErrDuplicateComponentName = errors.New("duplicate component name") + ErrNoImagesDiscovered = errors.New("no images found in discovery manifest") +) // ComponentsFromDiscoveryManifest converts discovered workloads into Component // declarations. DiscoveredImages are treated as container components. The @@ -20,7 +23,7 @@ var ErrDuplicateComponentName = errors.New("duplicate component name") // user to change before use. func ComponentsFromDiscoveryManifest(manifest discovery.Manifest) ([]*resource.Component, error) { if len(manifest.DiscoveredImages) == 0 { - return nil, errors.New("could not find discovered images in discovery manifest") + return nil, ErrNoImagesDiscovered } processedNames := map[string]any{} diff --git a/internal/discovery/discovery_suite_test.go b/internal/discovery/discovery_suite_test.go new file mode 100644 index 0000000..41fa8d4 --- /dev/null +++ b/internal/discovery/discovery_suite_test.go @@ -0,0 +1,13 @@ +package discovery_test + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestDiscovery(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Discovery Suite") +} diff --git a/internal/discovery/discovery_test.go b/internal/discovery/discovery_test.go new file mode 100644 index 0000000..6c9d638 --- /dev/null +++ b/internal/discovery/discovery_test.go @@ -0,0 +1,42 @@ +package discovery_test + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + libdiscovery "github.com/opdev/productctl/internal/discovery" + + "github.com/opdev/discover-workload/discovery" +) + +var _ = Describe("Discovery", func() { + When("converting workload discovery manifest to component resources", func() { + It("should return an error when discovery manifest contains no entries", func() { + _, err := libdiscovery.ComponentsFromDiscoveryManifest(discovery.Manifest{}) + Expect(err).To(MatchError(libdiscovery.ErrNoImagesDiscovered)) + }) + + It("should return an error for duplicate component names", func() { + manifestWithDuplicateNames := discovery.Manifest{ + DiscoveredImages: []discovery.DiscoveredImage{ + {ContainerName: "component1"}, + {ContainerName: "component1"}, + }, + } + _, err := libdiscovery.ComponentsFromDiscoveryManifest(manifestWithDuplicateNames) + Expect(err).To(MatchError(libdiscovery.ErrDuplicateComponentName)) + }) + + It("should return components for valid manifest", func() { + manifest := discovery.Manifest{ + DiscoveredImages: []discovery.DiscoveredImage{ + {ContainerName: "component1"}, + {ContainerName: "component2"}, + }, + } + components, err := libdiscovery.ComponentsFromDiscoveryManifest(manifest) + Expect(err).NotTo(HaveOccurred()) + Expect(components).To(HaveLen(len(manifest.DiscoveredImages))) + }) + }) +})