3 #############################################################################
4 # Copyright (c) 2017 Orange, Inc. and others. All rights reserved.
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #############################################################################
16 from common import test_utils
19 class TransportOlmTesting(unittest.TestCase):
25 cls.processes = test_utils.start_tpce()
26 cls.processes = test_utils.start_sims(['xpdra', 'roadma-full', 'roadmc-full', 'xpdrc'])
29 def tearDownClass(cls):
30 for process in cls.processes:
31 test_utils.shutdown_process(process)
32 print("all processes killed")
35 print("execution of {}".format(self.id().split(".")[-1]))
38 def test_01_xpdrA_device_connected(self):
39 response = test_utils.mount_device("XPDRA01", 'xpdra')
40 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
42 def test_02_xpdrC_device_connected(self):
43 response = test_utils.mount_device("XPDRC01", 'xpdrc')
44 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
46 def test_03_rdmA_device_connected(self):
47 response = test_utils.mount_device("ROADMA01", 'roadma-full')
48 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
50 def test_04_rdmC_device_connected(self):
51 response = test_utils.mount_device("ROADMC01", 'roadmc-full')
52 self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
54 def test_05_connect_xprdA_to_roadmA(self):
55 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "1",
56 "ROADMA01", "1", "SRG1-PP1-TXRX")
57 self.assertEqual(response.status_code, requests.codes.ok)
59 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
61 def test_06_connect_roadmA_to_xpdrA(self):
62 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "1",
63 "ROADMA01", "1", "SRG1-PP1-TXRX")
64 self.assertEqual(response.status_code, requests.codes.ok)
66 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
68 def test_07_connect_xprdC_to_roadmC(self):
69 response = test_utils.connect_xpdr_to_rdm_request("XPDRC01", "1", "1",
70 "ROADMC01", "1", "SRG1-PP1-TXRX")
71 self.assertEqual(response.status_code, requests.codes.ok)
73 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
75 def test_08_connect_roadmC_to_xpdrC(self):
76 response = test_utils.connect_rdm_to_xpdr_request("XPDRC01", "1", "1",
77 "ROADMC01", "1", "SRG1-PP1-TXRX")
78 self.assertEqual(response.status_code, requests.codes.ok)
80 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
82 def test_09_create_OTS_ROADMA(self):
83 url = "{}/operations/transportpce-device-renderer:create-ots-oms"
86 "node-id": "ROADMA01",
87 "logical-connection-point": "DEG1-TTP-TXRX"
90 response = test_utils.post_request(url, data)
91 self.assertEqual(response.status_code, requests.codes.ok)
93 self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADMA01',
94 res["output"]["result"])
96 def test_10_create_OTS_ROADMC(self):
97 url = "{}/operations/transportpce-device-renderer:create-ots-oms"
100 "node-id": "ROADMC01",
101 "logical-connection-point": "DEG2-TTP-TXRX"
104 response = test_utils.post_request(url, data)
105 self.assertEqual(response.status_code, requests.codes.ok)
106 res = response.json()
107 self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADMC01',
108 res["output"]["result"])
110 def test_11_get_PM_ROADMA(self):
111 url = "{}/operations/transportpce-olm:get-pm"
114 "node-id": "ROADMA01",
115 "resource-type": "interface",
116 "granularity": "15min",
117 "resource-identifier": {
118 "resource-name": "OTS-DEG1-TTP-TXRX"
122 response = test_utils.post_request(url, data)
123 self.assertEqual(response.status_code, requests.codes.ok)
124 res = response.json()
126 "pmparameter-name": "OpticalPowerOutput",
127 "pmparameter-value": "2.5"
128 }, res["output"]["measurements"])
130 "pmparameter-name": "OpticalReturnLoss",
131 "pmparameter-value": "49.9"
132 }, res["output"]["measurements"])
134 "pmparameter-name": "OpticalPowerInput",
135 "pmparameter-value": "3"
136 }, res["output"]["measurements"])
138 def test_12_get_PM_ROADMC(self):
139 url = "{}/operations/transportpce-olm:get-pm"
142 "node-id": "ROADMC01",
143 "resource-type": "interface",
144 "granularity": "15min",
145 "resource-identifier": {
146 "resource-name": "OTS-DEG2-TTP-TXRX"
150 response = test_utils.post_request(url, data)
151 self.assertEqual(response.status_code, requests.codes.ok)
152 res = response.json()
154 "pmparameter-name": "OpticalPowerOutput",
155 "pmparameter-value": "18.1"
156 }, res["output"]["measurements"])
158 "pmparameter-name": "OpticalReturnLoss",
159 "pmparameter-value": "48.8"
160 }, res["output"]["measurements"])
162 "pmparameter-name": "OpticalPowerInput",
163 "pmparameter-value": "-3.2"
164 }, res["output"]["measurements"])
166 def test_13_calculate_span_loss_base_ROADMA_ROADMC(self):
167 url = "{}/operations/transportpce-olm:calculate-spanloss-base"
171 "link-id": "ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX"
174 response = test_utils.post_request(url, data)
175 self.assertEqual(response.status_code, requests.codes.ok)
176 res = response.json()
177 self.assertIn('Success',
178 res["output"]["result"])
181 "link-id": "ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX"
182 }, res["output"]["spans"])
185 def test_14_calculate_span_loss_base_all(self):
186 url = "{}/operations/transportpce-olm:calculate-spanloss-base"
192 response = test_utils.post_request(url, data)
193 self.assertEqual(response.status_code, requests.codes.ok)
194 res = response.json()
195 self.assertIn('Success',
196 res["output"]["result"])
199 "link-id": "ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX"
200 }, res["output"]["spans"])
203 "link-id": "ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX"
204 }, res["output"]["spans"])
207 def test_15_get_OTS_DEG1_TTP_TXRX_ROADMA(self):
208 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
209 "node/ROADMA01/yang-ext:mount/org-openroadm-device:org-openroadm-device/interface/OTS-DEG1-TTP-TXRX/"
210 "org-openroadm-optical-transport-interfaces:ots")
211 response = test_utils.get_request(url)
212 self.assertEqual(response.status_code, requests.codes.ok)
213 res = response.json()
214 self.assertEqual(5.7, res['org-openroadm-optical-transport-interfaces:ots']['span-loss-transmit'])
215 self.assertEqual(15.1, res['org-openroadm-optical-transport-interfaces:ots']['span-loss-receive'])
217 def test_16_get_OTS_DEG2_TTP_TXRX_ROADMC(self):
218 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
219 "node/ROADMC01/yang-ext:mount/org-openroadm-device:org-openroadm-device/interface/OTS-DEG2-TTP-TXRX/"
220 "org-openroadm-optical-transport-interfaces:ots")
221 response = test_utils.get_request(url)
222 self.assertEqual(response.status_code, requests.codes.ok)
223 res = response.json()
224 self.assertEqual(15.1, res['org-openroadm-optical-transport-interfaces:ots']['span-loss-transmit'])
225 self.assertEqual(5.7, res['org-openroadm-optical-transport-interfaces:ots']['span-loss-receive'])
227 def test_17_servicePath_create_AToZ(self):
228 url = "{}/operations/transportpce-device-renderer:service-path"
231 "service-name": "test",
233 "modulation-format": "qpsk",
234 "operation": "create",
237 "dest-tp": "XPDR1-NETWORK1",
238 "src-tp": "XPDR1-CLIENT1",
242 "dest-tp": "DEG1-TTP-TXRX",
243 "src-tp": "SRG1-PP1-TXRX",
244 "node-id": "ROADMA01"
247 "dest-tp": "SRG1-PP1-TXRX",
248 "src-tp": "DEG2-TTP-TXRX",
249 "node-id": "ROADMC01"
252 "dest-tp": "XPDR1-CLIENT1",
253 "src-tp": "XPDR1-NETWORK1",
259 response = test_utils.post_request(url, data)
260 self.assertEqual(response.status_code, requests.codes.ok)
261 res = response.json()
262 self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"])
266 def test_18_servicePath_create_ZToA(self):
267 url = "{}/operations/transportpce-device-renderer:service-path"
270 "service-name": "test",
272 "modulation-format": "qpsk",
273 "operation": "create",
276 "dest-tp": "XPDR1-NETWORK1",
277 "src-tp": "XPDR1-CLIENT1",
281 "dest-tp": "DEG2-TTP-TXRX",
282 "src-tp": "SRG1-PP1-TXRX",
283 "node-id": "ROADMC01"
286 "src-tp": "DEG1-TTP-TXRX",
287 "dest-tp": "SRG1-PP1-TXRX",
288 "node-id": "ROADMA01"
291 "src-tp": "XPDR1-NETWORK1",
292 "dest-tp": "XPDR1-CLIENT1",
298 response = test_utils.post_request(url, data)
299 self.assertEqual(response.status_code, requests.codes.ok)
300 res = response.json()
301 self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"])
305 def test_19_service_power_setup_XPDRA_XPDRC(self):
306 url = "{}/operations/transportpce-olm:service-power-setup"
309 "service-name": "test",
313 "dest-tp": "XPDR1-NETWORK1",
314 "src-tp": "XPDR1-CLIENT1",
318 "dest-tp": "DEG1-TTP-TXRX",
319 "src-tp": "SRG1-PP1-TXRX",
320 "node-id": "ROADMA01"
323 "dest-tp": "SRG1-PP1-TXRX",
324 "src-tp": "DEG2-TTP-TXRX",
325 "node-id": "ROADMC01"
328 "dest-tp": "XPDR1-CLIENT1",
329 "src-tp": "XPDR1-NETWORK1",
335 response = test_utils.post_request(url, data)
336 self.assertEqual(response.status_code, requests.codes.ok)
337 res = response.json()
338 self.assertIn('Success', res["output"]["result"])
340 def test_20_get_interface_XPDRA_XPDR1_NETWORK1(self):
341 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA01/yang-ext:mount/"
342 "org-openroadm-device:org-openroadm-device/interface/XPDR1-NETWORK1-1/"
343 "org-openroadm-optical-channel-interfaces:och")
344 response = test_utils.get_request(url)
345 self.assertEqual(response.status_code, requests.codes.ok)
346 res = response.json()
347 self.assertEqual(0, res['org-openroadm-optical-channel-interfaces:och']['transmit-power'])
348 self.assertEqual(1, res['org-openroadm-optical-channel-interfaces:och']['wavelength-number'])
350 def test_21_get_roadmconnection_ROADMA(self):
351 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA01/yang-ext:mount/"
352 "org-openroadm-device:org-openroadm-device/roadm-connections/"
353 "SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
354 response = test_utils.get_request(url)
355 self.assertEqual(response.status_code, requests.codes.ok)
356 res = response.json()
357 self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode'])
358 self.assertEqual(-3.3, res['roadm-connections'][0]['target-output-power'])
360 def test_22_get_roadmconnection_ROADMC(self):
361 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/ROADMC01/yang-ext:mount/"
362 "org-openroadm-device:org-openroadm-device/roadm-connections/"
363 "DEG2-TTP-TXRX-SRG1-PP1-TXRX-1")
364 response = test_utils.get_request(url)
365 self.assertEqual(response.status_code, requests.codes.ok)
366 res = response.json()
367 self.assertEqual("power", res['roadm-connections'][0]['opticalControlMode'])
369 def test_23_service_power_setup_XPDRC_XPDRA(self):
370 url = "{}/operations/transportpce-olm:service-power-setup"
373 "service-name": "test",
377 "dest-tp": "XPDR1-NETWORK1",
378 "src-tp": "XPDR1-CLIENT1",
382 "dest-tp": "DEG2-TTP-TXRX",
383 "src-tp": "SRG1-PP1-TXRX",
384 "node-id": "ROADMC01"
387 "src-tp": "DEG1-TTP-TXRX",
388 "dest-tp": "SRG1-PP1-TXRX",
389 "node-id": "ROADMA01"
392 "src-tp": "XPDR1-NETWORK1",
393 "dest-tp": "XPDR1-CLIENT1",
399 response = test_utils.post_request(url, data)
400 self.assertEqual(response.status_code, requests.codes.ok)
401 res = response.json()
402 self.assertIn('Success', res["output"]["result"])
404 def test_24_get_interface_XPDRC_XPDR1_NETWORK1(self):
405 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/XPDRC01/yang-ext:mount/"
406 "org-openroadm-device:org-openroadm-device/interface/XPDR1-NETWORK1-1/"
407 "org-openroadm-optical-channel-interfaces:och")
408 response = test_utils.get_request(url)
409 self.assertEqual(response.status_code, requests.codes.ok)
410 res = response.json()
411 self.assertEqual(0, res['org-openroadm-optical-channel-interfaces:och']['transmit-power'])
412 self.assertEqual(1, res['org-openroadm-optical-channel-interfaces:och']['wavelength-number'])
414 def test_25_get_roadmconnection_ROADMC(self):
415 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/ROADMC01/yang-ext:mount/"
416 "org-openroadm-device:org-openroadm-device/roadm-connections/"
417 "SRG1-PP1-TXRX-DEG2-TTP-TXRX-1")
418 response = test_utils.get_request(url)
419 self.assertEqual(response.status_code, requests.codes.ok)
420 res = response.json()
421 self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode'])
422 self.assertEqual(2, res['roadm-connections'][0]['target-output-power'])
424 def test_26_service_power_turndown_XPDRA_XPDRC(self):
425 url = "{}/operations/transportpce-olm:service-power-turndown"
428 "service-name": "test",
432 "dest-tp": "XPDR1-NETWORK1",
433 "src-tp": "XPDR1-CLIENT1",
437 "dest-tp": "DEG1-TTP-TXRX",
438 "src-tp": "SRG1-PP1-TXRX",
439 "node-id": "ROADMA01"
442 "dest-tp": "SRG1-PP1-TXRX",
443 "src-tp": "DEG2-TTP-TXRX",
444 "node-id": "ROADMC01"
447 "dest-tp": "XPDR1-CLIENT1",
448 "src-tp": "XPDR1-NETWORK1",
454 response = test_utils.post_request(url, data)
455 self.assertEqual(response.status_code, requests.codes.ok)
456 res = response.json()
457 self.assertIn('Success', res["output"]["result"])
459 def test_27_get_roadmconnection_ROADMA(self):
460 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA01/yang-ext:mount/"
461 "org-openroadm-device:org-openroadm-device/roadm-connections/"
462 "SRG1-PP1-TXRX-DEG1-TTP-TXRX-1")
463 response = test_utils.get_request(url)
464 self.assertEqual(response.status_code, requests.codes.ok)
465 res = response.json()
466 self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode'])
467 self.assertEqual(-60, res['roadm-connections'][0]['target-output-power'])
469 def test_28_get_roadmconnection_ROADMC(self):
470 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/ROADMC01/yang-ext:mount/"
471 "org-openroadm-device:org-openroadm-device/roadm-connections/"
472 "DEG2-TTP-TXRX-SRG1-PP1-TXRX-1")
473 response = test_utils.get_request(url)
474 self.assertEqual(response.status_code, requests.codes.ok)
475 res = response.json()
476 self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode'])
478 def test_29_servicePath_delete_AToZ(self):
479 url = "{}/operations/transportpce-device-renderer:service-path"
482 "service-name": "test",
484 "modulation-format": "qpsk",
485 "operation": "delete",
488 "dest-tp": "XPDR1-NETWORK1",
489 "src-tp": "XPDR1-CLIENT1",
493 "dest-tp": "DEG1-TTP-TXRX",
494 "src-tp": "SRG1-PP1-TXRX",
495 "node-id": "ROADMA01"
498 "dest-tp": "SRG1-PP1-TXRX",
499 "src-tp": "DEG2-TTP-TXRX",
500 "node-id": "ROADMC01"
503 "dest-tp": "XPDR1-CLIENT1",
504 "src-tp": "XPDR1-NETWORK1",
510 response = test_utils.post_request(url, data)
511 self.assertEqual(response.status_code, requests.codes.ok)
512 res = response.json()
513 self.assertIn('Request processed', res["output"]["result"])
516 def test_30_servicePath_delete_ZToA(self):
517 url = "{}/operations/transportpce-device-renderer:service-path"
520 "service-name": "test",
522 "modulation-format": "qpsk",
523 "operation": "delete",
526 "dest-tp": "XPDR1-NETWORK1",
527 "src-tp": "XPDR1-CLIENT1",
531 "dest-tp": "DEG2-TTP-TXRX",
532 "src-tp": "SRG1-PP1-TXRX",
533 "node-id": "ROADMC01"
536 "src-tp": "DEG1-TTP-TXRX",
537 "dest-tp": "SRG1-PP1-TXRX",
538 "node-id": "ROADMA01"
541 "src-tp": "XPDR1-NETWORK1",
542 "dest-tp": "XPDR1-CLIENT1",
548 response = test_utils.post_request(url, data)
549 self.assertEqual(response.status_code, requests.codes.ok)
550 res = response.json()
551 self.assertIn('Request processed', res["output"]["result"])
554 """to test case where SRG where the xpdr is connected to has no optical range data"""
556 def test_31_connect_xprdA_to_roadmA(self):
557 response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "2",
558 "ROADMA01", "1", "SRG1-PP2-TXRX")
559 self.assertEqual(response.status_code, requests.codes.ok)
560 res = response.json()
561 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
563 def test_32_connect_roadmA_to_xpdrA(self):
564 response = test_utils.connect_rdm_to_xpdr_request("XPDRA01", "1", "2",
565 "ROADMA01", "1", "SRG1-PP2-TXRX")
566 self.assertEqual(response.status_code, requests.codes.ok)
567 res = response.json()
568 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
570 def test_33_servicePath_create_AToZ(self):
571 url = "{}/operations/transportpce-device-renderer:service-path"
574 "service-name": "test2",
576 "modulation-format": "qpsk",
577 "operation": "create",
580 "dest-tp": "XPDR1-NETWORK2",
581 "src-tp": "XPDR1-CLIENT2",
585 "dest-tp": "DEG1-TTP-TXRX",
586 "src-tp": "SRG1-PP2-TXRX",
587 "node-id": "ROADMA01"
592 response = test_utils.post_request(url, data)
593 self.assertEqual(response.status_code, requests.codes.ok)
594 res = response.json()
595 self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"])
599 def test_34_get_interface_XPDRA_XPDR1_NETWORK2(self):
600 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA01/yang-ext:mount/"
601 "org-openroadm-device:org-openroadm-device/interface/XPDR1-NETWORK2-2/"
602 "org-openroadm-optical-channel-interfaces:och")
603 response = test_utils.get_request(url)
604 self.assertEqual(response.status_code, requests.codes.ok)
605 res = response.json()
606 self.assertEqual(-5, res['org-openroadm-optical-channel-interfaces:och']['transmit-power'])
607 self.assertEqual(2, res['org-openroadm-optical-channel-interfaces:och']['wavelength-number'])
609 def test_35_servicePath_delete_AToZ(self):
610 url = "{}/operations/transportpce-device-renderer:service-path"
613 "service-name": "test",
615 "modulation-format": "qpsk",
616 "operation": "delete",
619 "dest-tp": "XPDR1-NETWORK2",
620 "src-tp": "XPDR1-CLIENT2",
624 "dest-tp": "DEG1-TTP-TXRX",
625 "src-tp": "SRG1-PP2-TXRX",
626 "node-id": "ROADMA01"
631 response = test_utils.post_request(url, data)
632 self.assertEqual(response.status_code, requests.codes.ok)
633 res = response.json()
634 self.assertIn('Request processed', res["output"]["result"])
637 def test_36_xpdrA_device_disconnected(self):
638 response = test_utils.unmount_device("XPDRA01")
639 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
641 def test_37_xpdrC_device_disconnected(self):
642 response = test_utils.unmount_device("XPDRC01")
643 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
645 def test_38_calculate_span_loss_current(self):
646 url = "{}/operations/transportpce-olm:calculate-spanloss-current"
647 response = test_utils.post_request(url, None)
648 self.assertEqual(response.status_code, requests.codes.ok)
649 res = response.json()
650 self.assertIn('Success',
651 res["output"]["result"])
654 def test_39_rdmA_device_disconnected(self):
655 response = test_utils.unmount_device("ROADMA01")
656 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
658 def test_40_rdmC_device_disconnected(self):
659 response = test_utils.unmount_device("ROADMC01")
660 self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
663 if __name__ == "__main__":
664 unittest.main(verbosity=2)