@@ -2,6 +2,7 @@ package controller_test
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"testing"
6
7
7
8
kcpcore "github.com/kcp-dev/kcp/sdk/apis/core/v1alpha1"
@@ -57,23 +58,107 @@ func TestAPIBindingReconciler_Reconcile(t *testing.T) {
57
58
},
58
59
err : nil ,
59
60
},
61
+ {
62
+ name : "workspace_delete_error" ,
63
+ clusterName : "dev-cluster" ,
64
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
65
+ controllerRuntimeClient := & controllerRuntimeMocks.MockClient {}
66
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (controllerRuntimeClient , nil )
67
+ controllerRuntimeClient .EXPECT ().Get (mock .Anything , mock .Anything , mock .Anything ).Return (nil ).
68
+ Run (func (ctx context.Context , key client.ObjectKey , obj client.Object , opts ... client.GetOption ) {
69
+ lc := obj .(* kcpcore.LogicalCluster )
70
+ lc .Annotations = map [string ]string {
71
+ "kcp.io/path" : "dev-cluster" ,
72
+ }
73
+ lc .DeletionTimestamp = & metav1.Time {}
74
+ })
75
+ ioHandler .EXPECT ().Delete (mock .Anything ).Return (assert .AnError )
76
+ },
77
+ err : assert .AnError ,
78
+ },
79
+ {
80
+ name : "missing_annotation_error" ,
81
+ clusterName : "dev-cluster" ,
82
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
83
+ controllerRuntimeClient := & controllerRuntimeMocks.MockClient {}
84
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (controllerRuntimeClient , nil )
85
+ controllerRuntimeClient .EXPECT ().Get (mock .Anything , mock .Anything , mock .Anything ).Return (nil )
86
+ },
87
+ err : errors .New ("failed to get cluster path from kcp.io/path annotation" ),
88
+ },
89
+ {
90
+ name : "nil_annotation_error" ,
91
+ clusterName : "dev-cluster" ,
92
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
93
+ controllerRuntimeClient := & controllerRuntimeMocks.MockClient {}
94
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (controllerRuntimeClient , nil )
95
+ controllerRuntimeClient .EXPECT ().Get (mock .Anything , mock .Anything , mock .Anything ).Return (nil ).
96
+ Run (func (ctx context.Context , key client.ObjectKey , obj client.Object , opts ... client.GetOption ) {
97
+ // Do not set Annotations (nil)
98
+ })
99
+ },
100
+ err : errors .New ("failed to get cluster path from kcp.io/path annotation" ),
101
+ },
102
+ {
103
+ name : "empty_annotation_error" ,
104
+ clusterName : "dev-cluster" ,
105
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
106
+ controllerRuntimeClient := & controllerRuntimeMocks.MockClient {}
107
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (controllerRuntimeClient , nil )
108
+ controllerRuntimeClient .EXPECT ().Get (mock .Anything , mock .Anything , mock .Anything ).Return (nil ).
109
+ Run (func (ctx context.Context , key client.ObjectKey , obj client.Object , opts ... client.GetOption ) {
110
+ lc := obj .(* kcpcore.LogicalCluster )
111
+ lc .Annotations = map [string ]string {
112
+ "kcp.io/path" : "" ,
113
+ }
114
+ })
115
+ ioHandler .EXPECT ().Read (mock .Anything ).Return (nil , nil )
116
+ discoverFactory .EXPECT ().RestMapperForCluster (mock .Anything ).Return (nil , nil )
117
+ discoverFactory .EXPECT ().ClientForCluster (mock .Anything ).Return (nil , nil )
118
+ apiSchemaResolver .EXPECT ().Resolve (mock .Anything , mock .Anything ).Return (nil , nil )
119
+ },
120
+ err : nil ,
121
+ },
122
+ {
123
+ name : "logicalcluster_get_error" ,
124
+ clusterName : "dev-cluster" ,
125
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
126
+ controllerRuntimeClient := & controllerRuntimeMocks.MockClient {}
127
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (controllerRuntimeClient , nil )
128
+ controllerRuntimeClient .EXPECT ().Get (mock .Anything , mock .Anything , mock .Anything ).Return (assert .AnError )
129
+ },
130
+ err : assert .AnError ,
131
+ },
132
+ {
133
+ name : "client_for_cluster_error" ,
134
+ clusterName : "dev-cluster" ,
135
+ mockSetup : func (ioHandler * workspacefileMocks.MockIOHandler , discoverFactory * discoveryclientMocks.MockFactory , apiSchemaResolver * apischemaMocks.MockResolver , clusterPathResolver * clusterpathMocks.MockResolver ) {
136
+ clusterPathResolver .EXPECT ().ClientForCluster ("dev-cluster" ).Return (nil , assert .AnError )
137
+ },
138
+ err : assert .AnError ,
139
+ },
60
140
}
61
141
62
142
log := testlogger .New ().HideLogOutput ().Logger
63
143
for _ , tt := range tests {
64
144
t .Run (tt .name , func (t * testing.T ) {
65
145
ioHandler := workspacefileMocks .NewMockIOHandler (t )
66
- discoveryFactory := discoveryclientMocks .NewMockFactory (t )
146
+ discoverFactory := discoveryclientMocks .NewMockFactory (t )
67
147
apiSchemaResolver := apischemaMocks .NewMockResolver (t )
68
148
clusterPathResolver := clusterpathMocks .NewMockResolver (t )
69
149
70
150
if tt .mockSetup != nil {
71
- tt .mockSetup (ioHandler , discoveryFactory , apiSchemaResolver , clusterPathResolver )
151
+ tt .mockSetup (ioHandler , discoverFactory , apiSchemaResolver , clusterPathResolver )
72
152
}
73
153
74
- r := controller .NewAPIBindingReconciler (ioHandler , discoveryFactory , apiSchemaResolver , clusterPathResolver , log )
154
+ r := controller .NewAPIBindingReconciler (ioHandler , discoverFactory , apiSchemaResolver , clusterPathResolver , log )
75
155
_ , err := r .Reconcile (context .Background (), ctrl.Request {ClusterName : tt .clusterName })
76
- assert .Equal (t , tt .err , err )
156
+
157
+ if tt .name == "logicalcluster_get_error" {
158
+ assert .ErrorIs (t , err , tt .err )
159
+ } else {
160
+ assert .Equal (t , tt .err , err )
161
+ }
77
162
})
78
163
}
79
164
}
0 commit comments