@@ -210,6 +210,69 @@ func TestDisconnect(t *testing.T) {
210
210
g .Expect (accessor .lockedState .healthChecking .lastProbeSuccessTime .IsZero ()).To (BeFalse ())
211
211
}
212
212
213
+ func TestGetUncachedClientLifecycle (t * testing.T ) {
214
+ g := NewWithT (t )
215
+
216
+ testCluster := & clusterv1.Cluster {
217
+ ObjectMeta : metav1.ObjectMeta {
218
+ Name : "test-cluster" ,
219
+ Namespace : metav1 .NamespaceDefault ,
220
+ },
221
+ Spec : clusterv1.ClusterSpec {
222
+ ControlPlaneRef : clusterv1.ContractVersionedObjectReference {
223
+ APIGroup : builder .ControlPlaneGroupVersion .Group ,
224
+ Kind : builder .GenericControlPlaneKind ,
225
+ Name : "cp1" ,
226
+ },
227
+ },
228
+ }
229
+ clusterKey := client .ObjectKeyFromObject (testCluster )
230
+ g .Expect (env .CreateAndWait (ctx , testCluster )).To (Succeed ())
231
+ defer func () { g .Expect (env .CleanupAndWait (ctx , testCluster )).To (Succeed ()) }()
232
+
233
+ // Create kubeconfig Secret
234
+ kubeconfigSecret := kubeconfig .GenerateSecret (testCluster , kubeconfig .FromEnvTestConfig (env .Config , testCluster ))
235
+ g .Expect (env .CreateAndWait (ctx , kubeconfigSecret )).To (Succeed ())
236
+ defer func () { g .Expect (env .CleanupAndWait (ctx , kubeconfigSecret )).To (Succeed ()) }()
237
+
238
+ config := buildClusterAccessorConfig (env .GetScheme (), Options {
239
+ SecretClient : env .GetClient (),
240
+ Client : ClientOptions {
241
+ UserAgent : remote .DefaultClusterAPIUserAgent ("test-controller-manager" ),
242
+ Timeout : 10 * time .Second ,
243
+ },
244
+ }, nil )
245
+ accessor := newClusterAccessor (context .Background (), clusterKey , config )
246
+
247
+ // Before connect, getting the uncached client should fail with ErrClusterNotConnected
248
+ _ , err := accessor .GetUncachedClient (ctx )
249
+ g .Expect (err ).To (HaveOccurred ())
250
+ g .Expect (errors .Is (err , ErrClusterNotConnected )).To (BeTrue ())
251
+
252
+ // Connect
253
+ g .Expect (accessor .Connect (ctx )).To (Succeed ())
254
+ g .Expect (accessor .Connected (ctx )).To (BeTrue ())
255
+
256
+ // After connect, getting the uncached client should succeed
257
+ r , err := accessor .GetUncachedClient (ctx )
258
+ g .Expect (err ).ToNot (HaveOccurred ())
259
+ g .Expect (r ).ToNot (BeNil ())
260
+
261
+ // List Nodes via the uncached client
262
+ nodeList := & corev1.NodeList {}
263
+ g .Expect (r .List (ctx , nodeList )).To (Succeed ())
264
+ g .Expect (nodeList .Items ).To (BeEmpty ())
265
+
266
+ // Disconnect
267
+ accessor .Disconnect (ctx )
268
+ g .Expect (accessor .Connected (ctx )).To (BeFalse ())
269
+
270
+ // After disconnect, getting the uncached client should fail with ErrClusterNotConnected
271
+ _ , err = accessor .GetUncachedClient (ctx )
272
+ g .Expect (err ).To (HaveOccurred ())
273
+ g .Expect (errors .Is (err , ErrClusterNotConnected )).To (BeTrue ())
274
+ }
275
+
213
276
func TestHealthCheck (t * testing.T ) {
214
277
testCluster := & clusterv1.Cluster {
215
278
ObjectMeta : metav1.ObjectMeta {
0 commit comments