@@ -118,144 +118,6 @@ def test_on_field_data_sync(self):
118
118
{"key" : "newvalue" },
119
119
)
120
120
121
- def test_on_field_data_ns_deleted (self ):
122
- """Don't fail the sync if one of the namespaces was deleted.
123
- """
124
-
125
- mock_v1 = Mock ()
126
-
127
- def read_namespaced_secret (name , namespace , ** kwargs ):
128
- if namespace == "myns2" :
129
- # Old data in the namespaced secret of the myns namespace.
130
- return V1Secret (
131
- api_version = 'v1' ,
132
- data = {"key" : "oldvalue" },
133
- kind = 'Secret' ,
134
- metadata = create_secret_metadata (
135
- name = "mysecret" ,
136
- namespace = "myns2" ,
137
- ),
138
- type = "Opaque" ,
139
- )
140
- else :
141
- # Deleted namespace.
142
- raise ApiException (status = 404 , reason = "Not Found" )
143
-
144
- mock_v1 .read_namespaced_secret = read_namespaced_secret
145
-
146
- create_namespaced_secret_called_count_for_ns2 = 0
147
-
148
- def create_namespaced_secret (namespace , body , ** kwargs ):
149
- if namespace == "myns2" :
150
- nonlocal create_namespaced_secret_called_count_for_ns2
151
- create_namespaced_secret_called_count_for_ns2 += 1
152
- else :
153
- # Deleted namespace.
154
- raise ApiException (status = 404 , reason = "Not Found" )
155
-
156
- mock_v1 .create_namespaced_secret = create_namespaced_secret
157
-
158
- replace_namespaced_secret_called_count_for_ns2 = 0
159
-
160
- def replace_namespaced_secret (name , namespace , body , ** kwargs ):
161
- if namespace == "myns2" :
162
- nonlocal replace_namespaced_secret_called_count_for_ns2
163
- replace_namespaced_secret_called_count_for_ns2 += 1
164
- self .assertEqual (name , csec .name )
165
-
166
- # Namespaced secret should be updated with the new data.
167
- self .assertEqual (
168
- body .data ,
169
- {"key" : "newvalue" },
170
- )
171
-
172
- return V1Secret (
173
- api_version = 'v1' ,
174
- data = body .data ,
175
- kind = 'Secret' ,
176
- metadata = create_secret_metadata (
177
- name = "mysecret" ,
178
- namespace = "myns2" ,
179
- ),
180
- type = "Opaque" ,
181
- )
182
- else :
183
- # Deleted namespace.
184
- raise ApiException (status = 404 , reason = "Not Found" )
185
-
186
- mock_v1 .replace_namespaced_secret = replace_namespaced_secret
187
-
188
- def read_namespace (name , ** kwargs ):
189
- if name != "myns2" :
190
- # Deleted namespace.
191
- raise ApiException (status = 404 , reason = "Not Found" )
192
-
193
- mock_v1 .read_namespace = read_namespace
194
-
195
- patch_clustersecret_status = Mock ()
196
- patch_clustersecret_status .return_value = {
197
- "metadata" : {"name" : "mysecret" , "uid" : "mysecretuid" },
198
- "data" : {"key" : "newvalue" },
199
- "status" : {"create_fn" : {"syncedns" : ["myns2" ]}},
200
- }
201
-
202
- # Old data in the cache.
203
- csec = BaseClusterSecret (
204
- uid = "mysecretuid" ,
205
- name = "mysecret" ,
206
- namespace = "" ,
207
- body = {
208
- "metadata" : {"name" : "mysecret" , "uid" : "mysecretuid" },
209
- "data" : {"key" : "oldvalue" },
210
- "status" : {"create_fn" : {"syncedns" : ["myns1" , "myns2" ]}},
211
- },
212
- synced_namespace = ["myns1" , "myns2" ],
213
- )
214
-
215
- csecs_cache .set_cluster_secret (csec )
216
-
217
- # New data coming into the callback.
218
- new_body = {
219
- "metadata" : {"name" : "mysecret" , "uid" : "mysecretuid" },
220
- "data" : {"key" : "newvalue" },
221
- "status" : {"create_fn" : {"syncedns" : ["myns1" , "myns2" ]}},
222
- }
223
-
224
- with patch ("handlers.v1" , mock_v1 ), \
225
- patch ("handlers.patch_clustersecret_status" , patch_clustersecret_status ):
226
- on_field_data (
227
- old = {"key" : "oldvalue" },
228
- new = {"key" : "newvalue" },
229
- body = new_body ,
230
- meta = kopf .Meta ({"metadata" : {"name" : "mysecret" }}),
231
- name = "mysecret" ,
232
- namespace = None ,
233
- uid = "mysecretuid" ,
234
- logger = self .logger ,
235
- )
236
-
237
- # Namespaced secret should be updated with the new data.
238
- self .assertEqual (replace_namespaced_secret_called_count_for_ns2 , 1 )
239
- self .assertEqual (create_namespaced_secret_called_count_for_ns2 , 0 )
240
-
241
- # The namespace should be deleted from the syncedns status of the clustersecret.
242
- patch_clustersecret_status .assert_called_once_with (
243
- logger = self .logger ,
244
- name = csec .name ,
245
- new_status = {'create_fn' : {'syncedns' : ["myns2" ]}},
246
- custom_objects_api = custom_objects_api ,
247
- )
248
-
249
- # Namespace should be deleted from the cache.
250
- self .assertEqual (
251
- csecs_cache .get_cluster_secret ("mysecretuid" ).body .get ("status" ),
252
- {"create_fn" : {"syncedns" : ["myns2" ]}},
253
- )
254
- self .assertEqual (
255
- csecs_cache .get_cluster_secret ("mysecretuid" ).synced_namespace ,
256
- ["myns2" ],
257
- )
258
-
259
121
def test_create_fn (self ):
260
122
"""Namespace name must be correct in the cache.
261
123
"""
@@ -324,6 +186,7 @@ def test_ns_create(self):
324
186
asyncio .run (
325
187
namespace_watcher (
326
188
logger = self .logger ,
189
+ reason = kopf .Reason ("create" ),
327
190
meta = kopf .Meta ({"metadata" : {"name" : "myns" }}),
328
191
)
329
192
)
0 commit comments