Coverage for osm_pla/test/test_mznmodels.py: 91%

269 statements  

« prev     ^ index     » next       coverage.py v7.3.1, created at 2024-06-22 10:12 +0000

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 

23import datetime 

24import logging 

25from unittest import TestCase 

26 

27from osm_pla.placement.mznplacement import MznPlacementConductor, MznModelGenerator 

28 

29 

30class 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")