11package io .javaoperatorsdk .operator .api .reconciler ;
22
3+ import java .util .Map ;
4+
35import org .junit .jupiter .api .Test ;
46
57import io .fabric8 .kubeapitest .junit .EnableKubeAPIServer ;
8+ import io .fabric8 .kubernetes .api .model .ConfigMap ;
69import io .fabric8 .kubernetes .api .model .ConfigMapBuilder ;
710import io .fabric8 .kubernetes .api .model .ObjectMetaBuilder ;
811import io .fabric8 .kubernetes .client .KubernetesClient ;
@@ -19,27 +22,55 @@ class PrimaryUpdateAndCacheUtilsIntegrationTest {
1922
2023 @ Test
2124 void testFinalizerAddAndRemoval () {
22- var cm =
23- client
24- .resource (
25- new ConfigMapBuilder ()
26- .withMetadata (
27- new ObjectMetaBuilder ()
28- .withName (TEST_RESOURCE_NAME )
29- .withNamespace (DEFAULT_NS )
30- .build ())
31- .build ())
32- .create ();
33-
25+ var cm = createConfigMap ();
3426 PrimaryUpdateAndCacheUtils .addFinalizer (client , cm , FINALIZER );
3527
36- cm = client . configMaps (). inNamespace ( DEFAULT_NS ). withName ( TEST_RESOURCE_NAME ). get ();
28+ cm = getTestConfigMap ();
3729 assertThat (cm .getMetadata ().getFinalizers ()).containsExactly (FINALIZER );
3830
3931 PrimaryUpdateAndCacheUtils .removeFinalizer (client , cm , FINALIZER );
4032
41- cm = client . configMaps (). inNamespace ( DEFAULT_NS ). withName ( TEST_RESOURCE_NAME ). get ();
33+ cm = getTestConfigMap ();
4234 assertThat (cm .getMetadata ().getFinalizers ()).isEmpty ();
4335 client .resource (cm ).delete ();
4436 }
37+
38+ private static ConfigMap getTestConfigMap () {
39+ return client .configMaps ().inNamespace (DEFAULT_NS ).withName (TEST_RESOURCE_NAME ).get ();
40+ }
41+
42+ @ Test
43+ void testFinalizerAddRetryOnOptimisticLockFailure () {
44+ var cm = createConfigMap ();
45+ // update resource, so it has a new version on the server
46+ cm .setData (Map .of ("k" , "v" ));
47+ client .resource (cm ).update ();
48+
49+ PrimaryUpdateAndCacheUtils .addFinalizer (client , cm , FINALIZER );
50+
51+ cm = getTestConfigMap ();
52+ assertThat (cm .getMetadata ().getFinalizers ()).containsExactly (FINALIZER );
53+
54+ cm .setData (Map .of ("k2" , "v2" ));
55+ client .resource (cm ).update ();
56+
57+ PrimaryUpdateAndCacheUtils .removeFinalizer (client , cm , FINALIZER );
58+ cm = getTestConfigMap ();
59+ assertThat (cm .getMetadata ().getFinalizers ()).isEmpty ();
60+
61+ client .resource (cm ).delete ();
62+ }
63+
64+ private static ConfigMap createConfigMap () {
65+ return client
66+ .resource (
67+ new ConfigMapBuilder ()
68+ .withMetadata (
69+ new ObjectMetaBuilder ()
70+ .withName (TEST_RESOURCE_NAME )
71+ .withNamespace (DEFAULT_NS )
72+ .build ())
73+ .build ())
74+ .create ();
75+ }
4576}
0 commit comments