From bd3fbf52061f441276e21bfb580e0956eb397575 Mon Sep 17 00:00:00 2001 From: Evan Cordell Date: Wed, 1 May 2019 15:48:26 -0400 Subject: [PATCH] feat(load): validate that packages have a default channel when loading return an error if they don't --- manifests/etcd/etcd.package.yaml | 3 +++ pkg/server/server_test.go | 28 ++++++++++++++++++++++++++++ pkg/sqlite/directory_test.go | 11 +++++++++-- pkg/sqlite/load.go | 5 +++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/manifests/etcd/etcd.package.yaml b/manifests/etcd/etcd.package.yaml index 6d324d387..cf900384a 100644 --- a/manifests/etcd/etcd.package.yaml +++ b/manifests/etcd/etcd.package.yaml @@ -3,3 +3,6 @@ packageName: etcd channels: - name: alpha currentCSV: etcdoperator.v0.9.2 +- name: beta + currentCSV: etcdoperator.v0.9.0 +defaultChannel: alpha diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index 3a5548b88..0b54315ee 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -106,6 +106,10 @@ func TestGetPackage(t *testing.T) { Name: "alpha", CsvName: "etcdoperator.v0.9.2", }, + { + Name: "beta", + CsvName: "etcdoperator.v0.9.0", + }, }, DefaultChannelName: "alpha", } @@ -188,6 +192,12 @@ func TestGetChannelEntriesThatReplace(t *testing.T) { BundleName: "etcdoperator.v0.9.0", Replaces: "etcdoperator.v0.6.1", }, + { + PackageName: "etcd", + ChannelName: "beta", + BundleName: "etcdoperator.v0.9.0", + Replaces: "etcdoperator.v0.6.1", + }, } require.ElementsMatch(t, expected, channelEntries) @@ -288,6 +298,18 @@ func TestGetChannelEntriesThatProvide(t *testing.T) { BundleName: "etcdoperator.v0.9.2", Replaces: "etcdoperator.v0.9.0", }, + { + PackageName: "etcd", + ChannelName: "beta", + BundleName: "etcdoperator.v0.6.1", + Replaces: "", + }, + { + PackageName: "etcd", + ChannelName: "beta", + BundleName: "etcdoperator.v0.9.0", + Replaces: "etcdoperator.v0.6.1", + }, } require.ElementsMatch(t, expected, channelEntries) @@ -327,6 +349,12 @@ func TestGetLatestChannelEntriesThatProvide(t *testing.T) { BundleName: "etcdoperator.v0.9.2", Replaces: "etcdoperator.v0.9.0", }, + { + PackageName: "etcd", + ChannelName: "beta", + BundleName: "etcdoperator.v0.9.0", + Replaces: "etcdoperator.v0.6.1", + }, } require.ElementsMatch(t, expected, channelEntries) diff --git a/pkg/sqlite/directory_test.go b/pkg/sqlite/directory_test.go index 5aded7cf7..a5ccd8c4c 100644 --- a/pkg/sqlite/directory_test.go +++ b/pkg/sqlite/directory_test.go @@ -47,6 +47,10 @@ func TestQuerierForDirectory(t *testing.T) { Name: "alpha", CurrentCSVName: "etcdoperator.v0.9.2", }, + { + Name: "beta", + CurrentCSVName: "etcdoperator.v0.9.0", + }, }, }, etcdPackage) @@ -72,11 +76,14 @@ func TestQuerierForDirectory(t *testing.T) { {"etcd", "alpha", "etcdoperator.v0.6.1", ""}, {"etcd", "alpha", "etcdoperator.v0.9.0", "etcdoperator.v0.6.1"}, {"etcd", "alpha", "etcdoperator.v0.9.2", "etcdoperator.v0.9.1"}, - {"etcd", "alpha", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"}}, etcdChannelEntriesThatProvide) + {"etcd", "alpha", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"}, + {"etcd", "beta", "etcdoperator.v0.6.1", ""}, + {"etcd", "beta", "etcdoperator.v0.9.0", "etcdoperator.v0.6.1"}}, etcdChannelEntriesThatProvide) etcdLatestChannelEntriesThatProvide, err := store.GetLatestChannelEntriesThatProvide(context.TODO(), "etcd.database.coreos.com", "v1beta2", "EtcdCluster") require.NoError(t, err) - require.ElementsMatch(t, []*registry.ChannelEntry{{"etcd", "alpha", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"}}, etcdLatestChannelEntriesThatProvide) + require.ElementsMatch(t, []*registry.ChannelEntry{{"etcd", "alpha", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"}, + {"etcd", "beta", "etcdoperator.v0.9.0", "etcdoperator.v0.6.1"}}, etcdLatestChannelEntriesThatProvide) etcdBundleByProvides, entry, err := store.GetBundleThatProvides(context.TODO(), "etcd.database.coreos.com", "v1beta2", "EtcdCluster") require.NoError(t, err) diff --git a/pkg/sqlite/load.go b/pkg/sqlite/load.go index 47163d24b..966ae0202 100644 --- a/pkg/sqlite/load.go +++ b/pkg/sqlite/load.go @@ -130,16 +130,21 @@ func (s *SQLLoader) AddPackageChannels(manifest registry.PackageManifest) error } defer addChannel.Close() + hasDefault := false for _, c := range manifest.Channels { if _, err := addChannel.Exec(c.Name, manifest.PackageName, c.CurrentCSVName); err != nil { return err } if c.IsDefaultChannel(manifest) { + hasDefault = true if _, err := addDefaultChannel.Exec(c.Name, manifest.PackageName); err != nil { return err } } } + if !hasDefault { + return fmt.Errorf("no default channel specified for %s", manifest.PackageName) + } addChannelEntry, err := tx.Prepare("insert into channel_entry(channel_name, package_name, operatorbundle_name, depth) values(?, ?, ?, ?)") if err != nil {