Skip to content

Commit 5f5b5f7

Browse files
committed
fix versioned GetIdentity
1 parent e318071 commit 5f5b5f7

File tree

10 files changed

+227
-41
lines changed

10 files changed

+227
-41
lines changed

api/ocm/compdesc/componentdescriptor.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,7 @@ func (o *ElementMeta) AddExtraIdentity(identity metav1.Identity) {
233233

234234
// GetIdentity returns the identity of the object.
235235
func (o *ElementMeta) GetIdentity(accessor ElementListAccessor) metav1.Identity {
236-
identity := o.ExtraIdentity.Copy()
237-
if identity == nil {
238-
identity = metav1.Identity{}
239-
}
236+
identity := o.GetExtraIdentity()
240237
identity[SystemIdentityName] = o.Name
241238
if identity.Get(SystemIdentityVersion) == "" && accessor != nil {
242239
found := false
@@ -266,7 +263,7 @@ func (o *ElementMeta) GetRawIdentity() metav1.Identity {
266263
identity = metav1.Identity{}
267264
}
268265
identity[SystemIdentityName] = o.Name
269-
if o.Version != "" {
266+
if _, ok := identity[SystemIdentityVersion]; !ok && o.Version != "" {
270267
identity[SystemIdentityVersion] = o.Version
271268
}
272269
return identity
@@ -279,8 +276,9 @@ func (o *ElementMeta) GetMatchBaseIdentity() metav1.Identity {
279276
identity = metav1.Identity{}
280277
}
281278
identity[SystemIdentityName] = o.Name
282-
identity[SystemIdentityVersion] = o.Version
283-
279+
if _, ok := identity[SystemIdentityVersion]; !ok {
280+
identity[SystemIdentityVersion] = o.Version
281+
}
284282
return identity
285283
}
286284

api/ocm/compdesc/id_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package compdesc_test
2+
3+
import (
4+
. "github.com/onsi/ginkgo/v2"
5+
. "github.com/onsi/gomega"
6+
"ocm.software/ocm/api/ocm/compdesc"
7+
metav1 "ocm.software/ocm/api/ocm/compdesc/meta/v1"
8+
)
9+
10+
var _ = FDescribe("Extra Identity Test Environment", func() {
11+
It("handles complete defaulting", func() {
12+
resources := compdesc.Resources{
13+
compdesc.Resource{
14+
ResourceMeta: compdesc.ResourceMeta{
15+
ElementMeta: compdesc.ElementMeta{
16+
Name: "res",
17+
Version: "v1",
18+
},
19+
},
20+
},
21+
compdesc.Resource{
22+
ResourceMeta: compdesc.ResourceMeta{
23+
ElementMeta: compdesc.ElementMeta{
24+
Name: "res",
25+
Version: "v2",
26+
},
27+
},
28+
},
29+
}
30+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", compdesc.SystemIdentityVersion, "v1")))
31+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", compdesc.SystemIdentityVersion, "v2")))
32+
})
33+
34+
It("handles partial defaulting", func() {
35+
resources := compdesc.Resources{
36+
compdesc.Resource{
37+
ResourceMeta: compdesc.ResourceMeta{
38+
ElementMeta: compdesc.ElementMeta{
39+
Name: "res",
40+
Version: "v1",
41+
ExtraIdentity: metav1.NewExtraIdentity(compdesc.SystemIdentityVersion, "v1"),
42+
},
43+
},
44+
},
45+
compdesc.Resource{
46+
ResourceMeta: compdesc.ResourceMeta{
47+
ElementMeta: compdesc.ElementMeta{
48+
Name: "res",
49+
Version: "v2",
50+
},
51+
},
52+
},
53+
}
54+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", compdesc.SystemIdentityVersion, "v1")))
55+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", compdesc.SystemIdentityVersion, "v2")))
56+
})
57+
})

api/ocm/compdesc/versions/ocm.software/v3alpha1/componentdescriptor.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,24 +129,33 @@ func (o *ElementMeta) SetExtraIdentity(identity metav1.Identity) {
129129
o.ExtraIdentity = identity
130130
}
131131

132+
// GetExtraIdentity gets the extra identity of the object.
133+
func (o *ElementMeta) GetExtraIdentity() metav1.Identity {
134+
if o.ExtraIdentity == nil {
135+
return metav1.Identity{}
136+
}
137+
return o.ExtraIdentity.Copy()
138+
}
139+
132140
// GetIdentity returns the identity of the object.
133141
func (o *ElementMeta) GetIdentity(accessor ElementAccessor) metav1.Identity {
134-
identity := o.ExtraIdentity.Copy()
135-
if identity == nil {
136-
identity = metav1.Identity{}
137-
}
142+
identity := o.GetExtraIdentity()
138143
identity[SystemIdentityName] = o.Name
139-
if accessor != nil {
144+
if identity.Get(SystemIdentityVersion) == "" && accessor != nil {
140145
found := false
141146
l := accessor.Len()
142147
for i := 0; i < l; i++ {
143148
m := accessor.Get(i).GetMeta()
144-
if m.Name == o.Name && m.ExtraIdentity.Equals(o.ExtraIdentity) {
145-
if found {
146-
identity[SystemIdentityVersion] = o.Version
147-
break
149+
if m.GetName() == o.Name {
150+
mid := m.GetExtraIdentity()
151+
mid.Remove(SystemIdentityVersion)
152+
if mid.Equals(o.ExtraIdentity) {
153+
if found {
154+
identity[SystemIdentityVersion] = o.Version
155+
break
156+
}
157+
found = true
148158
}
149-
found = true
150159
}
151160
}
152161
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package v3alpha1_test
2+
3+
import (
4+
. "github.com/onsi/ginkgo/v2"
5+
. "github.com/onsi/gomega"
6+
7+
metav1 "ocm.software/ocm/api/ocm/compdesc/meta/v1"
8+
me "ocm.software/ocm/api/ocm/compdesc/versions/ocm.software/v3alpha1"
9+
)
10+
11+
var _ = Describe("Extra Identity Test Environment", func() {
12+
It("handles complete defaulting", func() {
13+
resources := me.Resources{
14+
me.Resource{
15+
ElementMeta: me.ElementMeta{
16+
Name: "res",
17+
Version: "v1",
18+
},
19+
},
20+
me.Resource{
21+
ElementMeta: me.ElementMeta{
22+
Name: "res",
23+
Version: "v2",
24+
},
25+
},
26+
}
27+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v1")))
28+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v2")))
29+
})
30+
31+
It("handles partial defaulting", func() {
32+
resources := me.Resources{
33+
me.Resource{
34+
ElementMeta: me.ElementMeta{
35+
Name: "res",
36+
Version: "v1",
37+
ExtraIdentity: metav1.NewExtraIdentity(me.SystemIdentityVersion, "v1"),
38+
},
39+
},
40+
me.Resource{
41+
ElementMeta: me.ElementMeta{
42+
Name: "res",
43+
Version: "v2",
44+
},
45+
},
46+
}
47+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v1")))
48+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v2")))
49+
})
50+
})
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package v3alpha1_test
2+
3+
import (
4+
"testing"
5+
6+
. "github.com/onsi/ginkgo/v2"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func TestConfig(t *testing.T) {
11+
RegisterFailHandler(Fail)
12+
RunSpecs(t, "v3alpha1 Test Suite")
13+
}

api/ocm/compdesc/versions/ocm.software/v3alpha1/validation_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package v3alpha1_test
22

33
import (
4-
"testing"
5-
64
. "github.com/onsi/ginkgo/v2"
75
. "github.com/onsi/gomega"
86
. "github.com/onsi/gomega/gstruct"
@@ -17,11 +15,6 @@ import (
1715
"ocm.software/ocm/api/utils/runtime"
1816
)
1917

20-
func TestConfig(t *testing.T) {
21-
RegisterFailHandler(Fail)
22-
RunSpecs(t, "V2 Test Suite")
23-
}
24-
2518
var _ = Describe("Validation", func() {
2619
testutils.TestCompName(jsonscheme.ResourcesComponentDescriptorOcmV3SchemaYamlBytes())
2720

api/ocm/compdesc/versions/v2/componentdescriptor.go

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -174,24 +174,33 @@ func (o *ElementMeta) SetExtraIdentity(identity metav1.Identity) {
174174
o.ExtraIdentity = identity
175175
}
176176

177+
// GetExtraIdentity gets the extra identity of the object.
178+
func (o *ElementMeta) GetExtraIdentity() metav1.Identity {
179+
if o.ExtraIdentity == nil {
180+
return metav1.Identity{}
181+
}
182+
return o.ExtraIdentity.Copy()
183+
}
184+
177185
// GetIdentity returns the identity of the object.
178186
func (o *ElementMeta) GetIdentity(accessor ElementAccessor) metav1.Identity {
179-
identity := o.ExtraIdentity.Copy()
180-
if identity == nil {
181-
identity = metav1.Identity{}
182-
}
187+
identity := o.GetExtraIdentity()
183188
identity[SystemIdentityName] = o.Name
184-
if accessor != nil {
189+
if identity.Get(SystemIdentityVersion) == "" && accessor != nil {
185190
found := false
186191
l := accessor.Len()
187192
for i := 0; i < l; i++ {
188193
m := accessor.Get(i).GetMeta()
189-
if m.Name == o.Name && m.ExtraIdentity.Equals(o.ExtraIdentity) {
190-
if found {
191-
identity[SystemIdentityVersion] = o.Version
192-
break
194+
if m.GetName() == o.Name {
195+
mid := m.GetExtraIdentity()
196+
mid.Remove(SystemIdentityVersion)
197+
if mid.Equals(o.ExtraIdentity) {
198+
if found {
199+
identity[SystemIdentityVersion] = o.Version
200+
break
201+
}
202+
found = true
193203
}
194-
found = true
195204
}
196205
}
197206
}
@@ -209,7 +218,7 @@ func (o *ElementMeta) GetRawIdentity() metav1.Identity {
209218
identity = metav1.Identity{}
210219
}
211220
identity[SystemIdentityName] = o.Name
212-
if o.Version != "" {
221+
if _, ok := identity[SystemIdentityVersion]; !ok && o.Version != "" {
213222
identity[SystemIdentityVersion] = o.Version
214223
}
215224
return identity
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package v2_test
2+
3+
import (
4+
. "github.com/onsi/ginkgo/v2"
5+
. "github.com/onsi/gomega"
6+
7+
metav1 "ocm.software/ocm/api/ocm/compdesc/meta/v1"
8+
me "ocm.software/ocm/api/ocm/compdesc/versions/v2"
9+
)
10+
11+
var _ = Describe("Extra Identity Test Environment", func() {
12+
It("handles complete defaulting", func() {
13+
resources := me.Resources{
14+
me.Resource{
15+
ElementMeta: me.ElementMeta{
16+
Name: "res",
17+
Version: "v1",
18+
},
19+
},
20+
me.Resource{
21+
ElementMeta: me.ElementMeta{
22+
Name: "res",
23+
Version: "v2",
24+
},
25+
},
26+
}
27+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v1")))
28+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v2")))
29+
})
30+
31+
It("handles partial defaulting", func() {
32+
resources := me.Resources{
33+
me.Resource{
34+
ElementMeta: me.ElementMeta{
35+
Name: "res",
36+
Version: "v1",
37+
ExtraIdentity: metav1.NewExtraIdentity(me.SystemIdentityVersion, "v1"),
38+
},
39+
},
40+
me.Resource{
41+
ElementMeta: me.ElementMeta{
42+
Name: "res",
43+
Version: "v2",
44+
},
45+
},
46+
}
47+
Expect(resources[0].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v1")))
48+
Expect(resources[1].GetIdentity(resources)).To(Equal(metav1.NewIdentity("res", me.SystemIdentityVersion, "v2")))
49+
})
50+
})
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package v2_test
2+
3+
import (
4+
"testing"
5+
6+
. "github.com/onsi/ginkgo/v2"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func TestConfig(t *testing.T) {
11+
RegisterFailHandler(Fail)
12+
RunSpecs(t, "v2 Test Suite")
13+
}

api/ocm/compdesc/versions/v2/validation_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"encoding/json"
55
"fmt"
66
"strings"
7-
"testing"
87

98
. "github.com/mandelsoft/goutils/testutils"
109
. "github.com/onsi/ginkgo/v2"
@@ -22,11 +21,6 @@ import (
2221
"ocm.software/ocm/api/utils/runtime"
2322
)
2423

25-
func TestConfig(t *testing.T) {
26-
RegisterFailHandler(Fail)
27-
RunSpecs(t, "V2 Test Suite")
28-
}
29-
3024
var _ = Describe("Validation", func() {
3125
testutils.TestCompName(jsonscheme.ResourcesComponentDescriptorV2SchemaYamlBytes())
3226

0 commit comments

Comments
 (0)