Skip to content

Commit ca95325

Browse files
authored
Remove provides+required GVK and modify/remove associated tests (#408)
* Remove provides+required GVK and modify/remove associated tests Signed-off-by: dtfranz <[email protected]> * Add missing tests for bundle properties Signed-off-by: dtfranz <[email protected]> --------- Signed-off-by: dtfranz <[email protected]>
1 parent dd0dfaf commit ca95325

File tree

8 files changed

+219
-275
lines changed

8 files changed

+219
-275
lines changed

internal/catalogmetadata/filter/bundle_predicates.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,6 @@ func InChannel(channelName string) Predicate[catalogmetadata.Bundle] {
5252
}
5353
}
5454

55-
func ProvidesGVK(gvk *catalogmetadata.GVK) Predicate[catalogmetadata.Bundle] {
56-
return func(bundle *catalogmetadata.Bundle) bool {
57-
providedGVKs, err := bundle.ProvidedGVKs()
58-
if err != nil {
59-
return false
60-
}
61-
for i := 0; i < len(providedGVKs); i++ {
62-
providedGVK := &providedGVKs[i]
63-
if providedGVK.String() == gvk.String() {
64-
return true
65-
}
66-
}
67-
return false
68-
}
69-
}
70-
7155
func WithBundleImage(bundleImage string) Predicate[catalogmetadata.Bundle] {
7256
return func(bundle *catalogmetadata.Bundle) bool {
7357
return bundle.Image == bundleImage

internal/catalogmetadata/filter/bundle_predicates_test.go

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -114,34 +114,6 @@ func TestInChannel(t *testing.T) {
114114
assert.False(t, f(b3))
115115
}
116116

117-
func TestProvidesGVK(t *testing.T) {
118-
b1 := &catalogmetadata.Bundle{Bundle: declcfg.Bundle{
119-
Properties: []property.Property{
120-
{
121-
Type: property.TypeGVK,
122-
Value: json.RawMessage(`[{"group":"foo.io","kind":"Foo","version":"v1"},{"group":"bar.io","kind":"Bar","version":"v1"}]`),
123-
},
124-
},
125-
}}
126-
b2 := &catalogmetadata.Bundle{Bundle: declcfg.Bundle{}}
127-
f1 := filter.ProvidesGVK(&catalogmetadata.GVK{
128-
Group: "foo.io",
129-
Version: "v1",
130-
Kind: "Foo",
131-
})
132-
f2 := filter.ProvidesGVK(&catalogmetadata.GVK{
133-
Group: "baz.io",
134-
Version: "v1alpha1",
135-
Kind: "Baz",
136-
})
137-
// Filter with Bundle which provides the GVK should return true
138-
assert.True(t, f1(b1))
139-
// Filter with Bundle which does not provide the GVK should return false
140-
assert.False(t, f2(b1))
141-
// Filter with Bundle with no GVK should return false
142-
assert.False(t, f1(b2))
143-
}
144-
145117
func TestWithBundleImage(t *testing.T) {
146118
b1 := &catalogmetadata.Bundle{Bundle: declcfg.Bundle{Image: "fake-image-uri-1"}}
147119
b2 := &catalogmetadata.Bundle{Bundle: declcfg.Bundle{Image: "fake-image-uri-2"}}

internal/catalogmetadata/types.go

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ import (
1111
"github.com/operator-framework/operator-registry/alpha/property"
1212
)
1313

14+
const (
15+
MediaTypePlain = "plain+v0"
16+
MediaTypeRegistry = "registry+v1"
17+
PropertyBundleMediaType = "olm.bundle.mediatype"
18+
)
19+
1420
type Schemas interface {
1521
Package | Bundle | Channel
1622
}
@@ -23,20 +29,9 @@ type Channel struct {
2329
declcfg.Channel
2430
}
2531

26-
type GVK property.GVK
27-
28-
func (g GVK) String() string {
29-
return fmt.Sprintf(`group:"%s" version:"%s" kind:"%s"`, g.Group, g.Version, g.Kind)
30-
}
31-
32-
type GVKRequired property.GVKRequired
33-
34-
func (g GVKRequired) String() string {
35-
return fmt.Sprintf(`group:"%s" version:"%s" kind:"%s"`, g.Group, g.Version, g.Kind)
36-
}
37-
38-
func (g GVKRequired) AsGVK() GVK {
39-
return GVK(g)
32+
type PackageRequired struct {
33+
property.PackageRequired
34+
SemverRange *bsemver.Range `json:"-"`
4035
}
4136

4237
type Bundle struct {
@@ -46,11 +41,11 @@ type Bundle struct {
4641

4742
mu sync.RWMutex
4843
// these properties are lazy loaded as they are requested
49-
propertiesMap map[string]property.Property
50-
bundlePackage *property.Package
51-
semVersion *bsemver.Version
52-
providedGVKs []GVK
53-
requiredGVKs []GVKRequired
44+
propertiesMap map[string]property.Property
45+
bundlePackage *property.Package
46+
semVersion *bsemver.Version
47+
requiredPackages []PackageRequired
48+
mediaType string
5449
}
5550

5651
func (b *Bundle) Version() (*bsemver.Version, error) {
@@ -60,18 +55,19 @@ func (b *Bundle) Version() (*bsemver.Version, error) {
6055
return b.semVersion, nil
6156
}
6257

63-
func (b *Bundle) ProvidedGVKs() ([]GVK, error) {
64-
if err := b.loadProvidedGVKs(); err != nil {
58+
func (b *Bundle) RequiredPackages() ([]PackageRequired, error) {
59+
if err := b.loadRequiredPackages(); err != nil {
6560
return nil, err
6661
}
67-
return b.providedGVKs, nil
62+
return b.requiredPackages, nil
6863
}
6964

70-
func (b *Bundle) RequiredGVKs() ([]GVKRequired, error) {
71-
if err := b.loadRequiredGVKs(); err != nil {
72-
return nil, err
65+
func (b *Bundle) MediaType() (string, error) {
66+
if err := b.loadMediaType(); err != nil {
67+
return "", err
7368
}
74-
return b.requiredGVKs, nil
69+
70+
return b.mediaType, nil
7571
}
7672

7773
func (b *Bundle) loadPackage() error {
@@ -94,28 +90,40 @@ func (b *Bundle) loadPackage() error {
9490
return nil
9591
}
9692

97-
func (b *Bundle) loadProvidedGVKs() error {
93+
func (b *Bundle) loadRequiredPackages() error {
9894
b.mu.Lock()
9995
defer b.mu.Unlock()
100-
if b.providedGVKs == nil {
101-
providedGVKs, err := loadFromProps[[]GVK](b, property.TypeGVK, false)
96+
if b.requiredPackages == nil {
97+
requiredPackages, err := loadFromProps[[]PackageRequired](b, property.TypePackageRequired, false)
10298
if err != nil {
103-
return fmt.Errorf("error determining provided GVKs for bundle %q: %s", b.Name, err)
99+
return fmt.Errorf("error determining bundle required packages for bundle %q: %s", b.Name, err)
100+
}
101+
for _, requiredPackage := range requiredPackages {
102+
semverRange, err := bsemver.ParseRange(requiredPackage.VersionRange)
103+
if err != nil {
104+
return fmt.Errorf(
105+
"error parsing bundle required package semver range for bundle %q (required package %q): %s",
106+
b.Name,
107+
requiredPackage.PackageName,
108+
err,
109+
)
110+
}
111+
requiredPackage.SemverRange = &semverRange
104112
}
105-
b.providedGVKs = providedGVKs
113+
b.requiredPackages = requiredPackages
106114
}
107115
return nil
108116
}
109117

110-
func (b *Bundle) loadRequiredGVKs() error {
118+
func (b *Bundle) loadMediaType() error {
111119
b.mu.Lock()
112120
defer b.mu.Unlock()
113-
if b.requiredGVKs == nil {
114-
requiredGVKs, err := loadFromProps[[]GVKRequired](b, property.TypeGVKRequired, false)
121+
if b.mediaType == "" {
122+
mediaType, err := loadFromProps[string](b, PropertyBundleMediaType, false)
115123
if err != nil {
116-
return fmt.Errorf("error determining required GVKs for bundle %q: %s", b.Name, err)
124+
return fmt.Errorf("error determining bundle mediatype for bundle %q: %s", b.Name, err)
117125
}
118-
b.requiredGVKs = requiredGVKs
126+
b.mediaType = mediaType
119127
}
120128
return nil
121129
}

0 commit comments

Comments
 (0)