2 ##############################################################################
3 # Copyright (c) 2017 Orange, Inc. and others. All rights reserved.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
16 from common import test_utils
19 class TransportPCEFulltesting(unittest.TestCase):
22 WAITING = 20 # nominal value is 300
26 cls.processes = test_utils.start_tpce()
27 cls.processes = test_utils.start_sims(['xpdra', 'roadma', 'roadmc', 'xpdrc'])
30 def tearDownClass(cls):
31 for process in cls.processes:
32 test_utils.shutdown_process(process)
33 print("all processes killed")
35 def setUp(self): # instruction executed before each test method
36 print("execution of {}".format(self.id().split(".")[-1]))
38 def test_01_connect_xpdrA(self):
39 response = test_utils.mount_device("XPDR-A1", 'xpdra')
40 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
42 def test_02_connect_xpdrC(self):
43 response = test_utils.mount_device("XPDR-C1", 'xpdrc')
44 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
46 def test_03_connect_rdmA(self):
47 response = test_utils.mount_device("ROADM-A1", 'roadma')
48 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
50 def test_04_connect_rdmC(self):
51 response = test_utils.mount_device("ROADM-C1", 'roadmc')
52 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
54 def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
55 response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "1",
56 "ROADM-A1", "1", "SRG1-PP1-TXRX")
57 self.assertEqual(response.status_code, requests.codes.ok)
59 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
62 def test_06_connect_roadmA_PP1_to_xpdrA_N1(self):
63 response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "1",
64 "ROADM-A1", "1", "SRG1-PP1-TXRX")
65 self.assertEqual(response.status_code, requests.codes.ok)
67 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
70 def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
71 response = test_utils.connect_xpdr_to_rdm_request("XPDR-C1", "1", "1",
72 "ROADM-C1", "1", "SRG1-PP1-TXRX")
73 self.assertEqual(response.status_code, requests.codes.ok)
75 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
78 def test_08_connect_roadmC_PP1_to_xpdrC_N1(self):
79 response = test_utils.connect_rdm_to_xpdr_request("XPDR-C1", "1", "1",
80 "ROADM-C1", "1", "SRG1-PP1-TXRX")
81 self.assertEqual(response.status_code, requests.codes.ok)
83 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
86 def test_09_add_omsAttributes_ROADMA_ROADMC(self):
87 # Config ROADMA-ROADMC oms-attributes
88 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
89 "link/ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX/org-openroadm-network-topology:"
90 "OMS-attributes/span")
92 "auto-spanloss": "true",
93 "spanloss-base": 11.4,
94 "spanloss-current": 12,
95 "engineered-spanloss": 12.2,
96 "link-concatenation": [{
99 "SRLG-length": 100000,
101 response = test_utils.put_request(url, data)
102 self.assertEqual(response.status_code, requests.codes.created)
104 def test_10_add_omsAttributes_ROADMC_ROADMA(self):
105 # Config ROADMC-ROADMA oms-attributes
106 url = ("{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:"
107 "link/ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX/org-openroadm-network-topology:"
108 "OMS-attributes/span")
110 "auto-spanloss": "true",
111 "spanloss-base": 11.4,
112 "spanloss-current": 12,
113 "engineered-spanloss": 12.2,
114 "link-concatenation": [{
117 "SRLG-length": 100000,
119 response = test_utils.put_request(url, data)
120 self.assertEqual(response.status_code, requests.codes.created)
122 # test service-create for Eth service from xpdr to xpdr
123 def test_11_create_eth_service1(self):
124 url = "{}/operations/org-openroadm-service:service-create"
126 "sdnc-request-header": {
127 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
128 "rpc-action": "service-create",
129 "request-system-id": "appname",
130 "notification-url": "http://localhost:8585/NotificationServer/notify"
132 "service-name": "service1",
133 "common-id": "ASATT1234567",
134 "connection-type": "service",
136 "service-rate": "100",
137 "node-id": "XPDR-A1",
138 "service-format": "Ethernet",
139 "clli": "SNJSCAMCJP8",
142 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
143 "port-type": "router",
144 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
145 "port-rack": "000000.00",
149 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
150 "lgx-port-name": "LGX Back.3",
151 "lgx-port-rack": "000000.00",
152 "lgx-port-shelf": "00"
157 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
158 "port-type": "router",
159 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
160 "port-rack": "000000.00",
164 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
165 "lgx-port-name": "LGX Back.4",
166 "lgx-port-rack": "000000.00",
167 "lgx-port-shelf": "00"
173 "service-rate": "100",
174 "node-id": "XPDR-C1",
175 "service-format": "Ethernet",
176 "clli": "SNJSCAMCJT4",
179 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
180 "port-type": "router",
181 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
182 "port-rack": "000000.00",
186 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
187 "lgx-port-name": "LGX Back.29",
188 "lgx-port-rack": "000000.00",
189 "lgx-port-shelf": "00"
194 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
195 "port-type": "router",
196 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
197 "port-rack": "000000.00",
201 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
202 "lgx-port-name": "LGX Back.30",
203 "lgx-port-rack": "000000.00",
204 "lgx-port-shelf": "00"
209 "due-date": "2016-11-28T00:00:01Z",
210 "operator-contact": "pw1234"
213 response = test_utils.post_request(url, data)
214 self.assertEqual(response.status_code, requests.codes.ok)
215 res = response.json()
216 self.assertIn('PCE calculation in progress',
217 res['output']['configuration-response-common']['response-message'])
218 time.sleep(self.WAITING)
220 def test_12_get_eth_service1(self):
221 url = "{}/operational/org-openroadm-service:service-list/services/service1"
222 response = test_utils.get_request(url)
223 self.assertEqual(response.status_code, requests.codes.ok)
224 res = response.json()
226 res['services'][0]['administrative-state'], 'inService')
228 res['services'][0]['service-name'], 'service1')
230 res['services'][0]['connection-type'], 'service')
232 res['services'][0]['lifecycle-state'], 'planned')
235 def test_13_check_xc1_ROADMA(self):
236 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
237 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
238 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
239 response = test_utils.get_request(url)
240 self.assertEqual(response.status_code, requests.codes.ok)
241 res = response.json()
242 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
243 self.assertDictEqual(
245 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
246 'opticalControlMode': 'gainLoss',
247 'target-output-power': -3.0
248 }, **res['roadm-connections'][0]),
249 res['roadm-connections'][0]
251 self.assertDictEqual(
252 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
253 res['roadm-connections'][0]['source'])
254 self.assertDictEqual(
255 {'dst-if': 'DEG2-TTP-TXRX-nmc-1'},
256 res['roadm-connections'][0]['destination'])
259 def test_14_check_xc1_ROADMC(self):
260 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
261 "node/ROADM-C1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
262 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
263 response = test_utils.get_request(url)
264 self.assertEqual(response.status_code, requests.codes.ok)
265 res = response.json()
266 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
267 self.assertDictEqual(
269 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
270 'opticalControlMode': 'gainLoss',
271 'target-output-power': -3.0
272 }, **res['roadm-connections'][0]),
273 res['roadm-connections'][0]
275 self.assertDictEqual(
276 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
277 res['roadm-connections'][0]['source'])
278 self.assertDictEqual(
279 {'dst-if': 'DEG1-TTP-TXRX-nmc-1'},
280 res['roadm-connections'][0]['destination'])
283 def test_15_check_topo_XPDRA(self):
284 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
285 response = test_utils.get_request(url)
286 self.assertEqual(response.status_code, requests.codes.ok)
287 res = response.json()
288 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
290 if ele['tp-id'] == 'XPDR1-NETWORK1':
291 self.assertEqual({u'frequency': 196.1,
293 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
294 if ele['tp-id'] == 'XPDR1-CLIENT2' or ele['tp-id'] == 'XPDR1-CLIENT1':
295 self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele))
296 if ele['tp-id'] == 'XPDR1-NETWORK2':
297 self.assertNotIn('org-openroadm-network-topology:xpdr-network-attributes', dict.keys(ele))
300 def test_16_check_topo_ROADMA_SRG1(self):
301 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
302 response = test_utils.get_request(url)
303 self.assertEqual(response.status_code, requests.codes.ok)
304 res = response.json()
305 self.assertNotIn({u'index': 1},
306 res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
307 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
309 if ele['tp-id'] == 'SRG1-PP1-TXRX':
310 self.assertIn({u'index': 1, u'frequency': 196.1,
312 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
313 if ele['tp-id'] == 'SRG1-PP2-TXRX':
314 self.assertNotIn('used-wavelength', dict.keys(ele))
317 def test_17_check_topo_ROADMA_DEG1(self):
318 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
319 response = test_utils.get_request(url)
320 self.assertEqual(response.status_code, requests.codes.ok)
321 res = response.json()
322 self.assertNotIn({u'index': 1},
323 res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
324 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
326 if ele['tp-id'] == 'DEG2-CTP-TXRX':
327 self.assertIn({u'index': 1, u'frequency': 196.1,
329 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
330 if ele['tp-id'] == 'DEG2-TTP-TXRX':
331 self.assertIn({u'index': 1, u'frequency': 196.1,
333 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
336 def test_18_connect_xprdA_N2_to_roadmA_PP2(self):
337 response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "2",
338 "ROADM-A1", "1", "SRG1-PP2-TXRX")
339 self.assertEqual(response.status_code, requests.codes.ok)
340 res = response.json()
341 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
344 def test_19_connect_roadmA_PP2_to_xpdrA_N2(self):
345 response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "2",
346 "ROADM-A1", "1", "SRG1-PP2-TXRX")
347 self.assertEqual(response.status_code, requests.codes.ok)
348 res = response.json()
349 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
352 def test_20_connect_xprdC_N2_to_roadmC_PP2(self):
353 response = test_utils.connect_xpdr_to_rdm_request("XPDR-C1", "1", "2",
354 "ROADM-C1", "1", "SRG1-PP2-TXRX")
355 self.assertEqual(response.status_code, requests.codes.ok)
356 res = response.json()
357 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
360 def test_21_connect_roadmC_PP2_to_xpdrC_N2(self):
361 response = test_utils.connect_rdm_to_xpdr_request("XPDR-C1", "1", "2",
362 "ROADM-C1", "1", "SRG1-PP2-TXRX")
363 self.assertEqual(response.status_code, requests.codes.ok)
364 res = response.json()
365 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
368 def test_22_create_eth_service2(self):
369 url = "{}/operations/org-openroadm-service:service-create"
371 "sdnc-request-header": {
372 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
373 "rpc-action": "service-create",
374 "request-system-id": "appname",
375 "notification-url": "http://localhost:8585/NotificationServer/notify"
377 "service-name": "service2",
378 "common-id": "ASATT1234567",
379 "connection-type": "service",
381 "service-rate": "100",
382 "node-id": "XPDR-A1",
383 "service-format": "Ethernet",
384 "clli": "SNJSCAMCJP8",
387 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
388 "port-type": "router",
389 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
390 "port-rack": "000000.00",
394 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
395 "lgx-port-name": "LGX Back.3",
396 "lgx-port-rack": "000000.00",
397 "lgx-port-shelf": "00"
402 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
403 "port-type": "router",
404 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
405 "port-rack": "000000.00",
409 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
410 "lgx-port-name": "LGX Back.4",
411 "lgx-port-rack": "000000.00",
412 "lgx-port-shelf": "00"
418 "service-rate": "100",
419 "node-id": "XPDR-C1",
420 "service-format": "Ethernet",
421 "clli": "SNJSCAMCJT4",
424 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
425 "port-type": "router",
426 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
427 "port-rack": "000000.00",
431 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
432 "lgx-port-name": "LGX Back.29",
433 "lgx-port-rack": "000000.00",
434 "lgx-port-shelf": "00"
439 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
440 "port-type": "router",
441 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
442 "port-rack": "000000.00",
446 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
447 "lgx-port-name": "LGX Back.30",
448 "lgx-port-rack": "000000.00",
449 "lgx-port-shelf": "00"
454 "due-date": "2016-11-28T00:00:01Z",
455 "operator-contact": "pw1234"
458 response = test_utils.post_request(url, data)
459 self.assertEqual(response.status_code, requests.codes.ok)
460 res = response.json()
461 self.assertIn('PCE calculation in progress',
462 res['output']['configuration-response-common']['response-message'])
463 time.sleep(self.WAITING)
465 def test_23_get_eth_service2(self):
466 url = "{}/operational/org-openroadm-service:service-list/services/service2"
467 response = test_utils.get_request(url)
468 self.assertEqual(response.status_code, requests.codes.ok)
469 res = response.json()
471 res['services'][0]['administrative-state'],
474 res['services'][0]['service-name'], 'service2')
476 res['services'][0]['connection-type'], 'service')
478 res['services'][0]['lifecycle-state'], 'planned')
481 def test_24_check_xc2_ROADMA(self):
482 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
483 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
484 "roadm-connections/DEG2-TTP-TXRX-SRG1-PP2-TXRX-2")
485 response = test_utils.get_request(url)
486 self.assertEqual(response.status_code, requests.codes.ok)
487 res = response.json()
488 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
489 self.assertDictEqual(
491 'connection-name': 'DEG2-TTP-TXRX-SRG1-PP2-TXRX-2',
492 'opticalControlMode': 'power'
493 }, **res['roadm-connections'][0]),
494 res['roadm-connections'][0]
496 self.assertDictEqual(
497 {'src-if': 'DEG2-TTP-TXRX-nmc-2'},
498 res['roadm-connections'][0]['source'])
499 self.assertDictEqual(
500 {'dst-if': 'SRG1-PP2-TXRX-nmc-2'},
501 res['roadm-connections'][0]['destination'])
503 def test_25_check_topo_XPDRA(self):
504 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
505 response = test_utils.get_request(url)
506 self.assertEqual(response.status_code, requests.codes.ok)
507 res = response.json()
508 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
510 if ele['tp-id'] == 'XPDR1-NETWORK1':
511 self.assertEqual({u'frequency': 196.1,
513 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
514 if ele['tp-id'] == 'XPDR1-NETWORK2':
515 self.assertEqual({u'frequency': 196.05,
517 ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
518 if ele['tp-id'] == 'XPDR1-CLIENT1' or ele['tp-id'] == 'XPDR1-CLIENT2':
519 self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele))
522 def test_26_check_topo_ROADMA_SRG1(self):
523 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
524 response = test_utils.get_request(url)
525 self.assertEqual(response.status_code, requests.codes.ok)
526 res = response.json()
527 self.assertNotIn({u'index': 1}, res['node'][0]
528 [u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
529 self.assertNotIn({u'index': 2}, res['node'][0]
530 [u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
531 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
533 if ele['tp-id'] == 'SRG1-PP1-TXRX':
534 self.assertIn({u'index': 1, u'frequency': 196.1,
536 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
537 self.assertNotIn({u'index': 2, u'frequency': 196.05,
539 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
540 if ele['tp-id'] == 'SRG1-PP2-TXRX':
541 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
542 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
543 self.assertNotIn({u'index': 1, u'frequency': 196.1,
545 ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
546 if ele['tp-id'] == 'SRG1-PP3-TXRX':
547 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
550 def test_27_check_topo_ROADMA_DEG2(self):
551 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
552 response = test_utils.get_request(url)
553 self.assertEqual(response.status_code, requests.codes.ok)
554 res = response.json()
555 self.assertNotIn({u'index': 1}, res['node'][0]
556 [u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
557 self.assertNotIn({u'index': 2}, res['node'][0]
558 [u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
559 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
561 if ele['tp-id'] == 'DEG2-CTP-TXRX':
562 self.assertIn({u'index': 1, u'frequency': 196.1,
564 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
565 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
566 ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
567 if ele['tp-id'] == 'DEG2-TTP-TXRX':
568 self.assertIn({u'index': 1, u'frequency': 196.1,
570 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
571 self.assertIn({u'index': 2, u'frequency': 196.05, u'width': 40},
572 ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
575 # creation service test on a non-available resource
576 def test_28_create_eth_service3(self):
577 url = "{}/operations/org-openroadm-service:service-create"
579 "sdnc-request-header": {
580 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
581 "rpc-action": "service-create",
582 "request-system-id": "appname",
583 "notification-url": "http://localhost:8585/NotificationServer/notify"
585 "service-name": "service3",
586 "common-id": "ASATT1234567",
587 "connection-type": "service",
589 "service-rate": "100",
590 "node-id": "XPDR-A1",
591 "service-format": "Ethernet",
592 "clli": "SNJSCAMCJP8",
595 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
596 "port-type": "router",
597 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
598 "port-rack": "000000.00",
602 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
603 "lgx-port-name": "LGX Back.3",
604 "lgx-port-rack": "000000.00",
605 "lgx-port-shelf": "00"
610 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
611 "port-type": "router",
612 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
613 "port-rack": "000000.00",
617 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
618 "lgx-port-name": "LGX Back.4",
619 "lgx-port-rack": "000000.00",
620 "lgx-port-shelf": "00"
626 "service-rate": "100",
627 "node-id": "XPDR-C1",
628 "service-format": "Ethernet",
629 "clli": "SNJSCAMCJT4",
632 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
633 "port-type": "router",
634 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
635 "port-rack": "000000.00",
639 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
640 "lgx-port-name": "LGX Back.29",
641 "lgx-port-rack": "000000.00",
642 "lgx-port-shelf": "00"
647 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
648 "port-type": "router",
649 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
650 "port-rack": "000000.00",
654 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
655 "lgx-port-name": "LGX Back.30",
656 "lgx-port-rack": "000000.00",
657 "lgx-port-shelf": "00"
662 "due-date": "2016-11-28T00:00:01Z",
663 "operator-contact": "pw1234"
666 response = test_utils.post_request(url, data)
667 self.assertEqual(response.status_code, requests.codes.ok)
668 res = response.json()
669 self.assertIn('PCE calculation in progress',
670 res['output']['configuration-response-common']['response-message'])
671 self.assertIn('200', res['output']['configuration-response-common']['response-code'])
672 time.sleep(self.WAITING)
674 # add a test that check the openroadm-service-list still only contains 2 elements
675 def test_29_delete_eth_service3(self):
676 url = "{}/operations/org-openroadm-service:service-delete"
678 "sdnc-request-header": {
679 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
680 "rpc-action": "service-delete",
681 "request-system-id": "appname",
682 "notification-url": "http://localhost:8585/NotificationServer/notify"
684 "service-delete-req-info": {
685 "service-name": "service3",
686 "tail-retention": "no"
690 response = test_utils.post_request(url, data)
691 self.assertEqual(response.status_code, requests.codes.ok)
692 res = response.json()
693 self.assertIn('Service \'service3\' does not exist in datastore',
694 res['output']['configuration-response-common']['response-message'])
695 self.assertIn('500', res['output']['configuration-response-common']['response-code'])
698 def test_30_delete_eth_service1(self):
699 url = "{}/operations/org-openroadm-service:service-delete"
701 "sdnc-request-header": {
702 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
703 "rpc-action": "service-delete",
704 "request-system-id": "appname",
705 "notification-url": "http://localhost:8585/NotificationServer/notify"
707 "service-delete-req-info": {
708 "service-name": "service1",
709 "tail-retention": "no"
713 response = test_utils.post_request(url, data)
714 self.assertEqual(response.status_code, requests.codes.ok)
715 res = response.json()
716 self.assertIn('Renderer service delete in progress',
717 res['output']['configuration-response-common']['response-message'])
720 def test_31_delete_eth_service2(self):
721 url = "{}/operations/org-openroadm-service:service-delete"
723 "sdnc-request-header": {
724 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
725 "rpc-action": "service-delete",
726 "request-system-id": "appname",
727 "notification-url": "http://localhost:8585/NotificationServer/notify"
729 "service-delete-req-info": {
730 "service-name": "service2",
731 "tail-retention": "no"
735 response = test_utils.post_request(url, data)
736 self.assertEqual(response.status_code, requests.codes.ok)
737 res = response.json()
738 self.assertIn('Renderer service delete in progress',
739 res['output']['configuration-response-common']['response-message'])
742 def test_32_check_no_xc_ROADMA(self):
743 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
744 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/")
745 response = test_utils.get_request(url)
746 res = response.json()
747 self.assertEqual(response.status_code, requests.codes.ok)
748 self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device']))
751 def test_33_check_topo_XPDRA(self):
752 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/XPDR-A1-XPDR1"
753 response = test_utils.get_request(url)
754 self.assertEqual(response.status_code, requests.codes.ok)
755 res = response.json()
756 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
758 if ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-CLIENT':
759 self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele))
760 elif (ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-NETWORK'):
761 self.assertIn(u'tail-equipment-id',
762 dict.keys(ele[u'org-openroadm-network-topology:xpdr-network-attributes']))
763 self.assertNotIn('wavelength', dict.keys(
764 ele[u'org-openroadm-network-topology:xpdr-network-attributes']))
767 def test_34_check_topo_ROADMA_SRG1(self):
768 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-SRG1"
769 response = test_utils.get_request(url)
770 self.assertEqual(response.status_code, requests.codes.ok)
771 res = response.json()
772 self.assertIn({u'index': 1}, res['node'][0]
773 [u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
774 self.assertIn({u'index': 2}, res['node'][0]
775 [u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
776 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
778 if ele['tp-id'] == 'SRG1-PP1-TXRX' or ele['tp-id'] == 'SRG1-PP1-TXRX':
779 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
781 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
784 def test_35_check_topo_ROADMA_DEG2(self):
785 url = "{}/config/ietf-network:networks/network/openroadm-topology/node/ROADM-A1-DEG2"
786 response = test_utils.get_request(url)
787 self.assertEqual(response.status_code, requests.codes.ok)
788 res = response.json()
789 self.assertIn({u'index': 1}, res['node'][0]
790 [u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
791 self.assertIn({u'index': 2}, res['node'][0]
792 [u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
793 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
795 if ele['tp-id'] == 'DEG2-CTP-TXRX':
796 self.assertNotIn('org-openroadm-network-topology:ctp-attributes', dict.keys(ele))
797 if ele['tp-id'] == 'DEG2-TTP-TXRX':
798 self.assertNotIn('org-openroadm-network-topology:tx-ttp-attributes', dict.keys(ele))
801 # test service-create for Optical Channel (OC) service from srg-pp to srg-pp
802 def test_36_create_oc_service1(self):
803 url = "{}/operations/org-openroadm-service:service-create"
805 "sdnc-request-header": {
806 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
807 "rpc-action": "service-create",
808 "request-system-id": "appname",
809 "notification-url": "http://localhost:8585/NotificationServer/notify"
811 "service-name": "service1",
812 "common-id": "ASATT1234567",
813 "connection-type": "roadm-line",
815 "service-rate": "100",
816 "node-id": "ROADM-A1",
817 "service-format": "OC",
818 "clli": "SNJSCAMCJP8",
821 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
822 "port-type": "router",
823 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
824 "port-rack": "000000.00",
828 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
829 "lgx-port-name": "LGX Back.3",
830 "lgx-port-rack": "000000.00",
831 "lgx-port-shelf": "00"
836 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
837 "port-type": "router",
838 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
839 "port-rack": "000000.00",
843 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
844 "lgx-port-name": "LGX Back.4",
845 "lgx-port-rack": "000000.00",
846 "lgx-port-shelf": "00"
852 "service-rate": "100",
853 "node-id": "ROADM-C1",
854 "service-format": "OC",
855 "clli": "SNJSCAMCJT4",
858 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
859 "port-type": "router",
860 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
861 "port-rack": "000000.00",
865 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
866 "lgx-port-name": "LGX Back.29",
867 "lgx-port-rack": "000000.00",
868 "lgx-port-shelf": "00"
873 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
874 "port-type": "router",
875 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
876 "port-rack": "000000.00",
880 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
881 "lgx-port-name": "LGX Back.30",
882 "lgx-port-rack": "000000.00",
883 "lgx-port-shelf": "00"
888 "due-date": "2016-11-28T00:00:01Z",
889 "operator-contact": "pw1234"
892 response = test_utils.post_request(url, data)
893 self.assertEqual(response.status_code, requests.codes.ok)
894 res = response.json()
895 self.assertIn('PCE calculation in progress',
896 res['output']['configuration-response-common']['response-message'])
897 time.sleep(self.WAITING)
899 def test_37_get_oc_service1(self):
900 url = "{}/operational/org-openroadm-service:service-list/services/service1"
901 response = test_utils.get_request(url)
902 self.assertEqual(response.status_code, requests.codes.ok)
903 res = response.json()
905 res['services'][0]['administrative-state'],
908 res['services'][0]['service-name'], 'service1')
910 res['services'][0]['connection-type'], 'roadm-line')
912 res['services'][0]['lifecycle-state'], 'planned')
915 def test_38_check_xc1_ROADMA(self):
916 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
917 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
918 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
919 response = test_utils.get_request(url)
920 self.assertEqual(response.status_code, requests.codes.ok)
921 res = response.json()
922 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
923 self.assertDictEqual(
925 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
926 'opticalControlMode': 'gainLoss',
927 'target-output-power': -3.0
928 }, **res['roadm-connections'][0]),
929 res['roadm-connections'][0]
931 self.assertDictEqual(
932 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
933 res['roadm-connections'][0]['source'])
934 self.assertDictEqual(
935 {'dst-if': 'DEG2-TTP-TXRX-nmc-1'},
936 res['roadm-connections'][0]['destination'])
939 def test_39_check_xc1_ROADMC(self):
940 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
941 "node/ROADM-C1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
942 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
943 response = test_utils.get_request(url)
944 self.assertEqual(response.status_code, requests.codes.ok)
945 res = response.json()
946 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
947 self.assertDictEqual(
949 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
950 'opticalControlMode': 'gainLoss',
951 'target-output-power': -3.0
952 }, **res['roadm-connections'][0]),
953 res['roadm-connections'][0]
955 self.assertDictEqual(
956 {'src-if': 'SRG1-PP1-TXRX-nmc-1'},
957 res['roadm-connections'][0]['source'])
958 self.assertDictEqual(
959 {'dst-if': 'DEG1-TTP-TXRX-nmc-1'},
960 res['roadm-connections'][0]['destination'])
963 def test_40_create_oc_service2(self):
964 url = "{}/operations/org-openroadm-service:service-create"
966 "sdnc-request-header": {
967 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
968 "rpc-action": "service-create",
969 "request-system-id": "appname",
970 "notification-url": "http://localhost:8585/NotificationServer/notify"
972 "service-name": "service2",
973 "common-id": "ASATT1234567",
974 "connection-type": "roadm-line",
976 "service-rate": "100",
977 "node-id": "ROADM-A1",
978 "service-format": "OC",
979 "clli": "SNJSCAMCJP8",
982 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
983 "port-type": "router",
984 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
985 "port-rack": "000000.00",
989 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
990 "lgx-port-name": "LGX Back.3",
991 "lgx-port-rack": "000000.00",
992 "lgx-port-shelf": "00"
997 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
998 "port-type": "router",
999 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1000 "port-rack": "000000.00",
1004 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1005 "lgx-port-name": "LGX Back.4",
1006 "lgx-port-rack": "000000.00",
1007 "lgx-port-shelf": "00"
1010 "optic-type": "gray"
1013 "service-rate": "100",
1014 "node-id": "ROADM-C1",
1015 "service-format": "OC",
1016 "clli": "SNJSCAMCJT4",
1019 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1020 "port-type": "router",
1021 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1022 "port-rack": "000000.00",
1026 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1027 "lgx-port-name": "LGX Back.29",
1028 "lgx-port-rack": "000000.00",
1029 "lgx-port-shelf": "00"
1034 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1035 "port-type": "router",
1036 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1037 "port-rack": "000000.00",
1041 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1042 "lgx-port-name": "LGX Back.30",
1043 "lgx-port-rack": "000000.00",
1044 "lgx-port-shelf": "00"
1047 "optic-type": "gray"
1049 "due-date": "2016-11-28T00:00:01Z",
1050 "operator-contact": "pw1234"
1053 response = test_utils.post_request(url, data)
1054 self.assertEqual(response.status_code, requests.codes.ok)
1055 res = response.json()
1056 self.assertIn('PCE calculation in progress',
1057 res['output']['configuration-response-common']['response-message'])
1058 time.sleep(self.WAITING)
1060 def test_41_get_oc_service2(self):
1061 url = "{}/operational/org-openroadm-service:service-list/services/service2"
1062 response = test_utils.get_request(url)
1063 self.assertEqual(response.status_code, requests.codes.ok)
1064 res = response.json()
1066 res['services'][0]['administrative-state'],
1069 res['services'][0]['service-name'], 'service2')
1071 res['services'][0]['connection-type'], 'roadm-line')
1073 res['services'][0]['lifecycle-state'], 'planned')
1076 def test_42_check_xc2_ROADMA(self):
1077 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1078 "node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1079 "roadm-connections/SRG1-PP2-TXRX-DEG2-TTP-TXRX-2")
1080 response = test_utils.get_request(url)
1081 self.assertEqual(response.status_code, requests.codes.ok)
1082 res = response.json()
1083 # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2
1084 self.assertDictEqual(
1086 'connection-name': 'SRG1-PP2-TXRX-DEG2-TTP-TXRX-2',
1087 'opticalControlMode': 'gainLoss',
1088 'target-output-power': -3.0
1089 }, **res['roadm-connections'][0]),
1090 res['roadm-connections'][0]
1092 self.assertDictEqual(
1093 {'src-if': 'SRG1-PP2-TXRX-nmc-2'},
1094 res['roadm-connections'][0]['source'])
1095 self.assertDictEqual(
1096 {'dst-if': 'DEG2-TTP-TXRX-nmc-2'},
1097 res['roadm-connections'][0]['destination'])
1100 def test_43_check_topo_ROADMA(self):
1101 self.test_26_check_topo_ROADMA_SRG1()
1102 self.test_27_check_topo_ROADMA_DEG2()
1105 def test_44_delete_oc_service1(self):
1106 url = "{}/operations/org-openroadm-service:service-delete"
1108 "sdnc-request-header": {
1109 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1110 "rpc-action": "service-delete",
1111 "request-system-id": "appname",
1112 "notification-url": "http://localhost:8585/NotificationServer/notify"
1114 "service-delete-req-info": {
1115 "service-name": "service1",
1116 "tail-retention": "no"
1120 response = test_utils.post_request(url, data)
1121 self.assertEqual(response.status_code, requests.codes.ok)
1122 res = response.json()
1123 self.assertIn('Renderer service delete in progress',
1124 res['output']['configuration-response-common']['response-message'])
1127 def test_45_delete_oc_service2(self):
1128 url = "{}/operations/org-openroadm-service:service-delete"
1130 "sdnc-request-header": {
1131 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1132 "rpc-action": "service-delete",
1133 "request-system-id": "appname",
1134 "notification-url": "http://localhost:8585/NotificationServer/notify"
1136 "service-delete-req-info": {
1137 "service-name": "service2",
1138 "tail-retention": "no"
1142 response = test_utils.post_request(url, data)
1143 self.assertEqual(response.status_code, requests.codes.ok)
1144 res = response.json()
1145 self.assertIn('Renderer service delete in progress',
1146 res['output']['configuration-response-common']['response-message'])
1149 def test_46_get_no_oc_services(self):
1151 url = "{}/operational/org-openroadm-service:service-list"
1152 response = test_utils.get_request(url)
1153 self.assertEqual(response.status_code, requests.codes.not_found)
1154 res = response.json()
1156 {"error-type": "application", "error-tag": "data-missing",
1157 "error-message": "Request could not be completed because the relevant data model content does not exist"},
1158 res['errors']['error'])
1161 def test_47_get_no_xc_ROADMA(self):
1162 url = ("{}/config/network-topology:network-topology/topology/topology-netconf"
1163 "/node/ROADM-A1/yang-ext:mount/org-openroadm-device:org-openroadm-device/")
1164 response = test_utils.get_request(url)
1165 self.assertEqual(response.status_code, requests.codes.ok)
1166 res = response.json()
1167 self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
1170 def test_48_check_topo_ROADMA(self):
1171 self.test_34_check_topo_ROADMA_SRG1()
1172 self.test_35_check_topo_ROADMA_DEG2()
1174 def test_49_loop_create_eth_service(self):
1175 for i in range(1, 6):
1176 print("iteration number {}".format(i))
1177 print("eth service creation")
1178 self.test_11_create_eth_service1()
1179 print("check xc in ROADM-A1")
1180 self.test_13_check_xc1_ROADMA()
1181 print("check xc in ROADM-C1")
1182 self.test_14_check_xc1_ROADMC()
1183 print("eth service deletion\n")
1184 self.test_30_delete_eth_service1()
1186 def test_50_loop_create_oc_service(self):
1187 url = "{}/operational/org-openroadm-service:service-list/services/service1"
1188 response = test_utils.get_request(url)
1189 if response.status_code != 404:
1190 url = "{}/operations/org-openroadm-service:service-delete"
1192 "sdnc-request-header": {
1193 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1194 "rpc-action": "service-delete",
1195 "request-system-id": "appname",
1196 "notification-url": "http://localhost:8585/NotificationServer/notify"
1198 "service-delete-req-info": {
1199 "service-name": "service1",
1200 "tail-retention": "no"
1204 test_utils.post_request(url, data)
1207 for i in range(1, 6):
1208 print("iteration number {}".format(i))
1209 print("oc service creation")
1210 self.test_36_create_oc_service1()
1211 print("check xc in ROADM-A1")
1212 self.test_38_check_xc1_ROADMA()
1213 print("check xc in ROADM-C1")
1214 self.test_39_check_xc1_ROADMC()
1215 print("oc service deletion\n")
1216 self.test_44_delete_oc_service1()
1218 def test_51_disconnect_XPDRA(self):
1219 response = test_utils.unmount_device("XPDR-A1")
1220 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1222 def test_52_disconnect_XPDRC(self):
1223 response = test_utils.unmount_device("XPDR-C1")
1224 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1226 def test_53_disconnect_ROADMA(self):
1227 response = test_utils.unmount_device("ROADM-A1")
1228 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1230 def test_54_disconnect_ROADMC(self):
1231 response = test_utils.unmount_device("ROADM-C1")
1232 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
1235 if __name__ == "__main__":
1236 unittest.main(verbosity=2)