5
5
import org .junit .jupiter .api .Test ;
6
6
import org .junit .jupiter .api .TestInfo ;
7
7
8
+ import io .fabric8 .kubernetes .api .model .ConfigMap ;
8
9
import io .fabric8 .kubernetes .api .model .NamespaceBuilder ;
9
10
import io .fabric8 .kubernetes .api .model .ObjectMetaBuilder ;
10
11
import io .fabric8 .kubernetes .client .KubernetesClient ;
16
17
import io .javaoperatorsdk .operator .sample .dependentssa .DependnetSSACustomResource ;
17
18
import io .javaoperatorsdk .operator .sample .dependentssa .SSAConfigMapDependent ;
18
19
20
+ import static io .javaoperatorsdk .operator .api .config .ControllerConfiguration .FABRIC8_CLIENT_DEFAULT_FIELD_MANAGER ;
19
21
import static org .assertj .core .api .Assertions .assertThat ;
20
22
import static org .awaitility .Awaitility .await ;
21
23
@@ -30,9 +32,11 @@ class DependentSSAMigrationIT {
30
32
31
33
@ BeforeEach
32
34
void setup (TestInfo testInfo ) {
35
+ SSAConfigMapDependent .NUMBER_OF_UPDATES .set (0 );
33
36
LocallyRunOperatorExtension .applyCrd (DependnetSSACustomResource .class , client );
34
37
testInfo .getTestMethod ().ifPresent (method -> {
35
38
namespace = KubernetesResourceUtil .sanitizeName (method .getName ());
39
+ cleanup ();
36
40
client .namespaces ().resource (new NamespaceBuilder ().withMetadata (new ObjectMetaBuilder ()
37
41
.withName (namespace )
38
42
.build ()).build ()).create ();
@@ -48,16 +52,33 @@ void cleanup() {
48
52
49
53
@ Test
50
54
void migratesFromLegacyToWorksAndBack () {
51
- SSAConfigMapDependent .NUMBER_OF_UPDATES .set (0 );
52
- var legacyOperator = createOperator (client , true );
53
- DependnetSSACustomResource testResource = reconcileWithLegacyOpetor (legacyOperator );
55
+ var legacyOperator = createOperator (client , true , null );
56
+ DependnetSSACustomResource testResource = reconcileWithLegacyOperator (legacyOperator );
54
57
55
- var operator = createOperator (client , false );
58
+ var operator = createOperator (client , false , null );
56
59
testResource = reconcileWithNewApproach (testResource , operator );
60
+ var cm = getDependentConfigMap ();
61
+ assertThat (cm .getMetadata ().getManagedFields ()).hasSize (2 );
57
62
58
63
reconcileAgainWithLegacy (legacyOperator , testResource );
59
64
}
60
65
66
+ @ Test
67
+ void usingDefaultFieldManagerDoesNotCreatesANewOneWithApplyOperation () {
68
+ var legacyOperator = createOperator (client , true , null );
69
+ DependnetSSACustomResource testResource = reconcileWithLegacyOperator (legacyOperator );
70
+
71
+ var operator = createOperator (client , false ,
72
+ FABRIC8_CLIENT_DEFAULT_FIELD_MANAGER );
73
+ reconcileWithNewApproach (testResource , operator );
74
+
75
+ var cm = getDependentConfigMap ();
76
+
77
+ assertThat (cm .getMetadata ().getManagedFields ()).hasSize (2 );
78
+ assertThat (cm .getMetadata ().getManagedFields ())
79
+ .allMatch (fm -> fm .getManager ().equals (FABRIC8_CLIENT_DEFAULT_FIELD_MANAGER ));
80
+ }
81
+
61
82
private void reconcileAgainWithLegacy (Operator legacyOperator ,
62
83
DependnetSSACustomResource testResource ) {
63
84
legacyOperator .start ();
@@ -67,7 +88,7 @@ private void reconcileAgainWithLegacy(Operator legacyOperator,
67
88
client .resource (testResource ).update ();
68
89
69
90
await ().untilAsserted (() -> {
70
- var cm = client . configMaps (). inNamespace ( namespace ). withName ( TEST_RESOURCE_NAME ). get ();
91
+ var cm = getDependentConfigMap ();
71
92
assertThat (cm .getData ()).containsEntry (SSAConfigMapDependent .DATA_KEY , INITIAL_VALUE );
72
93
});
73
94
@@ -79,10 +100,8 @@ private DependnetSSACustomResource reconcileWithNewApproach(
79
100
operator .start ();
80
101
81
102
await ().untilAsserted (() -> {
82
- var cm = client . configMaps (). inNamespace ( namespace ). withName ( TEST_RESOURCE_NAME ). get ();
103
+ var cm = getDependentConfigMap ();
83
104
assertThat (cm ).isNotNull ();
84
- // todo there will be a second manager? both managing
85
- assertThat (cm .getMetadata ().getManagedFields ()).hasSize (2 );
86
105
assertThat (cm .getData ()).hasSize (1 );
87
106
});
88
107
@@ -91,20 +110,24 @@ private DependnetSSACustomResource reconcileWithNewApproach(
91
110
testResource = client .resource (testResource ).update ();
92
111
93
112
await ().untilAsserted (() -> {
94
- var cm = client . configMaps (). inNamespace ( namespace ). withName ( TEST_RESOURCE_NAME ). get ();
113
+ var cm = getDependentConfigMap ();
95
114
assertThat (cm .getData ()).containsEntry (SSAConfigMapDependent .DATA_KEY , CHANGED_VALUE );
96
115
});
97
116
operator .stop ();
98
117
return testResource ;
99
118
}
100
119
101
- private DependnetSSACustomResource reconcileWithLegacyOpetor (Operator legacyOperator ) {
120
+ private ConfigMap getDependentConfigMap () {
121
+ return client .configMaps ().inNamespace (namespace ).withName (TEST_RESOURCE_NAME ).get ();
122
+ }
123
+
124
+ private DependnetSSACustomResource reconcileWithLegacyOperator (Operator legacyOperator ) {
102
125
legacyOperator .start ();
103
126
104
127
var testResource = client .resource (testResource ()).create ();
105
128
106
129
await ().untilAsserted (() -> {
107
- var cm = client . configMaps (). inNamespace ( namespace ). withName ( TEST_RESOURCE_NAME ). get ();
130
+ var cm = getDependentConfigMap ();
108
131
assertThat (cm ).isNotNull ();
109
132
assertThat (cm .getMetadata ().getManagedFields ()).hasSize (1 );
110
133
assertThat (cm .getData ()).hasSize (1 );
@@ -114,11 +137,18 @@ private DependnetSSACustomResource reconcileWithLegacyOpetor(Operator legacyOper
114
137
return testResource ;
115
138
}
116
139
117
- private Operator createOperator (KubernetesClient client , boolean legacyDependentHandling ) {
140
+
141
+ private Operator createOperator (KubernetesClient client , boolean legacyDependentHandling ,
142
+ String fieldManager ) {
118
143
Operator operator = new Operator (client ,
119
144
o -> o .withLegacyCreateUpdateAndMatchingForDependentResources (legacyDependentHandling )
120
145
.withCloseClientOnStop (false ));
121
- operator .register (new DependentSSAReconciler (), o -> o .settingNamespace (namespace ));
146
+ operator .register (new DependentSSAReconciler (), o -> {
147
+ o .settingNamespace (namespace );
148
+ if (fieldManager != null ) {
149
+ o .withFieldManager (fieldManager );
150
+ }
151
+ });
122
152
return operator ;
123
153
}
124
154
0 commit comments