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))) + }) + }) +})