44import java .util .Map ;
55import java .util .Set ;
66
7+ import org .junit .jupiter .api .AfterEach ;
8+ import org .junit .jupiter .api .BeforeEach ;
79import org .junit .jupiter .api .Test ;
810import org .junit .jupiter .api .extension .RegisterExtension ;
911
1214import io .fabric8 .kubernetes .api .model .NamespaceBuilder ;
1315import io .fabric8 .kubernetes .api .model .ObjectMetaBuilder ;
1416import io .fabric8 .kubernetes .client .KubernetesClient ;
17+ import io .javaoperatorsdk .operator .api .reconciler .Constants ;
1518import io .javaoperatorsdk .operator .junit .LocallyRunOperatorExtension ;
1619import io .javaoperatorsdk .operator .sample .changenamespace .ChangeNamespaceTestCustomResource ;
1720import io .javaoperatorsdk .operator .sample .changenamespace .ChangeNamespaceTestReconciler ;
@@ -25,63 +28,98 @@ class ChangeNamespaceIT {
2528 public static final String TEST_RESOURCE_NAME_2 = "test2" ;
2629 public static final String TEST_RESOURCE_NAME_3 = "test3" ;
2730 public static final String ADDITIONAL_TEST_NAMESPACE = "additional-test-namespace" ;
31+
2832 @ RegisterExtension
2933 LocallyRunOperatorExtension operator =
3034 LocallyRunOperatorExtension .builder ().withReconciler (new ChangeNamespaceTestReconciler ())
3135 .build ();
3236
37+ @ BeforeEach
38+ void setup () {
39+ client ().namespaces ().resource (additionalTestNamespace ()).create ();
40+ }
41+
42+ @ AfterEach
43+ void cleanup () {
44+ client ().namespaces ().resource (additionalTestNamespace ()).delete ();
45+ }
46+
3347 @ SuppressWarnings ("rawtypes" )
3448 @ Test
3549 void addNewAndRemoveOldNamespaceTest () {
36- try {
37- var reconciler = operator .getReconcilerOfType (ChangeNamespaceTestReconciler .class );
38- var defaultNamespaceResource = operator .create (customResource (TEST_RESOURCE_NAME_1 ));
50+ var reconciler = operator .getReconcilerOfType (ChangeNamespaceTestReconciler .class );
51+ var defaultNamespaceResource = operator .create (customResource (TEST_RESOURCE_NAME_1 ));
52+
53+ assertReconciled (reconciler , defaultNamespaceResource );
54+ var resourceInAdditionalTestNamespace = createResourceInAdditionalNamespace ();
55+
56+ assertNotReconciled (reconciler , resourceInAdditionalTestNamespace );
57+ // adding additional namespace
58+ RegisteredController registeredController =
59+ operator .getRegisteredControllerForReconcile (ChangeNamespaceTestReconciler .class );
60+ registeredController
61+ .changeNamespaces (Set .of (operator .getNamespace (), ADDITIONAL_TEST_NAMESPACE ));
62+
63+ assertReconciled (reconciler , resourceInAdditionalTestNamespace );
3964
40- await (). pollDelay ( Duration . ofMillis ( 100 )). untilAsserted (() -> assertThat (
41- reconciler . numberOfResourceReconciliations ( defaultNamespaceResource )). isEqualTo ( 2 ));
65+ // removing a namespace
66+ registeredController . changeNamespaces ( Set . of ( ADDITIONAL_TEST_NAMESPACE ));
4267
43- client ().namespaces ().create (additionalTestNamespace ());
44- var resourceInAdditionalTestNamespace = createResourceInTestNamespace ();
4568
46- await ().pollDelay (Duration .ofMillis (200 )).untilAsserted (
47- () -> assertThat (
48- reconciler .numberOfResourceReconciliations (resourceInAdditionalTestNamespace ))
49- .isZero ());
69+ var newResourceInDefaultNamespace = operator .create (customResource (TEST_RESOURCE_NAME_3 ));
70+ assertNotReconciled (reconciler , newResourceInDefaultNamespace );
5071
51- // adding additional namespace
52- RegisteredController registeredController =
53- operator .getRegisteredControllerForReconcile (ChangeNamespaceTestReconciler .class );
54- registeredController
55- .changeNamespaces (Set .of (operator .getNamespace (), ADDITIONAL_TEST_NAMESPACE ));
72+ ConfigMap firstMap = operator .get (ConfigMap .class , TEST_RESOURCE_NAME_1 );
73+ firstMap .setData (Map .of ("data" , "newdata" ));
74+ operator .replace (firstMap );
75+ assertReconciled (reconciler , defaultNamespaceResource );
76+ }
77+
78+ @ Test
79+ void changeToWatchAllNamespaces () {
80+ var reconciler = operator .getReconcilerOfType (ChangeNamespaceTestReconciler .class );
81+ var resourceInAdditionalTestNamespace = createResourceInAdditionalNamespace ();
82+
83+ assertNotReconciled (reconciler , resourceInAdditionalTestNamespace );
5684
57- await ().untilAsserted (
58- () -> assertThat (
59- reconciler .numberOfResourceReconciliations (resourceInAdditionalTestNamespace ))
60- .isEqualTo (2 ));
85+ var registeredController =
86+ operator .getRegisteredControllerForReconcile (ChangeNamespaceTestReconciler .class );
6187
62- // removing a namespace
63- registeredController .changeNamespaces (Set .of (ADDITIONAL_TEST_NAMESPACE ));
88+ registeredController
89+ .changeNamespaces (Set .of (Constants . WATCH_ALL_NAMESPACES ));
6490
65- var newResourceInDefaultNamespace = operator .create (customResource (TEST_RESOURCE_NAME_3 ));
66- await ().pollDelay (Duration .ofMillis (200 ))
67- .untilAsserted (() -> assertThat (
68- reconciler .numberOfResourceReconciliations (newResourceInDefaultNamespace )).isZero ());
91+ assertReconciled (reconciler , resourceInAdditionalTestNamespace );
6992
93+ registeredController .changeNamespaces (Set .of (operator .getNamespace ()));
7094
71- ConfigMap firstMap = operator .get (ConfigMap .class , TEST_RESOURCE_NAME_1 );
72- firstMap .setData (Map .of ("data" , "newdata" ));
73- operator .replace (firstMap );
95+ var defaultNamespaceResource = operator .create (customResource (TEST_RESOURCE_NAME_1 ));
96+ var resource2InAdditionalResource = createResourceInAdditionalNamespace (TEST_RESOURCE_NAME_3 );
97+ assertReconciled (reconciler , defaultNamespaceResource );
98+ assertNotReconciled (reconciler , resource2InAdditionalResource );
99+ }
100+
101+ private static void assertReconciled (ChangeNamespaceTestReconciler reconciler ,
102+ ChangeNamespaceTestCustomResource resourceInAdditionalTestNamespace ) {
103+ await ().untilAsserted (
104+ () -> assertThat (
105+ reconciler .numberOfResourceReconciliations (resourceInAdditionalTestNamespace ))
106+ .isEqualTo (2 ));
107+ }
74108
75- await ().untilAsserted (() -> assertThat (
76- reconciler .numberOfResourceReconciliations (defaultNamespaceResource )).isEqualTo (2 ));
109+ private static void assertNotReconciled (ChangeNamespaceTestReconciler reconciler ,
110+ ChangeNamespaceTestCustomResource resourceInAdditionalTestNamespace ) {
111+ await ().pollDelay (Duration .ofMillis (200 )).untilAsserted (
112+ () -> assertThat (
113+ reconciler .numberOfResourceReconciliations (resourceInAdditionalTestNamespace ))
114+ .isZero ());
115+ }
77116
78- } finally {
79- client ().namespaces ().delete (additionalTestNamespace ());
80- }
117+ private ChangeNamespaceTestCustomResource createResourceInAdditionalNamespace () {
118+ return createResourceInAdditionalNamespace (TEST_RESOURCE_NAME_2 );
81119 }
82120
83- private ChangeNamespaceTestCustomResource createResourceInTestNamespace ( ) {
84- var res = customResource (TEST_RESOURCE_NAME_2 );
121+ private ChangeNamespaceTestCustomResource createResourceInAdditionalNamespace ( String name ) {
122+ var res = customResource (name );
85123 return client ().resources (ChangeNamespaceTestCustomResource .class )
86124 .inNamespace (ADDITIONAL_TEST_NAMESPACE )
87125 .create (res );
0 commit comments