Skip to content

Commit af54a98

Browse files
committed
more tests
Signed-off-by: nitishfy <[email protected]>
1 parent 2dd1827 commit af54a98

File tree

5 files changed

+142
-5
lines changed

5 files changed

+142
-5
lines changed

controller/sync_test.go

Lines changed: 83 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,17 @@ func (f *fakeDiscovery) OpenAPISchema() (*openapi_v2.Document, error) {
3939
return f.schema, nil
4040
}
4141

42-
func loadHTTPProxySchema(t *testing.T) *openapi_v2.Document {
42+
func loadCRDSchema(t *testing.T, path string) *openapi_v2.Document {
4343
t.Helper()
4444

45-
data, err := os.ReadFile("testdata/httpproxy_openapi_v2.yaml")
45+
data, err := os.ReadFile(path)
4646
require.NoError(t, err)
4747

4848
jsonData, err := yaml.YAMLToJSON(data)
4949
require.NoError(t, err)
5050

5151
doc, err := openapi_v2.ParseDocument(jsonData)
5252
require.NoError(t, err)
53-
fmt.Printf("definitions: %+v\n", doc.Definitions)
5453

5554
return doc
5655
}
@@ -541,7 +540,7 @@ func TestNormalizeTargetResourcesWithList(t *testing.T) {
541540
}
542541

543542
t.Run("will properly ignore nested fields within arrays", func(t *testing.T) {
544-
doc := loadHTTPProxySchema(t)
543+
doc := loadCRDSchema(t, "testdata/httpproxy_openapi_v2.yaml")
545544
disco := &fakeDiscovery{schema: doc}
546545
oapiGetter := openapi.NewOpenAPIGetter(disco)
547546
oapiResources, err := openapi.NewOpenAPIParser(oapiGetter).Parse()
@@ -710,7 +709,7 @@ func TestNormalizeTargetResourcesWithList(t *testing.T) {
710709
})
711710

712711
t.Run("patches ignored differences in individual array elements of HTTPProxy CRD", func(t *testing.T) {
713-
doc := loadHTTPProxySchema(t)
712+
doc := loadCRDSchema(t, "testdata/httpproxy_openapi_v2.yaml")
714713
disco := &fakeDiscovery{schema: doc}
715714
oapiGetter := openapi.NewOpenAPIGetter(disco)
716715
oapiResources, err := openapi.NewOpenAPIParser(oapiGetter).Parse()
@@ -753,6 +752,85 @@ func TestNormalizeTargetResourcesWithList(t *testing.T) {
753752
})
754753
}
755754

755+
func TestNormalizeTargetResourcesCRDs(t *testing.T) {
756+
type fixture struct {
757+
comparisonResult *comparisonResult
758+
}
759+
setupHTTPProxy := func(t *testing.T, ignores []v1alpha1.ResourceIgnoreDifferences) *fixture {
760+
t.Helper()
761+
dc, err := diff.NewDiffConfigBuilder().
762+
WithDiffSettings(ignores, nil, true, normalizers.IgnoreNormalizerOpts{}).
763+
WithNoCache().
764+
Build()
765+
require.NoError(t, err)
766+
live := test.YamlToUnstructured(testdata.SimpleAppLiveYaml)
767+
target := test.YamlToUnstructured(testdata.SimpleAppTargetYaml)
768+
return &fixture{
769+
&comparisonResult{
770+
reconciliationResult: sync.ReconciliationResult{
771+
Live: []*unstructured.Unstructured{live},
772+
Target: []*unstructured.Unstructured{target},
773+
},
774+
diffConfig: dc,
775+
},
776+
}
777+
}
778+
779+
t.Run("sample-app", func(t *testing.T) {
780+
doc := loadCRDSchema(t, "testdata/simple-app.yaml")
781+
disco := &fakeDiscovery{schema: doc}
782+
oapiGetter := openapi.NewOpenAPIGetter(disco)
783+
oapiResources, err := openapi.NewOpenAPIParser(oapiGetter).Parse()
784+
require.NoError(t, err)
785+
786+
ignores := []v1alpha1.ResourceIgnoreDifferences{
787+
{
788+
Group: "example.com",
789+
Kind: "SimpleApp",
790+
JQPathExpressions: []string{".spec.servers[1].enabled", ".spec.servers[0].port"},
791+
},
792+
}
793+
794+
f := setupHTTPProxy(t, ignores)
795+
796+
target := test.YamlToUnstructured(testdata.SimpleAppTargetYaml)
797+
f.comparisonResult.reconciliationResult.Target = []*unstructured.Unstructured{target}
798+
799+
live := test.YamlToUnstructured(testdata.SimpleAppLiveYaml)
800+
f.comparisonResult.reconciliationResult.Live = []*unstructured.Unstructured{live}
801+
802+
patchedTargets, err := normalizeTargetResources(oapiResources, f.comparisonResult)
803+
require.NoError(t, err)
804+
require.Len(t, patchedTargets, 1)
805+
806+
patched := patchedTargets[0]
807+
require.NotNil(t, patched)
808+
809+
// 'spec.servers' array has length 2
810+
servers := dig(patched.Object, "spec", "servers").([]any)
811+
require.Len(t, servers, 2)
812+
813+
// first server's 'name' is 'server1'
814+
name1 := dig(patched.Object, "spec", "servers", 0, "name").(string)
815+
assert.Equal(t, "server1", name1)
816+
817+
assert.Equal(t, int64(8081), dig(patched.Object, "spec", "servers", 0, "port").(int64))
818+
assert.Equal(t, int64(9090), dig(patched.Object, "spec", "servers", 1, "port").(int64))
819+
820+
// first server's 'enabled' should be true
821+
enabled1 := dig(patched.Object, "spec", "servers", 0, "enabled").(bool)
822+
assert.True(t, enabled1)
823+
824+
// second server's 'name' should be 'server2'
825+
name2 := dig(patched.Object, "spec", "servers", 1, "name").(string)
826+
assert.Equal(t, "server2", name2)
827+
828+
// second server's 'enabled' should be true (respected from live due to ignoreDifferences)
829+
enabled2 := dig(patched.Object, "spec", "servers", 1, "enabled").(bool)
830+
assert.True(t, enabled2)
831+
})
832+
}
833+
756834
func TestDeriveServiceAccountMatchingNamespaces(t *testing.T) {
757835
t.Parallel()
758836

controller/testdata/data.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,10 @@ var (
3232

3333
//go:embed additional-image-replicas-deployment.yaml
3434
AdditionalImageReplicaDeploymentYaml string
35+
36+
//go:embed simple-app-live.yaml
37+
SimpleAppLiveYaml string
38+
39+
//go:embed simple-app-target.yaml
40+
SimpleAppTargetYaml string
3541
)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: example.com/v1
2+
kind: SimpleApp
3+
metadata:
4+
name: simpleapp-sample
5+
spec:
6+
servers:
7+
- name: server1
8+
port: 8081 # port changed in live from 8080
9+
enabled: true
10+
- name: server2
11+
port: 9090
12+
enabled: true # enabled changed in live from false
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: example.com/v1
2+
kind: SimpleApp
3+
metadata:
4+
name: simpleapp-sample
5+
spec:
6+
servers:
7+
- name: server1
8+
port: 8080
9+
enabled: true
10+
- name: server2
11+
port: 9090
12+
enabled: false
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
swagger: "2.0"
2+
info:
3+
title: SimpleApp
4+
version: "v1"
5+
paths: {}
6+
definitions:
7+
example.com.v1.SimpleApp:
8+
type: object
9+
x-kubernetes-group-version-kind:
10+
- group: example.com
11+
version: v1
12+
kind: SimpleApp
13+
properties:
14+
spec:
15+
type: object
16+
properties:
17+
servers:
18+
type: array
19+
x-kubernetes-list-map-keys:
20+
- name
21+
items:
22+
type: object
23+
properties:
24+
name:
25+
type: string
26+
port:
27+
type: integer
28+
enabled:
29+
type: boolean

0 commit comments

Comments
 (0)