@@ -44,6 +44,38 @@ const (
4444
4545var ctx = ctrl .SetupSignalHandler ()
4646
47+ func TestControlPlaneInitMutex_DoubleLock (t * testing.T ) {
48+ g := NewWithT (t )
49+
50+ scheme := runtime .NewScheme ()
51+ g .Expect (clusterv1 .AddToScheme (scheme )).To (Succeed ())
52+ g .Expect (corev1 .AddToScheme (scheme )).To (Succeed ())
53+
54+ client := fake .NewClientBuilder ().WithScheme (scheme ).Build ()
55+ l := & ControlPlaneInitMutex {
56+ client : client ,
57+ }
58+
59+ uid := types .UID ("test-uid" )
60+ cluster := & clusterv1.Cluster {
61+ ObjectMeta : metav1.ObjectMeta {
62+ Namespace : clusterNamespace ,
63+ Name : clusterName ,
64+ UID : uid ,
65+ },
66+ }
67+ machine := & clusterv1.Machine {
68+ ObjectMeta : metav1.ObjectMeta {
69+ Name : fmt .Sprintf ("machine-%s" , cluster .Name ),
70+ },
71+ }
72+
73+ // create the lock
74+ g .Expect (l .Lock (ctx , cluster , machine )).To (Equal (true ))
75+ // re-lock and succeed since machine is still holding it
76+ g .Expect (l .Lock (ctx , cluster , machine )).To (Equal (true ))
77+ }
78+
4779func TestControlPlaneInitMutex_Lock (t * testing.T ) {
4880 g := NewWithT (t )
4981
@@ -245,6 +277,14 @@ func TestControlPlaneInitMutex_UnLock(t *testing.T) {
245277 },
246278 shouldRelease : false ,
247279 },
280+ {
281+ name : "should release lock if config map disappears on deletion" ,
282+ client : & fakeClient {
283+ Client : fake .NewClientBuilder ().WithObjects (configMap ).Build (),
284+ deleteError : apierrors .NewNotFound (schema.GroupResource {Group : "" , Resource : "configmaps" }, fmt .Sprintf ("%s-controlplane" , uid )),
285+ },
286+ shouldRelease : true ,
287+ },
248288 {
249289 name : "should release lock if config map does not exist" ,
250290 client : & fakeClient {
0 commit comments