@@ -73,6 +73,59 @@ def city(self, endpoint):
73
73
mockGeoIP2 = MockGeoIP2 ()
74
74
75
75
76
+ class MockKazoo (MagicMock ):
77
+
78
+ class KazooClient :
79
+
80
+ def __init__ (self , ** kwargs ):
81
+ self .base = dict ()
82
+
83
+ def _parse_path (self , path ):
84
+ return path .split ('/' )[1 :]
85
+
86
+ def _get_leaf_node (self , node_path ):
87
+ parent = self .base
88
+ for n in node_path :
89
+ parent = parent [n ]
90
+ return parent
91
+
92
+ def start (self , ** kwargs ):
93
+ pass
94
+
95
+ def stop (self , ** kwargs ):
96
+ pass
97
+
98
+ def ensure_path (self , path , ** kwargs ):
99
+ nodes = self ._parse_path (path )
100
+ parent = self .base
101
+ for n in nodes :
102
+ if n not in parent :
103
+ parent [n ] = dict ()
104
+ parent = parent [n ]
105
+
106
+ def create (self , path , data , ** kwargs ):
107
+ nodes = self ._parse_path (path )
108
+ parent = self ._get_leaf_node (nodes [:- 1 ])
109
+ parent [nodes [- 1 ]] = data
110
+
111
+ def get_children (self , path , ** kwargs ):
112
+ nodes = self ._parse_path (path )
113
+ parent = self ._get_leaf_node (nodes )
114
+ return list (parent .keys ())
115
+
116
+ def get (self , path , ** kwargs ):
117
+ nodes = self ._parse_path (path )
118
+ return self ._get_leaf_node (nodes ), None
119
+
120
+ def delete (self , path , ** kwargs ):
121
+ nodes = self ._parse_path (path )
122
+ parent = self ._get_leaf_node (nodes [:- 1 ])
123
+ del parent [nodes [- 1 ]]
124
+
125
+
126
+ mockKazoo = MockKazoo ()
127
+
128
+
76
129
TEST_DEFAULT_NM = {
77
130
"meta" : {
78
131
"vtag" : {
@@ -184,13 +237,86 @@ def city(self, endpoint):
184
237
--d41d8cd98f00b204e9800998ecf8427e--
185
238
"""
186
239
240
+ TEST_DYNAMIC_NM_1 = {
241
+ "meta" : {
242
+ "vtag" : {
243
+ "resource-id" : "dynamic-networkmap" ,
244
+ "tag" : "da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785"
245
+ }
246
+ },
247
+ "network-map" : {
248
+ "PID1" : {
249
+ "ipv4" : [ "192.0.2.0/24" , "198.51.100.0/25" ]
250
+ },
251
+ "PID2" : {
252
+ "ipv4" : [ "198.51.100.128/25" ]
253
+ },
254
+ "PID0" : {
255
+ "ipv4" : [ "0.0.0.0/0" ],
256
+ "ipv6" : [ "::/0" ]
257
+ }
258
+ }
259
+ }
260
+
261
+ TEST_DYNAMIC_NM_2 = {
262
+ "meta" : {
263
+ "vtag" : {
264
+ "resource-id" : "dynamic-networkmap" ,
265
+ "tag" : "8124fa5960796ba5d9295d1bb094563fe77fff03"
266
+ }
267
+ },
268
+ "network-map" : {
269
+ "PID1" : {
270
+ "ipv4" : [ "192.0.2.0/24" , "198.51.100.0/25" ]
271
+ },
272
+ "PID2" : {
273
+ "ipv4" : [ "198.51.100.128/25" ]
274
+ },
275
+ "PID3" : {
276
+ "ipv4" : [ "192.0.3.0/24" ]
277
+ },
278
+ "PID0" : {
279
+ "ipv4" : [ "0.0.0.0/0" ],
280
+ "ipv6" : [ "::/0" ]
281
+ }
282
+ }
283
+ }
284
+
285
+ TEST_DYNAMIC_NM_3 = {
286
+ "meta" : {
287
+ "vtag" : {
288
+ "resource-id" : "dynamic-networkmap" ,
289
+ "tag" : "dafb9c1b9a78d00ab6896c09b8e350f727fd966c"
290
+ }
291
+ },
292
+ "network-map" : {
293
+ "PID1" : {
294
+ "ipv4" : [ "192.0.2.0/24" , "198.51.100.0/24" ]
295
+ },
296
+ "PID3" : {
297
+ "ipv4" : [ "192.0.3.0/24" ]
298
+ },
299
+ "PID0" : {
300
+ "ipv4" : [ "0.0.0.0/0" ],
301
+ "ipv6" : [ "::/0" ]
302
+ }
303
+ }
304
+ }
305
+
187
306
MOCK = [
188
307
{
189
308
'uri' : 'http://localhost:8181/alto/networkmap/default-networkmap' ,
190
309
'headers' : {'content-type' : ALTO_CTYPE_NM },
191
310
'json' : TEST_DEFAULT_NM ,
192
311
'status_code' : 200
193
312
},
313
+ {
314
+ 'uri' : 'https://alto.example.com/networkmap/dynamic-networkmap' ,
315
+ 'headers' : {'content-type' : ALTO_CTYPE_NM },
316
+ 'json_alt' : [TEST_DYNAMIC_NM_1 , TEST_DYNAMIC_NM_2 , TEST_DYNAMIC_NM_3 ],
317
+ 'index' : 0 ,
318
+ 'status_code' : 200
319
+ },
194
320
{
195
321
'uri' : 'http://localhost:8181/alto/costmap/default-costmap' ,
196
322
'headers' : {'content-type' : ALTO_CTYPE_CM },
@@ -231,6 +357,7 @@ def __init__(self, headers=dict(), json_data=None, text_data=None, status_code=2
231
357
self .json_data = json_data
232
358
self .status_code = status_code
233
359
self .text = text_data or json .dumps (self .json ())
360
+ self .content = self .text .encode ()
234
361
235
362
def raise_for_status (self ):
236
363
pass
@@ -240,8 +367,20 @@ def json(self):
240
367
241
368
for mock_item in MOCK :
242
369
if uri == mock_item .get ('uri' ):
370
+ json_data = mock_item .get ('json' )
371
+ if 'json_alt' in mock_item :
372
+ json_alt = mock_item .get ('json_alt' )
373
+ if 'index' not in mock_item :
374
+ mock_item ['index' ] = 0
375
+ json_idx = mock_item ['index' ] % len (json_alt )
376
+ json_data = json_alt [json_idx ]
377
+ mock_item ['index' ] = json_idx + 1
243
378
return MockResponse (headers = mock_item .get ('headers' ),
244
- json_data = mock_item . get ( 'json' ) ,
379
+ json_data = json_data ,
245
380
text_data = mock_item .get ('text' ),
246
381
status_code = mock_item .get ('status_code' ))
247
382
383
+
384
+ def mocked_requests_request (method , uri , * args , ** kwargs ):
385
+ return mocked_requests_get (uri )
386
+
0 commit comments