@@ -6,19 +6,39 @@ import (
6
6
"testing"
7
7
8
8
"github.com/openmfp/kubernetes-graphql-gateway/gateway/resolver/mocks"
9
- "github.com/openmfp/kubernetes-graphql-gateway/listener/apischema"
10
9
"github.com/openmfp/kubernetes-graphql-gateway/listener/controller"
11
10
workspacefileMocks "github.com/openmfp/kubernetes-graphql-gateway/listener/workspacefile/mocks"
12
11
13
12
"github.com/openmfp/golang-commons/logger/testlogger"
14
13
"github.com/stretchr/testify/assert"
15
14
"github.com/stretchr/testify/mock"
15
+ apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
16
16
apierrors "k8s.io/apimachinery/pkg/api/errors"
17
17
"k8s.io/apimachinery/pkg/runtime/schema"
18
18
"sigs.k8s.io/controller-runtime/pkg/client"
19
19
"sigs.k8s.io/controller-runtime/pkg/reconcile"
20
20
)
21
21
22
+ type mockCRDResolver struct {
23
+ mock.Mock
24
+ }
25
+
26
+ func (m * mockCRDResolver ) Resolve () ([]byte , error ) {
27
+ args := m .Called ()
28
+ if args .Get (0 ) == nil {
29
+ return nil , args .Error (1 )
30
+ }
31
+ return args .Get (0 ).([]byte ), args .Error (1 )
32
+ }
33
+
34
+ func (m * mockCRDResolver ) ResolveApiSchema (crd * apiextensionsv1.CustomResourceDefinition ) ([]byte , error ) {
35
+ args := m .Called (crd )
36
+ if args .Get (0 ) == nil {
37
+ return nil , args .Error (1 )
38
+ }
39
+ return args .Get (0 ).([]byte ), args .Error (1 )
40
+ }
41
+
22
42
// TestCRDReconciler tests the CRDReconciler's Reconcile method.
23
43
// It checks if the method handles different scenarios correctly, including
24
44
// errors when getting the CRD and reading the JSON schema.
@@ -43,13 +63,31 @@ func TestCRDReconciler(t *testing.T) {
43
63
readErr : errors .New ("read-error" ),
44
64
wantErr : controller .ErrReadJSON ,
45
65
},
66
+ {
67
+ name : "not found resolve error" ,
68
+ getErr : apierrors .NewNotFound (schema.GroupResource {Group : "" , Resource : "crds" }, "my-crd" ),
69
+ readErr : nil ,
70
+ wantErr : controller .ErrResolveSchema ,
71
+ },
72
+ {
73
+ name : "not found write error" ,
74
+ getErr : apierrors .NewNotFound (schema.GroupResource {Group : "" , Resource : "crds" }, "my-crd" ),
75
+ readErr : nil ,
76
+ wantErr : controller .ErrWriteJSON ,
77
+ },
78
+ {
79
+ name : "successful update" ,
80
+ getErr : nil ,
81
+ readErr : nil ,
82
+ wantErr : nil ,
83
+ },
46
84
}
47
85
48
86
for _ , tc := range tests {
49
87
t .Run (tc .name , func (t * testing.T ) {
50
88
ioHandler := workspacefileMocks .NewMockIOHandler (t )
51
89
fakeClient := mocks .NewMockClient (t )
52
- crdResolver := & apischema. CRDResolver {}
90
+ crdResolver := & mockCRDResolver {}
53
91
54
92
r := controller .NewCRDReconciler (
55
93
"cluster1" ,
@@ -67,7 +105,21 @@ func TestCRDReconciler(t *testing.T) {
67
105
).Return (tc .getErr )
68
106
69
107
if apierrors .IsNotFound (tc .getErr ) {
70
- ioHandler .EXPECT ().Read ("cluster1" ).Return (nil , tc .readErr )
108
+ ioHandler .EXPECT ().Read ("cluster1" ).Return ([]byte ("{}" ), tc .readErr )
109
+ if tc .readErr == nil {
110
+ if tc .wantErr == controller .ErrResolveSchema {
111
+ crdResolver .On ("Resolve" ).Return (nil , errors .New ("resolve error" ))
112
+ } else if tc .wantErr == controller .ErrWriteJSON {
113
+ crdResolver .On ("Resolve" ).Return ([]byte (`{"new":"schema"}` ), nil )
114
+ ioHandler .EXPECT ().Write ([]byte (`{"new":"schema"}` ), "cluster1" ).Return (errors .New ("write error" ))
115
+ } else {
116
+ crdResolver .On ("Resolve" ).Return ([]byte ("{}" ), nil )
117
+ }
118
+ }
119
+ } else if tc .getErr == nil {
120
+ ioHandler .EXPECT ().Read ("cluster1" ).Return ([]byte ("{}" ), nil )
121
+ crdResolver .On ("ResolveApiSchema" , mock .Anything ).Return ([]byte (`{"new":"schema"}` ), nil )
122
+ ioHandler .EXPECT ().Write ([]byte (`{"new":"schema"}` ), "cluster1" ).Return (nil )
71
123
}
72
124
73
125
_ , err := r .Reconcile (context .Background (), req )
0 commit comments