Skip to content

Commit 83d95a8

Browse files
Merge pull request #455 from gallettilance/fix-add
Bug 1882479: erroring when replacement not found
2 parents f634a5a + 083c308 commit 83d95a8

File tree

3 files changed

+69
-7
lines changed

3 files changed

+69
-7
lines changed

pkg/registry/populator.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -302,15 +302,11 @@ func (i *DirectoryPopulator) getNextReplacesImagesToAdd(imagesToAdd []*ImageInpu
302302
// no new images can be added, the current iteration aggregates all the
303303
// errors that describe invalid bundles
304304
if pkgFoundImages == 0 && pkgRemainingImages > 0 {
305-
errs = append(errs, utilerrors.NewAggregate(pkgErrs))
305+
errs = append(errs, pkgErrs...)
306306
}
307307
}
308308

309-
if len(errs) > 0 {
310-
return nil, nil, utilerrors.NewAggregate(errs)
311-
}
312-
313-
return foundImages, remainingImages, nil
309+
return foundImages, remainingImages, utilerrors.NewAggregate(errs)
314310
}
315311

316312
func (i *DirectoryPopulator) loadManifestsSemver(bundle *Bundle, annotations *AnnotationsFile, skippatch bool) error {

pkg/registry/populator_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,39 @@ func CheckBundlesHaveContentsIfNoPath(t *testing.T, db *sql.DB) {
686686
}
687687
}
688688

689+
func TestDirectoryPopulator(t *testing.T) {
690+
db, cleanup := CreateTestDb(t)
691+
defer cleanup()
692+
693+
loader, err := sqlite.NewSQLLiteLoader(db)
694+
require.NoError(t, err)
695+
require.NoError(t, loader.Migrate(context.TODO()))
696+
697+
graphLoader, err := sqlite.NewSQLGraphLoaderFromDB(db)
698+
require.NoError(t, err)
699+
700+
query := sqlite.NewSQLLiteQuerierFromDb(db)
701+
702+
populate := func(bundles map[image.Reference]string) error {
703+
return registry.NewDirectoryPopulator(
704+
loader,
705+
graphLoader,
706+
query,
707+
bundles,
708+
make(map[string]map[image.Reference]string),
709+
false).Populate(registry.ReplacesMode)
710+
}
711+
add := map[image.Reference]string{
712+
image.SimpleReference("quay.io/test/etcd.0.9.2"): "../../bundles/etcd.0.9.2",
713+
image.SimpleReference("quay.io/test/prometheus.0.22.2"): "../../bundles/prometheus.0.22.2",
714+
}
715+
expectedErr := errors.NewAggregate([]error{
716+
fmt.Errorf("Invalid bundle %s, bundle specifies a non-existent replacement %s", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"),
717+
fmt.Errorf("Invalid bundle %s, bundle specifies a non-existent replacement %s", "prometheusoperator.0.22.2", "prometheusoperator.0.15.0"),
718+
})
719+
require.ElementsMatch(t, expectedErr, populate(add))
720+
}
721+
689722
func TestDeprecateBundle(t *testing.T) {
690723
type args struct {
691724
bundles []string
@@ -898,6 +931,34 @@ func TestOverwrite(t *testing.T) {
898931
args args
899932
expected expected
900933
}{
934+
{
935+
description: "OverwriteBundle/DefaultBehavior",
936+
args: args{
937+
firstAdd: getBundleRefs([]string{"prometheus.0.14.0"}),
938+
secondAdd: map[image.Reference]string{
939+
image.SimpleReference("quay.io/test/etcd.0.9.2"): "../../bundles/etcd.0.9.2",
940+
image.SimpleReference("quay.io/test/prometheus.0.22.2"): "../../bundles/prometheus.0.22.2",
941+
},
942+
overwrites: nil,
943+
},
944+
expected: expected{
945+
err: errors.NewAggregate([]error{
946+
fmt.Errorf("Invalid bundle %s, bundle specifies a non-existent replacement %s", "etcdoperator.v0.9.2", "etcdoperator.v0.9.0"),
947+
fmt.Errorf("Invalid bundle %s, bundle specifies a non-existent replacement %s", "prometheusoperator.0.22.2", "prometheusoperator.0.15.0"),
948+
}),
949+
remainingBundles: []string{
950+
"quay.io/test/prometheus.0.14.0/preview",
951+
},
952+
remainingPkgChannels: pkgChannel{
953+
"prometheus": []string{
954+
"preview",
955+
},
956+
},
957+
remainingDefaultChannels: map[string]string{
958+
"prometheus": "preview",
959+
},
960+
},
961+
},
901962
{
902963
description: "OverwriteBundle/SimpleCsvChange",
903964
args: args{

pkg/registry/replacesgraphloader.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,10 @@ func (r *ReplacesGraphLoader) CanAdd(bundle *Bundle, graph *Package) (bool, erro
2121
}
2222

2323
// check that the bundle can be added
24-
return graph.HasCsv(replaces), nil
24+
if !graph.HasCsv(replaces) {
25+
return false, fmt.Errorf("Invalid bundle %s, bundle specifies a non-existent replacement %s", bundle.Name, replaces)
26+
}
27+
28+
return true, nil
29+
2530
}

0 commit comments

Comments
 (0)