Skip to content

Commit 7b4fac7

Browse files
committed
adapt conversion webhook
Signed-off-by: odubajDT <[email protected]>
1 parent 0a01cbb commit 7b4fac7

File tree

2 files changed

+280
-2
lines changed

2 files changed

+280
-2
lines changed

apis/core/v1beta1/featureflagsource_conversion.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func (src *FeatureFlagSource) ConvertTo(dstRaw conversion.Hub) error {
2929
Port: src.Spec.Port,
3030
SocketPath: src.Spec.SocketPath,
3131
Evaluator: src.Spec.Evaluator,
32+
RolloutOnChange: *src.Spec.RolloutOnChange,
3233
DefaultSyncProvider: v1beta2common.SyncProviderType(src.Spec.DefaultSyncProvider),
3334
LogFormat: src.Spec.LogFormat,
3435
ProbesEnabled: *src.Spec.ProbesEnabled,
@@ -37,7 +38,6 @@ func (src *FeatureFlagSource) ConvertTo(dstRaw conversion.Hub) error {
3738
}
3839
dst.Spec.RPC.Resources.Limits = src.Spec.Resources.Limits
3940
dst.Spec.RPC.Resources.Requests = src.Spec.Resources.Requests
40-
dst.Spec.RPC.Resources.Claims = make([]corev1.ResourceClaim, len(src.Spec.Resources.Claims))
4141
copy(dst.Spec.RPC.Resources.Claims, src.Spec.Resources.Claims)
4242
dst.Spec.RPC.SyncProviderArgs = make([]string, len(src.Spec.SyncProviderArgs))
4343
copy(dst.Spec.RPC.SyncProviderArgs, src.Spec.SyncProviderArgs)
@@ -77,6 +77,7 @@ func (dst *FeatureFlagSource) ConvertFrom(srcRaw conversion.Hub) error {
7777
dst.Spec.ManagementPort = src.Spec.RPC.ManagementPort
7878
dst.Spec.Port = src.Spec.RPC.Port
7979
dst.Spec.SocketPath = src.Spec.RPC.SocketPath
80+
dst.Spec.RolloutOnChange = &src.Spec.RPC.RolloutOnChange
8081
dst.Spec.Evaluator = src.Spec.RPC.Evaluator
8182
dst.Spec.DefaultSyncProvider = common.SyncProviderType(src.Spec.RPC.DefaultSyncProvider)
8283
dst.Spec.LogFormat = src.Spec.RPC.LogFormat
@@ -85,7 +86,6 @@ func (dst *FeatureFlagSource) ConvertFrom(srcRaw conversion.Hub) error {
8586
dst.Spec.OtelCollectorUri = src.Spec.RPC.OtelCollectorUri
8687
dst.Spec.Resources.Limits = src.Spec.RPC.Resources.Limits
8788
dst.Spec.Resources.Requests = src.Spec.RPC.Resources.Requests
88-
dst.Spec.Resources.Claims = make([]corev1.ResourceClaim, len(src.Spec.RPC.Resources.Claims))
8989
copy(dst.Spec.Resources.Claims, src.Spec.RPC.Resources.Claims)
9090
dst.Spec.SyncProviderArgs = make([]string, len(src.Spec.RPC.SyncProviderArgs))
9191
copy(dst.Spec.SyncProviderArgs, src.Spec.RPC.SyncProviderArgs)
Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
1+
package v1beta1
2+
3+
import (
4+
"testing"
5+
6+
"github.com/open-feature/open-feature-operator/apis/core/v1beta1/common"
7+
"github.com/open-feature/open-feature-operator/apis/core/v1beta2"
8+
v1beta2common "github.com/open-feature/open-feature-operator/apis/core/v1beta2/common"
9+
"github.com/stretchr/testify/require"
10+
corev1 "k8s.io/api/core/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
)
13+
14+
func TestFeatureFlagSource_ConvertFrom(t *testing.T) {
15+
ttt := true
16+
ff := false
17+
tests := []struct {
18+
name string
19+
srcObj *v1beta2.FeatureFlagSource
20+
wantErr bool
21+
wantObj *FeatureFlagSource
22+
}{
23+
{
24+
name: "Test that conversion from v1beta2 to v1beta1 works",
25+
srcObj: &v1beta2.FeatureFlagSource{
26+
TypeMeta: metav1.TypeMeta{
27+
Kind: "FeatureFlagSource",
28+
APIVersion: "core.openfeature.dev/v1beta2",
29+
},
30+
ObjectMeta: metav1.ObjectMeta{
31+
Name: "ffs",
32+
Namespace: "",
33+
Labels: map[string]string{
34+
"some-label": "some-label-value",
35+
},
36+
Annotations: map[string]string{
37+
"some-annotation": "some-annotation-value",
38+
},
39+
},
40+
Spec: v1beta2.FeatureFlagSourceSpec{
41+
EnvVarPrefix: "prefix",
42+
RPC: &v1beta2.RPCConf{
43+
ManagementPort: int32(9999),
44+
Port: int32(8888),
45+
SocketPath: "path",
46+
Evaluator: "eval",
47+
Sources: []v1beta2.Source{
48+
{
49+
Source: "source",
50+
Provider: "prov",
51+
HttpSyncBearerToken: "token",
52+
TLS: true,
53+
CertPath: "certpath",
54+
ProviderID: "id",
55+
Selector: "selector",
56+
Interval: uint32(5),
57+
},
58+
},
59+
EnvVars: []corev1.EnvVar{
60+
{
61+
Name: "name",
62+
Value: "val",
63+
},
64+
{
65+
Name: "name2",
66+
Value: "val2",
67+
},
68+
},
69+
SyncProviderArgs: []string{"some", "args"},
70+
DefaultSyncProvider: v1beta2common.SyncProviderKubernetes,
71+
LogFormat: "log",
72+
RolloutOnChange: false,
73+
DebugLogging: false,
74+
OtelCollectorUri: "otel",
75+
ProbesEnabled: true,
76+
},
77+
},
78+
},
79+
wantObj: &FeatureFlagSource{
80+
ObjectMeta: metav1.ObjectMeta{
81+
Name: "ffs",
82+
Namespace: "",
83+
Labels: map[string]string{
84+
"some-label": "some-label-value",
85+
},
86+
Annotations: map[string]string{
87+
"some-annotation": "some-annotation-value",
88+
},
89+
},
90+
Spec: FeatureFlagSourceSpec{
91+
EnvVarPrefix: "prefix",
92+
ManagementPort: int32(9999),
93+
Port: int32(8888),
94+
SocketPath: "path",
95+
Evaluator: "eval",
96+
Sources: []Source{
97+
{
98+
Source: "source",
99+
Provider: "prov",
100+
HttpSyncBearerToken: "token",
101+
TLS: true,
102+
CertPath: "certpath",
103+
ProviderID: "id",
104+
Selector: "selector",
105+
Interval: uint32(5),
106+
},
107+
},
108+
EnvVars: []corev1.EnvVar{
109+
{
110+
Name: "name",
111+
Value: "val",
112+
},
113+
{
114+
Name: "name2",
115+
Value: "val2",
116+
},
117+
},
118+
SyncProviderArgs: []string{"some", "args"},
119+
DefaultSyncProvider: common.SyncProviderType("kubernetes"),
120+
LogFormat: "log",
121+
RolloutOnChange: &ff,
122+
DebugLogging: &ff,
123+
OtelCollectorUri: "otel",
124+
ProbesEnabled: &ttt,
125+
},
126+
},
127+
},
128+
}
129+
for _, tt := range tests {
130+
t.Run(tt.name, func(t *testing.T) {
131+
dst := &FeatureFlagSource{
132+
TypeMeta: metav1.TypeMeta{},
133+
ObjectMeta: metav1.ObjectMeta{},
134+
Spec: FeatureFlagSourceSpec{},
135+
Status: FeatureFlagSourceStatus{},
136+
}
137+
if err := dst.ConvertFrom(tt.srcObj); (err != nil) != tt.wantErr {
138+
t.Errorf("ConvertFrom() error = %v, wantErr %v", err, tt.wantErr)
139+
}
140+
if tt.wantObj != nil {
141+
require.Equal(t, tt.wantObj, dst, "Object was not converted correctly")
142+
}
143+
})
144+
}
145+
}
146+
147+
func TestFeatureFlagSource_ConvertTo(t *testing.T) {
148+
ttt := true
149+
ff := false
150+
tests := []struct {
151+
name string
152+
srcObj *FeatureFlagSource
153+
wantErr bool
154+
wantObj *v1beta2.FeatureFlagSource
155+
}{
156+
{
157+
name: "Test that conversion from v1beta2 to v1beta1 works",
158+
wantObj: &v1beta2.FeatureFlagSource{
159+
ObjectMeta: metav1.ObjectMeta{
160+
Name: "ffs",
161+
Namespace: "",
162+
Labels: map[string]string{
163+
"some-label": "some-label-value",
164+
},
165+
Annotations: map[string]string{
166+
"some-annotation": "some-annotation-value",
167+
},
168+
},
169+
Spec: v1beta2.FeatureFlagSourceSpec{
170+
EnvVarPrefix: "prefix",
171+
RPC: &v1beta2.RPCConf{
172+
ManagementPort: int32(9999),
173+
Port: int32(8888),
174+
SocketPath: "path",
175+
Evaluator: "eval",
176+
Sources: []v1beta2.Source{
177+
{
178+
Source: "source",
179+
Provider: "prov",
180+
HttpSyncBearerToken: "token",
181+
TLS: true,
182+
CertPath: "certpath",
183+
ProviderID: "id",
184+
Selector: "selector",
185+
Interval: uint32(5),
186+
},
187+
},
188+
EnvVars: []corev1.EnvVar{
189+
{
190+
Name: "name",
191+
Value: "val",
192+
},
193+
{
194+
Name: "name2",
195+
Value: "val2",
196+
},
197+
},
198+
SyncProviderArgs: []string{"some", "args"},
199+
DefaultSyncProvider: v1beta2common.SyncProviderKubernetes,
200+
LogFormat: "log",
201+
RolloutOnChange: false,
202+
DebugLogging: false,
203+
OtelCollectorUri: "otel",
204+
ProbesEnabled: true,
205+
},
206+
},
207+
},
208+
srcObj: &FeatureFlagSource{
209+
TypeMeta: metav1.TypeMeta{
210+
Kind: "FeatureFlagSource",
211+
APIVersion: "core.openfeature.dev/v1beta1",
212+
},
213+
ObjectMeta: metav1.ObjectMeta{
214+
Name: "ffs",
215+
Namespace: "",
216+
Labels: map[string]string{
217+
"some-label": "some-label-value",
218+
},
219+
Annotations: map[string]string{
220+
"some-annotation": "some-annotation-value",
221+
},
222+
},
223+
Spec: FeatureFlagSourceSpec{
224+
EnvVarPrefix: "prefix",
225+
ManagementPort: int32(9999),
226+
Port: int32(8888),
227+
SocketPath: "path",
228+
Evaluator: "eval",
229+
Sources: []Source{
230+
{
231+
Source: "source",
232+
Provider: "prov",
233+
HttpSyncBearerToken: "token",
234+
TLS: true,
235+
CertPath: "certpath",
236+
ProviderID: "id",
237+
Selector: "selector",
238+
Interval: uint32(5),
239+
},
240+
},
241+
EnvVars: []corev1.EnvVar{
242+
{
243+
Name: "name",
244+
Value: "val",
245+
},
246+
{
247+
Name: "name2",
248+
Value: "val2",
249+
},
250+
},
251+
SyncProviderArgs: []string{"some", "args"},
252+
DefaultSyncProvider: common.SyncProviderType("kubernetes"),
253+
LogFormat: "log",
254+
RolloutOnChange: &ff,
255+
DebugLogging: &ff,
256+
OtelCollectorUri: "otel",
257+
ProbesEnabled: &ttt,
258+
},
259+
},
260+
},
261+
}
262+
for _, tt := range tests {
263+
t.Run(tt.name, func(t *testing.T) {
264+
dst := &v1beta2.FeatureFlagSource{
265+
TypeMeta: metav1.TypeMeta{},
266+
ObjectMeta: metav1.ObjectMeta{},
267+
Spec: v1beta2.FeatureFlagSourceSpec{},
268+
Status: v1beta2.FeatureFlagSourceStatus{},
269+
}
270+
if err := tt.srcObj.ConvertTo(dst); (err != nil) != tt.wantErr {
271+
t.Errorf("ConvertFrom() error = %v, wantErr %v", err, tt.wantErr)
272+
}
273+
if tt.wantObj != nil {
274+
require.Equal(t, tt.wantObj, dst, "Object was not converted correctly")
275+
}
276+
})
277+
}
278+
}

0 commit comments

Comments
 (0)