@@ -142,6 +142,61 @@ func TestSecretSync(t *testing.T) {
142
142
})
143
143
}
144
144
145
+ func TestSecretSyncClusterReadiness (t * testing.T ) {
146
+ // No control-plane node conditions - no way of knowing that the state.
147
+ testCluster , testClusterSecret , testClusterClient := makeTestClusterWithNodeConditions (t , "test" )
148
+
149
+ testSecret := makeTestSecret (types.NamespacedName {
150
+ Name : "test-secret" ,
151
+ Namespace : "default" ,
152
+ }, map [string ][]byte {"value" : []byte ("test" )})
153
+
154
+ testSecretSync := makeSecretSync (
155
+ "test-secretsync" ,
156
+ testSecret .GetNamespace (),
157
+ testSecret .GetName (),
158
+ "ns-test" ,
159
+ map [string ]string {"environment" : "test" },
160
+ )
161
+
162
+ sc , cl := makeTestClientAndScheme (
163
+ t , testCluster ,
164
+ testClusterSecret ,
165
+ testSecret ,
166
+ testSecretSync ,
167
+ )
168
+
169
+ reconciler := NewSecretSyncReconciler (cl , sc )
170
+ reconciler .configParser = func (b []byte ) (client.Client , error ) {
171
+ clusters := map [string ]client.Client {
172
+ "test" : testClusterClient ,
173
+ }
174
+
175
+ return clusters [string (b )], nil
176
+ }
177
+
178
+ if _ , err := reconciler .Reconcile (context .TODO (), ctrl.Request {NamespacedName : types.NamespacedName {
179
+ Name : testSecretSync .GetName (),
180
+ Namespace : testSecretSync .GetNamespace (),
181
+ }}); err != nil {
182
+ t .Fatal (err )
183
+ }
184
+
185
+ var secret v1.Secret
186
+ if err := testClusterClient .Get (context .TODO (), client.ObjectKey {Name : "test-secret" , Namespace : "ns-test" }, & secret ); err != nil {
187
+ t .Fatal (err )
188
+ }
189
+
190
+ var secretSync capiv1alpha1.SecretSync
191
+ if err := cl .Get (context .TODO (), client .ObjectKeyFromObject (testSecretSync ), & secretSync ); err != nil {
192
+ t .Fatal (err )
193
+ }
194
+
195
+ if _ , ok := secretSync .Status .SecretVersions [testCluster .Name ]; ! ok {
196
+ t .Fatalf ("secretsync status is not updated" )
197
+ }
198
+ }
199
+
145
200
func makeSecretSync (name , namespace , secretName , targetNamespace string , selector map [string ]string ) * capiv1alpha1.SecretSync {
146
201
return & capiv1alpha1.SecretSync {
147
202
ObjectMeta : metav1.ObjectMeta {
@@ -161,6 +216,17 @@ func makeSecretSync(name, namespace, secretName, targetNamespace string, selecto
161
216
}
162
217
163
218
func makeReadyTestCluster (t * testing.T , key string ) (* clustersv1.GitopsCluster , * v1.Secret , client.Client ) {
219
+ nodeCondition := corev1.NodeCondition {
220
+ Type : "Ready" ,
221
+ Status : "True" ,
222
+ LastHeartbeatTime : metav1 .Now (),
223
+ LastTransitionTime : metav1 .Now (), Reason : "KubeletReady" ,
224
+ Message : "kubelet is posting ready status" }
225
+
226
+ return makeTestClusterWithNodeConditions (t , key , nodeCondition )
227
+ }
228
+
229
+ func makeTestClusterWithNodeConditions (t * testing.T , key string , conds ... corev1.NodeCondition ) (* clustersv1.GitopsCluster , * v1.Secret , client.Client ) {
164
230
cluster := makeTestCluster (func (c * clustersv1.GitopsCluster ) {
165
231
c .Name = fmt .Sprintf ("cluster-%s" , key )
166
232
c .Namespace = corev1 .NamespaceDefault
@@ -170,14 +236,7 @@ func makeReadyTestCluster(t *testing.T, key string) (*clustersv1.GitopsCluster,
170
236
c .Status .Conditions = append (c .Status .Conditions , makeReadyCondition ())
171
237
})
172
238
173
- nodeCondition := corev1.NodeCondition {
174
- Type : "Ready" ,
175
- Status : "True" ,
176
- LastHeartbeatTime : metav1 .Now (),
177
- LastTransitionTime : metav1 .Now (), Reason : "KubeletReady" ,
178
- Message : "kubelet is posting ready status" }
179
-
180
- readyNode := makeNode (map [string ]string {"node-role.kubernetes.io/master" : "" }, nodeCondition )
239
+ readyNode := makeNode (map [string ]string {"node-role.kubernetes.io/master" : "" }, conds ... )
181
240
182
241
secret := makeTestSecret (types.NamespacedName {
183
242
Name : cluster .GetName () + "-kubeconfig" ,
0 commit comments