Enable black in tox.ini
[osm/PLA.git] / osm_pla / test / test_mznmodels.py
1 # Copyright 2019 ArctosLabs Scandinavia AB
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12 # implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 # Note:
17 # This unit test file is generated -
18 # from: c:\Users\LG\Desktop\plarepo\documents\Test\pla_algo_test (pr_update_4).xlsx
19 # by code generator: mzntestcasegenerator.py
20 # at: 2019-12-04 09:26:38.412430
21 #############
22
23 import datetime
24 import logging
25 from unittest import TestCase
26
27 from osm_pla.placement.mznplacement import MznPlacementConductor, MznModelGenerator
28
29
30 class TestMznModels(TestCase):
31 def test_mznmodel_scenario1_subtestcase1(self):
32 # generate the model
33 ns_placement_data = {
34 "vim_accounts": [
35 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
36 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
37 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
38 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
39 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
40 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
41 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
42 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
43 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
44 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
45 ],
46 "trp_link_latency": [
47 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
48 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
49 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
50 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
51 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
52 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
53 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
54 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
55 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
56 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
57 ],
58 "trp_link_jitter": [
59 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
60 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
61 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
62 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
63 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
64 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
65 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
66 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
67 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
68 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
69 ],
70 "trp_link_price_list": [
71 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
72 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
73 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
74 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
75 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
76 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
77 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
78 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
79 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
80 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
81 ],
82 "ns_desc": [
83 {
84 "vnf_id": "1",
85 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
86 },
87 {
88 "vnf_id": "2",
89 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
90 },
91 {
92 "vnf_id": "3",
93 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
94 },
95 ],
96 "vld_desc": [
97 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
98 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
99 ],
100 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
101 }
102
103 mg = MznModelGenerator(logging.getLogger(__name__))
104 test_mzn_model = mg.create_model(ns_placement_data)
105
106 # run the model
107 expected_result = [
108 {
109 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
110 "member-vnf-index": "1",
111 },
112 {
113 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
114 "member-vnf-index": "2",
115 },
116 {
117 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
118 "member-vnf-index": "3",
119 },
120 ]
121
122 mpc = MznPlacementConductor(logging.getLogger(__name__))
123 placement = mpc._run_placement_model(
124 mzn_model=test_mzn_model,
125 ns_desc=[
126 {
127 "vnf_id": "1",
128 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
129 },
130 {
131 "vnf_id": "2",
132 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
133 },
134 {
135 "vnf_id": "3",
136 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
137 },
138 ],
139 )
140 # sort the result to ease assert with expected result
141 if not placement[0]:
142 sorted_placement = placement
143 else:
144 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
145 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
146
147 def test_mznmodel_scenario1_subtestcase2(self):
148 # generate the model
149 ns_placement_data = {
150 "vim_accounts": [
151 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
152 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
153 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
154 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
155 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
156 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
157 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
158 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
159 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
160 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
161 ],
162 "trp_link_latency": [
163 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
164 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
165 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
166 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
167 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
168 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
169 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
170 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
171 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
172 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
173 ],
174 "trp_link_jitter": [
175 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
176 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
177 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
178 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
179 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
180 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
181 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
182 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
183 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
184 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
185 ],
186 "trp_link_price_list": [
187 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
188 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
189 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
190 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
191 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
192 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
193 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
194 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
195 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
196 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
197 ],
198 "ns_desc": [
199 {
200 "vnf_id": "1",
201 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
202 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
203 },
204 {
205 "vnf_id": "2",
206 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
207 },
208 {
209 "vnf_id": "3",
210 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
211 },
212 ],
213 "vld_desc": [
214 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
215 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
216 ],
217 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
218 }
219
220 mg = MznModelGenerator(logging.getLogger(__name__))
221 test_mzn_model = mg.create_model(ns_placement_data)
222
223 # run the model
224 expected_result = [
225 {
226 "vimAccountId": "33333333-38f5-438d-b8ee-3f93b3531f87",
227 "member-vnf-index": "1",
228 },
229 {
230 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
231 "member-vnf-index": "2",
232 },
233 {
234 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
235 "member-vnf-index": "3",
236 },
237 ]
238
239 mpc = MznPlacementConductor(logging.getLogger(__name__))
240 placement = mpc._run_placement_model(
241 mzn_model=test_mzn_model,
242 ns_desc=[
243 {
244 "vnf_id": "1",
245 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
246 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
247 },
248 {
249 "vnf_id": "2",
250 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
251 },
252 {
253 "vnf_id": "3",
254 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
255 },
256 ],
257 )
258 # sort the result to ease assert with expected result
259 if not placement[0]:
260 sorted_placement = placement
261 else:
262 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
263 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
264
265 def test_mznmodel_scenario1_subtestcase3(self):
266 # generate the model
267 ns_placement_data = {
268 "vim_accounts": [
269 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
270 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
271 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
272 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
273 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
274 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
275 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
276 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
277 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
278 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
279 ],
280 "trp_link_latency": [
281 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
282 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
283 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
284 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
285 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
286 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
287 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
288 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
289 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
290 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
291 ],
292 "trp_link_jitter": [
293 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
294 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
295 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
296 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
297 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
298 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
299 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
300 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
301 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
302 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
303 ],
304 "trp_link_price_list": [
305 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
306 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
307 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
308 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
309 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
310 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
311 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
312 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
313 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
314 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
315 ],
316 "ns_desc": [
317 {
318 "vnf_id": "1",
319 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
320 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
321 },
322 {
323 "vnf_id": "2",
324 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
325 },
326 {
327 "vnf_id": "3",
328 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
329 },
330 ],
331 "vld_desc": [
332 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
333 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
334 ],
335 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
336 }
337
338 mg = MznModelGenerator(logging.getLogger(__name__))
339 test_mzn_model = mg.create_model(ns_placement_data)
340
341 # run the model
342 expected_result = [
343 {
344 "vimAccountId": "22222222-38f5-438d-b8ee-3f93b3531f87",
345 "member-vnf-index": "1",
346 },
347 {
348 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
349 "member-vnf-index": "2",
350 },
351 {
352 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
353 "member-vnf-index": "3",
354 },
355 ]
356
357 mpc = MznPlacementConductor(logging.getLogger(__name__))
358 placement = mpc._run_placement_model(
359 mzn_model=test_mzn_model,
360 ns_desc=[
361 {
362 "vnf_id": "1",
363 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
364 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
365 },
366 {
367 "vnf_id": "2",
368 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
369 },
370 {
371 "vnf_id": "3",
372 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
373 },
374 ],
375 )
376 # sort the result to ease assert with expected result
377 if not placement[0]:
378 sorted_placement = placement
379 else:
380 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
381 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
382
383 def test_mznmodel_scenario1_subtestcase4(self):
384 # generate the model
385 ns_placement_data = {
386 "vim_accounts": [
387 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
388 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
389 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
390 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
391 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
392 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
393 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
394 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
395 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
396 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
397 ],
398 "trp_link_latency": [
399 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
400 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
401 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
402 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
403 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
404 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
405 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
406 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
407 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
408 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
409 ],
410 "trp_link_jitter": [
411 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
412 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
413 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
414 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
415 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
416 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
417 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
418 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
419 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
420 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
421 ],
422 "trp_link_price_list": [
423 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
424 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
425 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
426 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
427 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
428 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
429 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
430 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
431 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
432 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
433 ],
434 "ns_desc": [
435 {
436 "vnf_id": "1",
437 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
438 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
439 },
440 {
441 "vnf_id": "2",
442 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
443 },
444 {
445 "vnf_id": "3",
446 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
447 },
448 ],
449 "vld_desc": [
450 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
451 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
452 ],
453 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
454 }
455
456 mg = MznModelGenerator(logging.getLogger(__name__))
457 test_mzn_model = mg.create_model(ns_placement_data)
458
459 # run the model
460 expected_result = [
461 {
462 "vimAccountId": "44444444-38f5-438d-b8ee-3f93b3531f87",
463 "member-vnf-index": "1",
464 },
465 {
466 "vimAccountId": "22222222-38f5-438d-b8ee-3f93b3531f87",
467 "member-vnf-index": "2",
468 },
469 {
470 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
471 "member-vnf-index": "3",
472 },
473 ]
474
475 mpc = MznPlacementConductor(logging.getLogger(__name__))
476 placement = mpc._run_placement_model(
477 mzn_model=test_mzn_model,
478 ns_desc=[
479 {
480 "vnf_id": "1",
481 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
482 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
483 },
484 {
485 "vnf_id": "2",
486 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
487 },
488 {
489 "vnf_id": "3",
490 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
491 },
492 ],
493 )
494 # sort the result to ease assert with expected result
495 if not placement[0]:
496 sorted_placement = placement
497 else:
498 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
499 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
500
501 def test_mznmodel_scenario1_subtestcase5(self):
502 # generate the model
503 ns_placement_data = {
504 "vim_accounts": [
505 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
506 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
507 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
508 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
509 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
510 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
511 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
512 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
513 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
514 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
515 ],
516 "trp_link_latency": [
517 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
518 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
519 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
520 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
521 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
522 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
523 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
524 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
525 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
526 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
527 ],
528 "trp_link_jitter": [
529 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
530 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
531 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
532 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
533 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
534 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
535 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
536 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
537 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
538 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
539 ],
540 "trp_link_price_list": [
541 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
542 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
543 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
544 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
545 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
546 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
547 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
548 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
549 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
550 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
551 ],
552 "ns_desc": [
553 {
554 "vnf_id": "1",
555 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
556 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
557 },
558 {
559 "vnf_id": "2",
560 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
561 },
562 {
563 "vnf_id": "3",
564 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
565 },
566 ],
567 "vld_desc": [
568 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
569 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
570 ],
571 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
572 }
573
574 mg = MznModelGenerator(logging.getLogger(__name__))
575 test_mzn_model = mg.create_model(ns_placement_data)
576
577 # run the model
578 expected_result = [
579 {
580 "vimAccountId": "88888888-38f5-438d-b8ee-3f93b3531f87",
581 "member-vnf-index": "1",
582 },
583 {
584 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
585 "member-vnf-index": "2",
586 },
587 {
588 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
589 "member-vnf-index": "3",
590 },
591 ]
592
593 mpc = MznPlacementConductor(logging.getLogger(__name__))
594 placement = mpc._run_placement_model(
595 mzn_model=test_mzn_model,
596 ns_desc=[
597 {
598 "vnf_id": "1",
599 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
600 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
601 },
602 {
603 "vnf_id": "2",
604 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
605 },
606 {
607 "vnf_id": "3",
608 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
609 },
610 ],
611 )
612 # sort the result to ease assert with expected result
613 if not placement[0]:
614 sorted_placement = placement
615 else:
616 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
617 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
618
619 def test_mznmodel_scenario1_subtestcase6(self):
620 # generate the model
621 ns_placement_data = {
622 "vim_accounts": [
623 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
624 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
625 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
626 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
627 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
628 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
629 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
630 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
631 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
632 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
633 ],
634 "trp_link_latency": [
635 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
636 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
637 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
638 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
639 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
640 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
641 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
642 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
643 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
644 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
645 ],
646 "trp_link_jitter": [
647 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
648 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
649 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
650 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
651 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
652 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
653 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
654 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
655 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
656 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
657 ],
658 "trp_link_price_list": [
659 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
660 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
661 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
662 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
663 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
664 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
665 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
666 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
667 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
668 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
669 ],
670 "ns_desc": [
671 {
672 "vnf_id": "1",
673 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
674 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
675 },
676 {
677 "vnf_id": "2",
678 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
679 },
680 {
681 "vnf_id": "3",
682 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
683 },
684 ],
685 "vld_desc": [
686 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
687 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
688 ],
689 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
690 }
691
692 mg = MznModelGenerator(logging.getLogger(__name__))
693 test_mzn_model = mg.create_model(ns_placement_data)
694
695 # run the model
696 expected_result = [
697 {
698 "vimAccountId": "99999999-38f5-438d-b8ee-3f93b3531f87",
699 "member-vnf-index": "1",
700 },
701 {
702 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
703 "member-vnf-index": "2",
704 },
705 {
706 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
707 "member-vnf-index": "3",
708 },
709 ]
710
711 mpc = MznPlacementConductor(logging.getLogger(__name__))
712 placement = mpc._run_placement_model(
713 mzn_model=test_mzn_model,
714 ns_desc=[
715 {
716 "vnf_id": "1",
717 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
718 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
719 },
720 {
721 "vnf_id": "2",
722 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
723 },
724 {
725 "vnf_id": "3",
726 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
727 },
728 ],
729 )
730 # sort the result to ease assert with expected result
731 if not placement[0]:
732 sorted_placement = placement
733 else:
734 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
735 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
736
737 def test_mznmodel_scenario1_subtestcase7(self):
738 # generate the model
739 ns_placement_data = {
740 "vim_accounts": [
741 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
742 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
743 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
744 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
745 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
746 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
747 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
748 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
749 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
750 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
751 ],
752 "trp_link_latency": [
753 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
754 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
755 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
756 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
757 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
758 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
759 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
760 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
761 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
762 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
763 ],
764 "trp_link_jitter": [
765 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
766 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
767 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
768 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
769 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
770 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
771 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
772 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
773 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
774 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
775 ],
776 "trp_link_price_list": [
777 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
778 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
779 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
780 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
781 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
782 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
783 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
784 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
785 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
786 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
787 ],
788 "ns_desc": [
789 {
790 "vnf_id": "1",
791 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
792 "vim_account": "vim11111111_38f5_438d_b8ee_3f93b3531f87",
793 },
794 {
795 "vnf_id": "2",
796 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
797 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
798 },
799 {
800 "vnf_id": "3",
801 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
802 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
803 },
804 ],
805 "vld_desc": [
806 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
807 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
808 ],
809 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
810 }
811
812 mg = MznModelGenerator(logging.getLogger(__name__))
813 test_mzn_model = mg.create_model(ns_placement_data)
814
815 # run the model
816 expected_result = [{}]
817
818 mpc = MznPlacementConductor(logging.getLogger(__name__))
819 placement = mpc._run_placement_model(
820 mzn_model=test_mzn_model,
821 ns_desc=[
822 {
823 "vnf_id": "1",
824 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
825 "vim_account": "vim11111111_38f5_438d_b8ee_3f93b3531f87",
826 },
827 {
828 "vnf_id": "2",
829 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
830 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
831 },
832 {
833 "vnf_id": "3",
834 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
835 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
836 },
837 ],
838 )
839 # sort the result to ease assert with expected result
840 if not placement[0]:
841 sorted_placement = placement
842 else:
843 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
844 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
845
846 def test_mznmodel_scenario1_subtestcase8(self):
847 # generate the model
848 ns_placement_data = {
849 "vim_accounts": [
850 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
851 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
852 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
853 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
854 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
855 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
856 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
857 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
858 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
859 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
860 ],
861 "trp_link_latency": [
862 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
863 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
864 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
865 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
866 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
867 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
868 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
869 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
870 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
871 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
872 ],
873 "trp_link_jitter": [
874 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
875 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
876 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
877 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
878 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
879 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
880 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
881 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
882 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
883 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
884 ],
885 "trp_link_price_list": [
886 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
887 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
888 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
889 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
890 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
891 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
892 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
893 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
894 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
895 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
896 ],
897 "ns_desc": [
898 {
899 "vnf_id": "1",
900 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
901 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
902 },
903 {
904 "vnf_id": "2",
905 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
906 },
907 {
908 "vnf_id": "3",
909 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
910 },
911 ],
912 "vld_desc": [
913 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
914 {"cp_refs": ["2", "3"], "latency": 120, "jitter": 20},
915 ],
916 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
917 }
918
919 mg = MznModelGenerator(logging.getLogger(__name__))
920 test_mzn_model = mg.create_model(ns_placement_data)
921
922 # run the model
923 expected_result = [
924 {
925 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
926 "member-vnf-index": "1",
927 },
928 {
929 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
930 "member-vnf-index": "2",
931 },
932 {
933 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
934 "member-vnf-index": "3",
935 },
936 ]
937
938 mpc = MznPlacementConductor(logging.getLogger(__name__))
939 placement = mpc._run_placement_model(
940 mzn_model=test_mzn_model,
941 ns_desc=[
942 {
943 "vnf_id": "1",
944 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
945 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
946 },
947 {
948 "vnf_id": "2",
949 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
950 },
951 {
952 "vnf_id": "3",
953 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
954 },
955 ],
956 )
957 # sort the result to ease assert with expected result
958 if not placement[0]:
959 sorted_placement = placement
960 else:
961 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
962 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
963
964 def test_mznmodel_scenario2_subtestcase1(self):
965 # generate the model
966 ns_placement_data = {
967 "vim_accounts": [
968 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
969 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
970 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
971 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
972 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
973 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
974 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
975 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
976 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
977 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
978 ],
979 "trp_link_latency": [
980 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
981 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
982 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
983 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
984 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
985 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
986 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
987 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
988 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
989 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
990 ],
991 "trp_link_jitter": [
992 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
993 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
994 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
995 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
996 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
997 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
998 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
999 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1000 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1001 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1002 ],
1003 "trp_link_price_list": [
1004 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1005 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1006 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1007 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1008 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1009 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1010 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1011 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1012 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1013 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1014 ],
1015 "ns_desc": [
1016 {
1017 "vnf_id": "1",
1018 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1019 },
1020 {
1021 "vnf_id": "2",
1022 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1023 },
1024 {
1025 "vnf_id": "3",
1026 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1027 },
1028 ],
1029 "vld_desc": [
1030 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1031 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1032 ],
1033 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1034 }
1035
1036 mg = MznModelGenerator(logging.getLogger(__name__))
1037 test_mzn_model = mg.create_model(ns_placement_data)
1038
1039 # run the model
1040 expected_result = [
1041 {
1042 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1043 "member-vnf-index": "1",
1044 },
1045 {
1046 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1047 "member-vnf-index": "2",
1048 },
1049 {
1050 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1051 "member-vnf-index": "3",
1052 },
1053 ]
1054
1055 mpc = MznPlacementConductor(logging.getLogger(__name__))
1056 placement = mpc._run_placement_model(
1057 mzn_model=test_mzn_model,
1058 ns_desc=[
1059 {
1060 "vnf_id": "1",
1061 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1062 },
1063 {
1064 "vnf_id": "2",
1065 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1066 },
1067 {
1068 "vnf_id": "3",
1069 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1070 },
1071 ],
1072 )
1073 # sort the result to ease assert with expected result
1074 if not placement[0]:
1075 sorted_placement = placement
1076 else:
1077 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1078 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1079
1080 def test_mznmodel_scenario2_subtestcase2(self):
1081 # generate the model
1082 ns_placement_data = {
1083 "vim_accounts": [
1084 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1085 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1086 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1087 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1088 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1089 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1090 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1091 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1092 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1093 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1094 ],
1095 "trp_link_latency": [
1096 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1097 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1098 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1099 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1100 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1101 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1102 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1103 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1104 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1105 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1106 ],
1107 "trp_link_jitter": [
1108 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1109 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1110 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1111 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1112 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1113 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1114 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1115 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1116 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1117 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1118 ],
1119 "trp_link_price_list": [
1120 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1121 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1122 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1123 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1124 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1125 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1126 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1127 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1128 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1129 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1130 ],
1131 "ns_desc": [
1132 {
1133 "vnf_id": "1",
1134 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1135 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1136 },
1137 {
1138 "vnf_id": "2",
1139 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1140 },
1141 {
1142 "vnf_id": "3",
1143 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1144 },
1145 ],
1146 "vld_desc": [
1147 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1148 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1149 ],
1150 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1151 }
1152
1153 mg = MznModelGenerator(logging.getLogger(__name__))
1154 test_mzn_model = mg.create_model(ns_placement_data)
1155
1156 # run the model
1157 expected_result = [
1158 {
1159 "vimAccountId": "44444444-38f5-438d-b8ee-3f93b3531f87",
1160 "member-vnf-index": "1",
1161 },
1162 {
1163 "vimAccountId": "22222222-38f5-438d-b8ee-3f93b3531f87",
1164 "member-vnf-index": "2",
1165 },
1166 {
1167 "vimAccountId": "22222222-38f5-438d-b8ee-3f93b3531f87",
1168 "member-vnf-index": "3",
1169 },
1170 ]
1171
1172 mpc = MznPlacementConductor(logging.getLogger(__name__))
1173 placement = mpc._run_placement_model(
1174 mzn_model=test_mzn_model,
1175 ns_desc=[
1176 {
1177 "vnf_id": "1",
1178 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1179 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1180 },
1181 {
1182 "vnf_id": "2",
1183 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1184 },
1185 {
1186 "vnf_id": "3",
1187 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1188 },
1189 ],
1190 )
1191 # sort the result to ease assert with expected result
1192 if not placement[0]:
1193 sorted_placement = placement
1194 else:
1195 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1196 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1197
1198 def test_mznmodel_scenario2_subtestcase3(self):
1199 # generate the model
1200 ns_placement_data = {
1201 "vim_accounts": [
1202 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1203 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1204 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1205 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1206 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1207 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1208 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1209 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1210 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1211 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1212 ],
1213 "trp_link_latency": [
1214 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1215 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1216 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1217 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1218 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1219 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1220 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1221 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1222 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1223 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1224 ],
1225 "trp_link_jitter": [
1226 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1227 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1228 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1229 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1230 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1231 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1232 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1233 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1234 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1235 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1236 ],
1237 "trp_link_price_list": [
1238 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1239 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1240 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1241 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1242 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1243 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1244 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1245 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1246 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1247 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1248 ],
1249 "ns_desc": [
1250 {
1251 "vnf_id": "1",
1252 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1253 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1254 },
1255 {
1256 "vnf_id": "2",
1257 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1258 },
1259 {
1260 "vnf_id": "3",
1261 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1262 },
1263 ],
1264 "vld_desc": [
1265 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1266 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1267 ],
1268 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1269 }
1270
1271 mg = MznModelGenerator(logging.getLogger(__name__))
1272 test_mzn_model = mg.create_model(ns_placement_data)
1273
1274 # run the model
1275 expected_result = [
1276 {
1277 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
1278 "member-vnf-index": "1",
1279 },
1280 {
1281 "vimAccountId": "66666666-38f5-438d-b8ee-3f93b3531f87",
1282 "member-vnf-index": "2",
1283 },
1284 {
1285 "vimAccountId": "66666666-38f5-438d-b8ee-3f93b3531f87",
1286 "member-vnf-index": "3",
1287 },
1288 ]
1289
1290 mpc = MznPlacementConductor(logging.getLogger(__name__))
1291 placement = mpc._run_placement_model(
1292 mzn_model=test_mzn_model,
1293 ns_desc=[
1294 {
1295 "vnf_id": "1",
1296 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1297 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1298 },
1299 {
1300 "vnf_id": "2",
1301 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1302 },
1303 {
1304 "vnf_id": "3",
1305 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1306 },
1307 ],
1308 )
1309 # sort the result to ease assert with expected result
1310 if not placement[0]:
1311 sorted_placement = placement
1312 else:
1313 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1314 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1315
1316 def test_mznmodel_scenario2_subtestcase4(self):
1317 # generate the model
1318 ns_placement_data = {
1319 "vim_accounts": [
1320 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1321 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1322 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1323 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1324 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1325 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1326 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1327 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1328 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1329 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1330 ],
1331 "trp_link_latency": [
1332 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1333 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1334 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1335 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1336 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1337 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1338 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1339 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1340 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1341 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1342 ],
1343 "trp_link_jitter": [
1344 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1345 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1346 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1347 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1348 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1349 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1350 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1351 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1352 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1353 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1354 ],
1355 "trp_link_price_list": [
1356 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1357 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1358 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1359 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1360 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1361 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1362 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1363 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1364 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1365 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1366 ],
1367 "ns_desc": [
1368 {
1369 "vnf_id": "1",
1370 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1371 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1372 },
1373 {
1374 "vnf_id": "2",
1375 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1376 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1377 },
1378 {
1379 "vnf_id": "3",
1380 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1381 },
1382 ],
1383 "vld_desc": [
1384 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1385 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1386 ],
1387 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1388 }
1389
1390 mg = MznModelGenerator(logging.getLogger(__name__))
1391 test_mzn_model = mg.create_model(ns_placement_data)
1392
1393 # run the model
1394 expected_result = [
1395 {
1396 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
1397 "member-vnf-index": "1",
1398 },
1399 {
1400 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
1401 "member-vnf-index": "2",
1402 },
1403 {
1404 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
1405 "member-vnf-index": "3",
1406 },
1407 ]
1408
1409 mpc = MznPlacementConductor(logging.getLogger(__name__))
1410 placement = mpc._run_placement_model(
1411 mzn_model=test_mzn_model,
1412 ns_desc=[
1413 {
1414 "vnf_id": "1",
1415 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1416 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1417 },
1418 {
1419 "vnf_id": "2",
1420 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1421 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1422 },
1423 {
1424 "vnf_id": "3",
1425 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1426 },
1427 ],
1428 )
1429 # sort the result to ease assert with expected result
1430 if not placement[0]:
1431 sorted_placement = placement
1432 else:
1433 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1434 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1435
1436 def test_mznmodel_scenario2_subtestcase5(self):
1437 # generate the model
1438 ns_placement_data = {
1439 "vim_accounts": [
1440 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1441 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1442 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1443 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1444 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1445 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1446 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1447 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1448 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1449 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1450 ],
1451 "trp_link_latency": [
1452 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1453 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1454 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1455 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1456 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1457 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1458 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1459 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1460 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1461 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1462 ],
1463 "trp_link_jitter": [
1464 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1465 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1466 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1467 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1468 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1469 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1470 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1471 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1472 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1473 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1474 ],
1475 "trp_link_price_list": [
1476 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1477 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1478 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1479 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1480 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1481 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1482 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1483 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1484 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1485 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1486 ],
1487 "ns_desc": [
1488 {
1489 "vnf_id": "1",
1490 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1491 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1492 },
1493 {
1494 "vnf_id": "2",
1495 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1496 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1497 },
1498 {
1499 "vnf_id": "3",
1500 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1501 },
1502 ],
1503 "vld_desc": [
1504 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1505 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1506 ],
1507 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1508 }
1509
1510 mg = MznModelGenerator(logging.getLogger(__name__))
1511 test_mzn_model = mg.create_model(ns_placement_data)
1512
1513 # run the model
1514 expected_result = [{}]
1515
1516 mpc = MznPlacementConductor(logging.getLogger(__name__))
1517 placement = mpc._run_placement_model(
1518 mzn_model=test_mzn_model,
1519 ns_desc=[
1520 {
1521 "vnf_id": "1",
1522 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1523 "vim_account": "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1524 },
1525 {
1526 "vnf_id": "2",
1527 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1528 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1529 },
1530 {
1531 "vnf_id": "3",
1532 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1533 },
1534 ],
1535 )
1536 # sort the result to ease assert with expected result
1537 if not placement[0]:
1538 sorted_placement = placement
1539 else:
1540 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1541 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1542
1543 def test_mznmodel_scenario2_subtestcase6(self):
1544 # generate the model
1545 ns_placement_data = {
1546 "vim_accounts": [
1547 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1548 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1549 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1550 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1551 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1552 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1553 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1554 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1555 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1556 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1557 ],
1558 "trp_link_latency": [
1559 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1560 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1561 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1562 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1563 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1564 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1565 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1566 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1567 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1568 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1569 ],
1570 "trp_link_jitter": [
1571 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1572 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1573 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1574 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1575 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1576 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1577 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1578 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1579 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1580 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1581 ],
1582 "trp_link_price_list": [
1583 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1584 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1585 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1586 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1587 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1588 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1589 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1590 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1591 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1592 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1593 ],
1594 "ns_desc": [
1595 {
1596 "vnf_id": "1",
1597 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1598 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1599 },
1600 {
1601 "vnf_id": "2",
1602 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1603 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1604 },
1605 {
1606 "vnf_id": "3",
1607 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1608 "vim_account": "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1609 },
1610 ],
1611 "vld_desc": [
1612 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
1613 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 6},
1614 ],
1615 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1616 }
1617
1618 mg = MznModelGenerator(logging.getLogger(__name__))
1619 test_mzn_model = mg.create_model(ns_placement_data)
1620
1621 # run the model
1622 expected_result = [{}]
1623
1624 mpc = MznPlacementConductor(logging.getLogger(__name__))
1625 placement = mpc._run_placement_model(
1626 mzn_model=test_mzn_model,
1627 ns_desc=[
1628 {
1629 "vnf_id": "1",
1630 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1631 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1632 },
1633 {
1634 "vnf_id": "2",
1635 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1636 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1637 },
1638 {
1639 "vnf_id": "3",
1640 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1641 "vim_account": "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1642 },
1643 ],
1644 )
1645 # sort the result to ease assert with expected result
1646 if not placement[0]:
1647 sorted_placement = placement
1648 else:
1649 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1650 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1651
1652 def test_mznmodel_scenario3_subtestcase1(self):
1653 # generate the model
1654 ns_placement_data = {
1655 "vim_accounts": [
1656 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1657 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1658 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1659 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1660 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1661 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1662 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1663 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1664 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1665 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1666 ],
1667 "trp_link_latency": [
1668 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1669 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1670 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1671 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1672 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1673 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1674 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1675 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1676 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1677 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1678 ],
1679 "trp_link_jitter": [
1680 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1681 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1682 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1683 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1684 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1685 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1686 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1687 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1688 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1689 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1690 ],
1691 "trp_link_price_list": [
1692 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1693 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1694 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1695 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1696 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1697 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1698 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1699 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1700 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1701 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1702 ],
1703 "ns_desc": [
1704 {
1705 "vnf_id": "1",
1706 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1707 },
1708 {
1709 "vnf_id": "2",
1710 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1711 },
1712 {
1713 "vnf_id": "3",
1714 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1715 },
1716 ],
1717 "vld_desc": [
1718 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
1719 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
1720 ],
1721 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1722 }
1723
1724 mg = MznModelGenerator(logging.getLogger(__name__))
1725 test_mzn_model = mg.create_model(ns_placement_data)
1726
1727 # run the model
1728 expected_result = [
1729 {
1730 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1731 "member-vnf-index": "1",
1732 },
1733 {
1734 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1735 "member-vnf-index": "2",
1736 },
1737 {
1738 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
1739 "member-vnf-index": "3",
1740 },
1741 ]
1742
1743 mpc = MznPlacementConductor(logging.getLogger(__name__))
1744 placement = mpc._run_placement_model(
1745 mzn_model=test_mzn_model,
1746 ns_desc=[
1747 {
1748 "vnf_id": "1",
1749 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1750 },
1751 {
1752 "vnf_id": "2",
1753 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1754 },
1755 {
1756 "vnf_id": "3",
1757 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1758 },
1759 ],
1760 )
1761 # sort the result to ease assert with expected result
1762 if not placement[0]:
1763 sorted_placement = placement
1764 else:
1765 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1766 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1767
1768 def test_mznmodel_scenario3_subtestcase2(self):
1769 # generate the model
1770 ns_placement_data = {
1771 "vim_accounts": [
1772 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1773 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1774 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1775 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1776 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1777 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1778 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1779 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1780 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1781 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1782 ],
1783 "trp_link_latency": [
1784 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1785 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1786 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1787 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1788 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1789 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1790 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1791 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1792 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1793 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1794 ],
1795 "trp_link_jitter": [
1796 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1797 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1798 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1799 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1800 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1801 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1802 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1803 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1804 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1805 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1806 ],
1807 "trp_link_price_list": [
1808 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1809 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1810 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1811 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1812 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1813 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1814 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1815 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1816 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1817 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1818 ],
1819 "ns_desc": [
1820 {
1821 "vnf_id": "1",
1822 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1823 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1824 },
1825 {
1826 "vnf_id": "2",
1827 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1828 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1829 },
1830 {
1831 "vnf_id": "3",
1832 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1833 },
1834 ],
1835 "vld_desc": [
1836 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
1837 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
1838 ],
1839 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1840 }
1841
1842 mg = MznModelGenerator(logging.getLogger(__name__))
1843 test_mzn_model = mg.create_model(ns_placement_data)
1844
1845 # run the model
1846 expected_result = [{}]
1847
1848 mpc = MznPlacementConductor(logging.getLogger(__name__))
1849 placement = mpc._run_placement_model(
1850 mzn_model=test_mzn_model,
1851 ns_desc=[
1852 {
1853 "vnf_id": "1",
1854 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1855 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1856 },
1857 {
1858 "vnf_id": "2",
1859 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1860 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1861 },
1862 {
1863 "vnf_id": "3",
1864 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1865 },
1866 ],
1867 )
1868 # sort the result to ease assert with expected result
1869 if not placement[0]:
1870 sorted_placement = placement
1871 else:
1872 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1873 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1874
1875 def test_mznmodel_scenario3_subtestcase3(self):
1876 # generate the model
1877 ns_placement_data = {
1878 "vim_accounts": [
1879 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1880 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1881 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
1882 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
1883 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
1884 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
1885 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
1886 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1887 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
1888 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
1889 ],
1890 "trp_link_latency": [
1891 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
1892 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
1893 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
1894 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1895 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
1896 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
1897 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
1898 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
1899 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
1900 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
1901 ],
1902 "trp_link_jitter": [
1903 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1904 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1905 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
1906 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1907 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
1908 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
1909 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
1910 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
1911 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
1912 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
1913 ],
1914 "trp_link_price_list": [
1915 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1916 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
1917 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
1918 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
1919 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
1920 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
1921 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
1922 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
1923 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
1924 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
1925 ],
1926 "ns_desc": [
1927 {
1928 "vnf_id": "1",
1929 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1930 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1931 },
1932 {
1933 "vnf_id": "2",
1934 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1935 },
1936 {
1937 "vnf_id": "3",
1938 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1939 },
1940 ],
1941 "vld_desc": [
1942 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
1943 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
1944 ],
1945 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
1946 }
1947
1948 mg = MznModelGenerator(logging.getLogger(__name__))
1949 test_mzn_model = mg.create_model(ns_placement_data)
1950
1951 # run the model
1952 expected_result = [
1953 {
1954 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
1955 "member-vnf-index": "1",
1956 },
1957 {
1958 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
1959 "member-vnf-index": "2",
1960 },
1961 {
1962 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
1963 "member-vnf-index": "3",
1964 },
1965 ]
1966
1967 mpc = MznPlacementConductor(logging.getLogger(__name__))
1968 placement = mpc._run_placement_model(
1969 mzn_model=test_mzn_model,
1970 ns_desc=[
1971 {
1972 "vnf_id": "1",
1973 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
1974 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
1975 },
1976 {
1977 "vnf_id": "2",
1978 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
1979 },
1980 {
1981 "vnf_id": "3",
1982 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
1983 },
1984 ],
1985 )
1986 # sort the result to ease assert with expected result
1987 if not placement[0]:
1988 sorted_placement = placement
1989 else:
1990 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
1991 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
1992
1993 def test_mznmodel_scenario3_subtestcase4(self):
1994 # generate the model
1995 ns_placement_data = {
1996 "vim_accounts": [
1997 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
1998 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
1999 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2000 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2001 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2002 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2003 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2004 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2005 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2006 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2007 ],
2008 "trp_link_latency": [
2009 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2010 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2011 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2012 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2013 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2014 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2015 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2016 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2017 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2018 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2019 ],
2020 "trp_link_jitter": [
2021 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2022 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2023 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2024 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2025 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2026 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2027 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2028 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2029 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2030 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2031 ],
2032 "trp_link_price_list": [
2033 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2034 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2035 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2036 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2037 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2038 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2039 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2040 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2041 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2042 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2043 ],
2044 "ns_desc": [
2045 {
2046 "vnf_id": "1",
2047 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2048 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2049 },
2050 {
2051 "vnf_id": "2",
2052 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2053 },
2054 {
2055 "vnf_id": "3",
2056 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2057 },
2058 ],
2059 "vld_desc": [
2060 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
2061 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
2062 ],
2063 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2064 }
2065
2066 mg = MznModelGenerator(logging.getLogger(__name__))
2067 test_mzn_model = mg.create_model(ns_placement_data)
2068
2069 # run the model
2070 expected_result = [
2071 {
2072 "vimAccountId": "88888888-38f5-438d-b8ee-3f93b3531f87",
2073 "member-vnf-index": "1",
2074 },
2075 {
2076 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
2077 "member-vnf-index": "2",
2078 },
2079 {
2080 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
2081 "member-vnf-index": "3",
2082 },
2083 ]
2084
2085 mpc = MznPlacementConductor(logging.getLogger(__name__))
2086 placement = mpc._run_placement_model(
2087 mzn_model=test_mzn_model,
2088 ns_desc=[
2089 {
2090 "vnf_id": "1",
2091 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2092 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2093 },
2094 {
2095 "vnf_id": "2",
2096 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2097 },
2098 {
2099 "vnf_id": "3",
2100 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2101 },
2102 ],
2103 )
2104 # sort the result to ease assert with expected result
2105 if not placement[0]:
2106 sorted_placement = placement
2107 else:
2108 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2109 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2110
2111 def test_mznmodel_scenario3_subtestcase5(self):
2112 # generate the model
2113 ns_placement_data = {
2114 "vim_accounts": [
2115 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2116 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2117 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2118 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2119 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2120 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2121 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2122 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2123 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2124 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2125 ],
2126 "trp_link_latency": [
2127 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2128 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2129 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2130 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2131 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2132 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2133 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2134 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2135 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2136 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2137 ],
2138 "trp_link_jitter": [
2139 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2140 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2141 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2142 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2143 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2144 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2145 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2146 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2147 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2148 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2149 ],
2150 "trp_link_price_list": [
2151 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2152 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2153 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2154 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2155 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2156 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2157 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2158 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2159 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2160 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2161 ],
2162 "ns_desc": [
2163 {
2164 "vnf_id": "1",
2165 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2166 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2167 },
2168 {
2169 "vnf_id": "2",
2170 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2171 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2172 },
2173 {
2174 "vnf_id": "3",
2175 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2176 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2177 },
2178 ],
2179 "vld_desc": [
2180 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
2181 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
2182 ],
2183 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2184 }
2185
2186 mg = MznModelGenerator(logging.getLogger(__name__))
2187 test_mzn_model = mg.create_model(ns_placement_data)
2188
2189 # run the model
2190 expected_result = [{}]
2191
2192 mpc = MznPlacementConductor(logging.getLogger(__name__))
2193 placement = mpc._run_placement_model(
2194 mzn_model=test_mzn_model,
2195 ns_desc=[
2196 {
2197 "vnf_id": "1",
2198 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2199 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2200 },
2201 {
2202 "vnf_id": "2",
2203 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2204 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2205 },
2206 {
2207 "vnf_id": "3",
2208 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2209 "vim_account": "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2210 },
2211 ],
2212 )
2213 # sort the result to ease assert with expected result
2214 if not placement[0]:
2215 sorted_placement = placement
2216 else:
2217 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2218 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2219
2220 def test_mznmodel_scenario3_subtestcase6(self):
2221 # generate the model
2222 ns_placement_data = {
2223 "vim_accounts": [
2224 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2225 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2226 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2227 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2228 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2229 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2230 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2231 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2232 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2233 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2234 ],
2235 "trp_link_latency": [
2236 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2237 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2238 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2239 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2240 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2241 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2242 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2243 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2244 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2245 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2246 ],
2247 "trp_link_jitter": [
2248 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2249 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2250 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2251 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2252 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2253 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2254 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2255 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2256 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2257 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2258 ],
2259 "trp_link_price_list": [
2260 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2261 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2262 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2263 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2264 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2265 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2266 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2267 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2268 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2269 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2270 ],
2271 "ns_desc": [
2272 {
2273 "vnf_id": "1",
2274 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2275 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2276 },
2277 {
2278 "vnf_id": "2",
2279 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2280 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2281 },
2282 {
2283 "vnf_id": "3",
2284 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2285 },
2286 ],
2287 "vld_desc": [
2288 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 3},
2289 {"cp_refs": ["2", "3"], "latency": 25, "jitter": 6},
2290 ],
2291 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2292 }
2293
2294 mg = MznModelGenerator(logging.getLogger(__name__))
2295 test_mzn_model = mg.create_model(ns_placement_data)
2296
2297 # run the model
2298 expected_result = [
2299 {
2300 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
2301 "member-vnf-index": "1",
2302 },
2303 {
2304 "vimAccountId": "99999999-38f5-438d-b8ee-3f93b3531f87",
2305 "member-vnf-index": "2",
2306 },
2307 {
2308 "vimAccountId": "77777777-38f5-438d-b8ee-3f93b3531f87",
2309 "member-vnf-index": "3",
2310 },
2311 ]
2312
2313 mpc = MznPlacementConductor(logging.getLogger(__name__))
2314 placement = mpc._run_placement_model(
2315 mzn_model=test_mzn_model,
2316 ns_desc=[
2317 {
2318 "vnf_id": "1",
2319 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2320 "vim_account": "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2321 },
2322 {
2323 "vnf_id": "2",
2324 "vnf_price_per_vim": ["10,15,30,30,100,70,40,150,150,150"],
2325 "vim_account": "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2326 },
2327 {
2328 "vnf_id": "3",
2329 "vnf_price_per_vim": ["30,30,60,40,100,90,40,150,200,170"],
2330 },
2331 ],
2332 )
2333 # sort the result to ease assert with expected result
2334 if not placement[0]:
2335 sorted_placement = placement
2336 else:
2337 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2338 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2339
2340 def test_mznmodel_scenario4_subtestcase1(self):
2341 # generate the model
2342 ns_placement_data = {
2343 "vim_accounts": [
2344 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2345 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2346 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2347 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2348 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2349 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2350 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2351 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2352 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2353 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2354 ],
2355 "trp_link_latency": [
2356 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2357 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2358 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2359 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2360 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2361 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2362 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2363 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2364 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2365 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2366 ],
2367 "trp_link_jitter": [
2368 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2369 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2370 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2371 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2372 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2373 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2374 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2375 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2376 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2377 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2378 ],
2379 "trp_link_price_list": [
2380 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2381 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2382 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2383 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2384 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2385 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2386 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2387 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2388 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2389 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2390 ],
2391 "ns_desc": [
2392 {
2393 "vnf_id": "1",
2394 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2395 },
2396 {
2397 "vnf_id": "2",
2398 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2399 },
2400 {
2401 "vnf_id": "3",
2402 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2403 },
2404 {
2405 "vnf_id": "4",
2406 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2407 },
2408 ],
2409 "vld_desc": [
2410 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
2411 {"cp_refs": ["2", "4"], "latency": 50, "jitter": 10},
2412 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 10},
2413 ],
2414 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2415 }
2416
2417 mg = MznModelGenerator(logging.getLogger(__name__))
2418 test_mzn_model = mg.create_model(ns_placement_data)
2419
2420 # run the model
2421 expected_result = [
2422 {
2423 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
2424 "member-vnf-index": "1",
2425 },
2426 {
2427 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
2428 "member-vnf-index": "2",
2429 },
2430 {
2431 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
2432 "member-vnf-index": "3",
2433 },
2434 {
2435 "vimAccountId": "00000000-38f5-438d-b8ee-3f93b3531f87",
2436 "member-vnf-index": "4",
2437 },
2438 ]
2439
2440 mpc = MznPlacementConductor(logging.getLogger(__name__))
2441 placement = mpc._run_placement_model(
2442 mzn_model=test_mzn_model,
2443 ns_desc=[
2444 {
2445 "vnf_id": "1",
2446 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2447 },
2448 {
2449 "vnf_id": "2",
2450 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2451 },
2452 {
2453 "vnf_id": "3",
2454 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2455 },
2456 {
2457 "vnf_id": "4",
2458 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2459 },
2460 ],
2461 )
2462 # sort the result to ease assert with expected result
2463 if not placement[0]:
2464 sorted_placement = placement
2465 else:
2466 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2467 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2468
2469 def test_mznmodel_scenario4_subtestcase2(self):
2470 # generate the model
2471 ns_placement_data = {
2472 "vim_accounts": [
2473 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2474 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2475 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2476 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2477 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2478 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2479 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2480 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2481 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2482 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2483 ],
2484 "trp_link_latency": [
2485 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2486 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2487 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2488 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2489 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2490 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2491 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2492 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2493 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2494 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2495 ],
2496 "trp_link_jitter": [
2497 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2498 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2499 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2500 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2501 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2502 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2503 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2504 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2505 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2506 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2507 ],
2508 "trp_link_price_list": [
2509 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2510 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2511 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2512 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2513 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2514 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2515 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2516 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2517 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2518 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2519 ],
2520 "ns_desc": [
2521 {
2522 "vnf_id": "1",
2523 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2524 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2525 },
2526 {
2527 "vnf_id": "2",
2528 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2529 },
2530 {
2531 "vnf_id": "3",
2532 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2533 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2534 },
2535 {
2536 "vnf_id": "4",
2537 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2538 },
2539 ],
2540 "vld_desc": [
2541 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
2542 {"cp_refs": ["2", "4"], "latency": 50, "jitter": 10},
2543 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 10},
2544 ],
2545 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2546 }
2547
2548 mg = MznModelGenerator(logging.getLogger(__name__))
2549 test_mzn_model = mg.create_model(ns_placement_data)
2550
2551 # run the model
2552 expected_result = [
2553 {
2554 "vimAccountId": "22222222-38f5-438d-b8ee-3f93b3531f87",
2555 "member-vnf-index": "1",
2556 },
2557 {
2558 "vimAccountId": "44444444-38f5-438d-b8ee-3f93b3531f87",
2559 "member-vnf-index": "2",
2560 },
2561 {
2562 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
2563 "member-vnf-index": "3",
2564 },
2565 {
2566 "vimAccountId": "66666666-38f5-438d-b8ee-3f93b3531f87",
2567 "member-vnf-index": "4",
2568 },
2569 ]
2570
2571 mpc = MznPlacementConductor(logging.getLogger(__name__))
2572 placement = mpc._run_placement_model(
2573 mzn_model=test_mzn_model,
2574 ns_desc=[
2575 {
2576 "vnf_id": "1",
2577 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2578 "vim_account": "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2579 },
2580 {
2581 "vnf_id": "2",
2582 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2583 },
2584 {
2585 "vnf_id": "3",
2586 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2587 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2588 },
2589 {
2590 "vnf_id": "4",
2591 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2592 },
2593 ],
2594 )
2595 # sort the result to ease assert with expected result
2596 if not placement[0]:
2597 sorted_placement = placement
2598 else:
2599 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2600 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2601
2602 def test_mznmodel_scenario4_subtestcase3(self):
2603 # generate the model
2604 ns_placement_data = {
2605 "vim_accounts": [
2606 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2607 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2608 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2609 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2610 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2611 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2612 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2613 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2614 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2615 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2616 ],
2617 "trp_link_latency": [
2618 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2619 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2620 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2621 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2622 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2623 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2624 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2625 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2626 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2627 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2628 ],
2629 "trp_link_jitter": [
2630 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2631 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2632 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2633 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2634 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2635 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2636 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2637 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2638 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2639 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2640 ],
2641 "trp_link_price_list": [
2642 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2643 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2644 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2645 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2646 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2647 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2648 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2649 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2650 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2651 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2652 ],
2653 "ns_desc": [
2654 {
2655 "vnf_id": "1",
2656 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2657 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2658 },
2659 {
2660 "vnf_id": "2",
2661 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2662 },
2663 {
2664 "vnf_id": "3",
2665 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2666 },
2667 {
2668 "vnf_id": "4",
2669 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2670 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2671 },
2672 ],
2673 "vld_desc": [
2674 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
2675 {"cp_refs": ["2", "4"], "latency": 50, "jitter": 10},
2676 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 10},
2677 ],
2678 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2679 }
2680
2681 mg = MznModelGenerator(logging.getLogger(__name__))
2682 test_mzn_model = mg.create_model(ns_placement_data)
2683
2684 # run the model
2685 expected_result = [
2686 {
2687 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
2688 "member-vnf-index": "1",
2689 },
2690 {
2691 "vimAccountId": "66666666-38f5-438d-b8ee-3f93b3531f87",
2692 "member-vnf-index": "2",
2693 },
2694 {
2695 "vimAccountId": "66666666-38f5-438d-b8ee-3f93b3531f87",
2696 "member-vnf-index": "3",
2697 },
2698 {
2699 "vimAccountId": "55555555-38f5-438d-b8ee-3f93b3531f87",
2700 "member-vnf-index": "4",
2701 },
2702 ]
2703
2704 mpc = MznPlacementConductor(logging.getLogger(__name__))
2705 placement = mpc._run_placement_model(
2706 mzn_model=test_mzn_model,
2707 ns_desc=[
2708 {
2709 "vnf_id": "1",
2710 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2711 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2712 },
2713 {
2714 "vnf_id": "2",
2715 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2716 },
2717 {
2718 "vnf_id": "3",
2719 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2720 },
2721 {
2722 "vnf_id": "4",
2723 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2724 "vim_account": "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2725 },
2726 ],
2727 )
2728 # sort the result to ease assert with expected result
2729 if not placement[0]:
2730 sorted_placement = placement
2731 else:
2732 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2733 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")
2734
2735 def test_mznmodel_scenario4_subtestcase4(self):
2736 # generate the model
2737 ns_placement_data = {
2738 "vim_accounts": [
2739 "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2740 "vim11111111_38f5_438d_b8ee_3f93b3531f87",
2741 "vim22222222_38f5_438d_b8ee_3f93b3531f87",
2742 "vim33333333_38f5_438d_b8ee_3f93b3531f87",
2743 "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2744 "vim55555555_38f5_438d_b8ee_3f93b3531f87",
2745 "vim66666666_38f5_438d_b8ee_3f93b3531f87",
2746 "vim77777777_38f5_438d_b8ee_3f93b3531f87",
2747 "vim88888888_38f5_438d_b8ee_3f93b3531f87",
2748 "vim99999999_38f5_438d_b8ee_3f93b3531f87",
2749 ],
2750 "trp_link_latency": [
2751 [0, 30, 70, 80, 32767, 32767, 32767, 32767, 32767, 32767],
2752 [30, 0, 75, 60, 32767, 32767, 32767, 32767, 32767, 32767],
2753 [70, 75, 0, 40, 100, 32767, 32767, 32767, 32767, 32767],
2754 [80, 60, 40, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2755 [32767, 32767, 100, 32767, 0, 5, 5, 32767, 32767, 32767],
2756 [32767, 32767, 32767, 32767, 5, 0, 5, 32767, 32767, 32767],
2757 [32767, 32767, 32767, 32767, 5, 5, 0, 32767, 32767, 32767],
2758 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 30, 20],
2759 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 30, 0, 20],
2760 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 20, 20, 0],
2761 ],
2762 "trp_link_jitter": [
2763 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2764 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2765 [5, 5, 0, 10, 5, 32767, 32767, 32767, 32767, 32767],
2766 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2767 [32767, 32767, 5, 32767, 0, 4, 4, 32767, 32767, 32767],
2768 [32767, 32767, 32767, 32767, 4, 0, 10, 32767, 32767, 32767],
2769 [32767, 32767, 32767, 32767, 4, 10, 0, 32767, 32767, 32767],
2770 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 1, 1],
2771 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 0, 1],
2772 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 1, 1, 0],
2773 ],
2774 "trp_link_price_list": [
2775 [0, 5, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2776 [5, 0, 5, 10, 32767, 32767, 32767, 32767, 32767, 32767],
2777 [5, 5, 0, 10, 10, 32767, 32767, 32767, 32767, 32767],
2778 [10, 10, 10, 0, 32767, 32767, 32767, 32767, 32767, 32767],
2779 [32767, 32767, 10, 32767, 0, 20, 20, 32767, 32767, 32767],
2780 [32767, 32767, 32767, 32767, 20, 0, 20, 32767, 32767, 32767],
2781 [32767, 32767, 32767, 32767, 20, 20, 0, 32767, 32767, 32767],
2782 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 0, 15, 15],
2783 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 0, 15],
2784 [32767, 32767, 32767, 32767, 32767, 32767, 32767, 15, 15, 0],
2785 ],
2786 "ns_desc": [
2787 {
2788 "vnf_id": "1",
2789 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2790 "vim_account": "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2791 },
2792 {
2793 "vnf_id": "2",
2794 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2795 },
2796 {
2797 "vnf_id": "3",
2798 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2799 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2800 },
2801 {
2802 "vnf_id": "4",
2803 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2804 },
2805 ],
2806 "vld_desc": [
2807 {"cp_refs": ["1", "2"], "latency": 120, "jitter": 20},
2808 {"cp_refs": ["2", "4"], "latency": 50, "jitter": 10},
2809 {"cp_refs": ["2", "3"], "latency": 20, "jitter": 10},
2810 ],
2811 "generator_data": {"file": __file__, "time": datetime.datetime.now()},
2812 }
2813
2814 mg = MznModelGenerator(logging.getLogger(__name__))
2815 test_mzn_model = mg.create_model(ns_placement_data)
2816
2817 # run the model
2818 expected_result = [{}]
2819
2820 mpc = MznPlacementConductor(logging.getLogger(__name__))
2821 placement = mpc._run_placement_model(
2822 mzn_model=test_mzn_model,
2823 ns_desc=[
2824 {
2825 "vnf_id": "1",
2826 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2827 "vim_account": "vim00000000_38f5_438d_b8ee_3f93b3531f87",
2828 },
2829 {
2830 "vnf_id": "2",
2831 "vnf_price_per_vim": ["15,20,40,40,110,80,50,110,160,210"],
2832 },
2833 {
2834 "vnf_id": "3",
2835 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2836 "vim_account": "vim44444444_38f5_438d_b8ee_3f93b3531f87",
2837 },
2838 {
2839 "vnf_id": "4",
2840 "vnf_price_per_vim": ["5,10,30,30,100,70,40,100,150,200"],
2841 },
2842 ],
2843 )
2844 # sort the result to ease assert with expected result
2845 if not placement[0]:
2846 sorted_placement = placement
2847 else:
2848 sorted_placement = sorted(placement, key=lambda k: k["member-vnf-index"])
2849 self.assertEqual(expected_result, sorted_placement, "Faulty syntax or content")