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 ##############################################################################
23 class TransportPCEFulltesting(unittest.TestCase):
26 honeynode_process1 = None
27 honeynode_process2 = None
28 honeynode_process3 = None
29 honeynode_process4 = None
30 restconf_baseurl = "http://localhost:8181/restconf"
33 def __start_honeynode1(cls):
34 executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
35 "/honeynode-distribution-1.18.01/honeycomb-tpce")
36 if os.path.isfile(executable):
37 with open('honeynode1.log', 'w') as outfile:
38 cls.honeynode_process1 = subprocess.Popen(
39 [executable, "17830", "sample_configs/ord_2.1/oper-ROADMA-full.xml"],
43 def __start_honeynode2(cls):
44 executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
45 "/honeynode-distribution-1.18.01/honeycomb-tpce")
46 if os.path.isfile(executable):
47 with open('honeynode2.log', 'w') as outfile:
48 cls.honeynode_process2 = subprocess.Popen(
49 [executable, "17831", "sample_configs/ord_2.1/oper-XPDRA.xml"],
53 def __start_honeynode3(cls):
54 executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
55 "/honeynode-distribution-1.18.01/honeycomb-tpce")
56 if os.path.isfile(executable):
57 with open('honeynode3.log', 'w') as outfile:
58 cls.honeynode_process3 = subprocess.Popen(
59 [executable, "17833", "sample_configs/ord_2.1/oper-ROADMC-full.xml"],
63 def __start_honeynode4(cls):
64 executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
65 "/honeynode-distribution-1.18.01/honeycomb-tpce")
66 if os.path.isfile(executable):
67 with open('honeynode4.log', 'w') as outfile:
68 cls.honeynode_process4 = subprocess.Popen(
69 [executable, "17834", "sample_configs/ord_2.1/oper-XPDRC.xml"],
74 executable = "../karaf/target/assembly/bin/karaf"
75 with open('odl.log', 'w') as outfile:
76 cls.odl_process = subprocess.Popen(
77 ["bash", executable, "server"], stdout=outfile,
78 stdin=open(os.devnull))
82 print ("starting honeynode1")
83 cls.__start_honeynode1()
85 print ("starting honeynode2")
86 cls.__start_honeynode2()
88 print ("starting honeynode3")
89 cls.__start_honeynode3()
91 print ("starting honeynode4")
92 cls.__start_honeynode4()
94 print ("starting opendaylight")
99 def tearDownClass(cls):
100 for child in psutil.Process(cls.odl_process.pid).children():
101 child.send_signal(signal.SIGINT)
103 cls.odl_process.send_signal(signal.SIGINT)
104 cls.odl_process.wait()
105 for child in psutil.Process(cls.honeynode_process1.pid).children():
106 child.send_signal(signal.SIGINT)
108 cls.honeynode_process1.send_signal(signal.SIGINT)
109 cls.honeynode_process1.wait()
110 for child in psutil.Process(cls.honeynode_process2.pid).children():
111 child.send_signal(signal.SIGINT)
113 cls.honeynode_process2.send_signal(signal.SIGINT)
114 cls.honeynode_process2.wait()
115 for child in psutil.Process(cls.honeynode_process3.pid).children():
116 child.send_signal(signal.SIGINT)
118 cls.honeynode_process3.send_signal(signal.SIGINT)
119 cls.honeynode_process3.wait()
120 for child in psutil.Process(cls.honeynode_process4.pid).children():
121 child.send_signal(signal.SIGINT)
123 cls.honeynode_process4.send_signal(signal.SIGINT)
124 cls.honeynode_process4.wait()
125 print ("all processes killed")
127 def setUp(self): # instruction executed before each test method
128 print ("execution of {}".format(self.id().split(".")[-1]))
130 # connect netconf devices
131 def test_01_connect_xpdrA(self):
132 url = ("{}/config/network-topology:"
133 "network-topology/topology/topology-netconf/node/XPDRA"
134 .format(self.restconf_baseurl))
137 "netconf-node-topology:username": "admin",
138 "netconf-node-topology:password": "admin",
139 "netconf-node-topology:host": "127.0.0.1",
140 "netconf-node-topology:port": "17831",
141 "netconf-node-topology:tcp-only": "false",
142 "netconf-node-topology:pass-through": {}}]}
143 headers = {'content-type': 'application/json'}
144 response = requests.request(
145 "PUT", url, data=json.dumps(data), headers=headers,
146 auth=('admin', 'admin'))
147 self.assertEqual(response.status_code, requests.codes.created)
150 def test_02_connect_xpdrC(self):
151 url = ("{}/config/network-topology:"
152 "network-topology/topology/topology-netconf/node/XPDRC"
153 .format(self.restconf_baseurl))
156 "netconf-node-topology:username": "admin",
157 "netconf-node-topology:password": "admin",
158 "netconf-node-topology:host": "127.0.0.1",
159 "netconf-node-topology:port": "17834",
160 "netconf-node-topology:tcp-only": "false",
161 "netconf-node-topology:pass-through": {}}]}
162 headers = {'content-type': 'application/json'}
163 response = requests.request(
164 "PUT", url, data=json.dumps(data), headers=headers,
165 auth=('admin', 'admin'))
166 self.assertEqual(response.status_code, requests.codes.created)
169 def test_03_connect_rdmA(self):
170 url = ("{}/config/network-topology:"
171 "network-topology/topology/topology-netconf/node/ROADMA"
172 .format(self.restconf_baseurl))
175 "netconf-node-topology:username": "admin",
176 "netconf-node-topology:password": "admin",
177 "netconf-node-topology:host": "127.0.0.1",
178 "netconf-node-topology:port": "17830",
179 "netconf-node-topology:tcp-only": "false",
180 "netconf-node-topology:pass-through": {}}]}
181 headers = {'content-type': 'application/json'}
182 response = requests.request(
183 "PUT", url, data=json.dumps(data), headers=headers,
184 auth=('admin', 'admin'))
185 self.assertEqual(response.status_code, requests.codes.created)
188 def test_04_connect_rdmC(self):
189 url = ("{}/config/network-topology:"
190 "network-topology/topology/topology-netconf/node/ROADMC"
191 .format(self.restconf_baseurl))
194 "netconf-node-topology:username": "admin",
195 "netconf-node-topology:password": "admin",
196 "netconf-node-topology:host": "127.0.0.1",
197 "netconf-node-topology:port": "17833",
198 "netconf-node-topology:tcp-only": "false",
199 "netconf-node-topology:pass-through": {}}]}
200 headers = {'content-type': 'application/json'}
201 response = requests.request(
202 "PUT", url, data=json.dumps(data), headers=headers,
203 auth=('admin', 'admin'))
204 self.assertEqual(response.status_code, requests.codes.created)
207 def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
208 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
210 "networkutils:input": {
211 "networkutils:links-input": {
212 "networkutils:xpdr-node": "XPDRA",
213 "networkutils:xpdr-num": "1",
214 "networkutils:network-num": "1",
215 "networkutils:rdm-node": "ROADMA",
216 "networkutils:srg-num": "1",
217 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
221 headers = {'content-type': 'application/json'}
222 response = requests.request(
223 "POST", url, data=json.dumps(data),
224 headers=headers, auth=('admin', 'admin'))
225 self.assertEqual(response.status_code, requests.codes.ok)
226 res = response.json()
227 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
230 def test_06_connect_xprdA_N2_to_roadmA_PP2(self):
231 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
233 "networkutils:input": {
234 "networkutils:links-input": {
235 "networkutils:xpdr-node": "XPDRA",
236 "networkutils:xpdr-num": "1",
237 "networkutils:network-num": "2",
238 "networkutils:rdm-node": "ROADMA",
239 "networkutils:srg-num": "1",
240 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
244 headers = {'content-type': 'application/json'}
245 response = requests.request(
246 "POST", url, data=json.dumps(data),
247 headers=headers, auth=('admin', 'admin'))
248 self.assertEqual(response.status_code, requests.codes.ok)
249 res = response.json()
250 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
253 def test_07_connect_roadmA_PP1_to_xpdrA_N1(self):
254 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
256 "networkutils:input": {
257 "networkutils:links-input": {
258 "networkutils:xpdr-node": "XPDRA",
259 "networkutils:xpdr-num": "1",
260 "networkutils:network-num": "1",
261 "networkutils:rdm-node": "ROADMA",
262 "networkutils:srg-num": "1",
263 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
267 headers = {'content-type': 'application/json'}
268 response = requests.request(
269 "POST", url, data=json.dumps(data),
270 headers=headers, auth=('admin', 'admin'))
271 self.assertEqual(response.status_code, requests.codes.ok)
272 res = response.json()
273 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
276 def test_08_connect_roadmA_PP2_to_xpdrA_N2(self):
277 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
279 "networkutils:input": {
280 "networkutils:links-input": {
281 "networkutils:xpdr-node": "XPDRA",
282 "networkutils:xpdr-num": "1",
283 "networkutils:network-num": "2",
284 "networkutils:rdm-node": "ROADMA",
285 "networkutils:srg-num": "1",
286 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
290 headers = {'content-type': 'application/json'}
291 response = requests.request(
292 "POST", url, data=json.dumps(data),
293 headers=headers, auth=('admin', 'admin'))
294 self.assertEqual(response.status_code, requests.codes.ok)
295 res = response.json()
296 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
299 def test_09_connect_xprdC_N1_to_roadmC_PP1(self):
300 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
302 "networkutils:input": {
303 "networkutils:links-input": {
304 "networkutils:xpdr-node": "XPDRC",
305 "networkutils:xpdr-num": "1",
306 "networkutils:network-num": "1",
307 "networkutils:rdm-node": "ROADMC",
308 "networkutils:srg-num": "1",
309 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
313 headers = {'content-type': 'application/json'}
314 response = requests.request(
315 "POST", url, data=json.dumps(data),
316 headers=headers, auth=('admin', 'admin'))
317 self.assertEqual(response.status_code, requests.codes.ok)
318 res = response.json()
319 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
322 def test_10_connect_xprdC_N2_to_roadmC_PP2(self):
323 url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
325 "networkutils:input": {
326 "networkutils:links-input": {
327 "networkutils:xpdr-node": "XPDRC",
328 "networkutils:xpdr-num": "1",
329 "networkutils:network-num": "2",
330 "networkutils:rdm-node": "ROADMC",
331 "networkutils:srg-num": "1",
332 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
336 headers = {'content-type': 'application/json'}
337 response = requests.request(
338 "POST", url, data=json.dumps(data),
339 headers=headers, auth=('admin', 'admin'))
340 self.assertEqual(response.status_code, requests.codes.ok)
341 res = response.json()
342 self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
345 def test_11_connect_roadmC_PP1_to_xpdrC_N1(self):
346 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
348 "networkutils:input": {
349 "networkutils:links-input": {
350 "networkutils:xpdr-node": "XPDRC",
351 "networkutils:xpdr-num": "1",
352 "networkutils:network-num": "1",
353 "networkutils:rdm-node": "ROADMC",
354 "networkutils:srg-num": "1",
355 "networkutils:termination-point-num": "SRG1-PP1-TXRX"
359 headers = {'content-type': 'application/json'}
360 response = requests.request(
361 "POST", url, data=json.dumps(data),
362 headers=headers, auth=('admin', 'admin'))
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_12_connect_roadmC_PP2_to_xpdrC_N2(self):
369 url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
371 "networkutils:input": {
372 "networkutils:links-input": {
373 "networkutils:xpdr-node": "XPDRC",
374 "networkutils:xpdr-num": "1",
375 "networkutils:network-num": "2",
376 "networkutils:rdm-node": "ROADMC",
377 "networkutils:srg-num": "1",
378 "networkutils:termination-point-num": "SRG1-PP2-TXRX"
382 headers = {'content-type': 'application/json'}
383 response = requests.request(
384 "POST", url, data=json.dumps(data),
385 headers=headers, auth=('admin', 'admin'))
386 self.assertEqual(response.status_code, requests.codes.ok)
387 res = response.json()
388 self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
391 #test service-create for Eth service from xpdr to xpdr
392 def test_13_create_eth_service1(self):
393 url = ("{}/operations/org-openroadm-service:service-create"
394 .format(self.restconf_baseurl))
396 "sdnc-request-header": {
397 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
398 "rpc-action": "service-create",
399 "request-system-id": "appname",
400 "notification-url": "http://localhost:8585/NotificationServer/notify"
402 "service-name": "service1",
403 "common-id": "ASATT1234567",
404 "connection-type": "service",
406 "service-rate": "100",
408 "service-format": "Ethernet",
409 "clli": "SNJSCAMCJP8",
412 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
413 "port-type": "router",
414 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
415 "port-rack": "000000.00",
419 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
420 "lgx-port-name": "LGX Back.3",
421 "lgx-port-rack": "000000.00",
422 "lgx-port-shelf": "00"
427 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
428 "port-type": "router",
429 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
430 "port-rack": "000000.00",
434 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
435 "lgx-port-name": "LGX Back.4",
436 "lgx-port-rack": "000000.00",
437 "lgx-port-shelf": "00"
443 "service-rate": "100",
445 "service-format": "Ethernet",
446 "clli": "SNJSCAMCJT4",
449 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
450 "port-type": "router",
451 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
452 "port-rack": "000000.00",
456 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
457 "lgx-port-name": "LGX Back.29",
458 "lgx-port-rack": "000000.00",
459 "lgx-port-shelf": "00"
464 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
465 "port-type": "router",
466 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
467 "port-rack": "000000.00",
471 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
472 "lgx-port-name": "LGX Back.30",
473 "lgx-port-rack": "000000.00",
474 "lgx-port-shelf": "00"
479 "due-date": "2016-11-28T00:00:01Z",
480 "operator-contact": "pw1234"
483 headers = {'content-type': 'application/json',
484 "Accept": "application/json"}
485 response = requests.request(
486 "POST", url, data=json.dumps(data), headers=headers,
487 auth=('admin', 'admin'))
488 self.assertEqual(response.status_code, requests.codes.ok)
489 res = response.json()
490 self.assertIn('PCE calculation in progress',
491 res['output']['configuration-response-common']['response-message'])
494 def test_14_get_eth_service1(self):
495 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
496 .format(self.restconf_baseurl))
497 headers = {'content-type': 'application/json',
498 "Accept": "application/json"}
499 response = requests.request(
500 "GET", url, headers=headers, auth=('admin', 'admin'))
501 self.assertEqual(response.status_code, requests.codes.ok)
502 res = response.json()
504 res['services'][0]['administrative-state'],
507 res['services'][0]['service-name'], 'service1')
509 res['services'][0]['connection-type'], 'service')
511 res['services'][0]['lifecycle-state'], 'planned')
514 def test_15_check_xc1_ROADMA(self):
515 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
516 "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
517 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
518 .format(self.restconf_baseurl))
519 headers = {'content-type': 'application/json'}
520 response = requests.request(
521 "GET", url, headers=headers, auth=('admin', 'admin'))
522 self.assertEqual(response.status_code, requests.codes.ok)
523 res = response.json()
524 self.assertDictContainsSubset(
525 {'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
526 'wavelength-number': 1,
527 'opticalControlMode': 'gainLoss',
528 'target-output-power': -3.0},
529 res['roadm-connections'][0])
530 self.assertDictEqual(
531 {'src-if': 'SRG1-PP1-TXRX-1'},
532 res['roadm-connections'][0]['source'])
533 self.assertDictEqual(
534 {'dst-if': 'DEG1-TTP-TXRX-1'},
535 res['roadm-connections'][0]['destination'])
538 def test_16_check_xc1_ROADMC(self):
539 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
540 "node/ROADMC/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
541 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
542 .format(self.restconf_baseurl))
543 headers = {'content-type': 'application/json'}
544 response = requests.request(
545 "GET", url, headers=headers, auth=('admin', 'admin'))
546 self.assertEqual(response.status_code, requests.codes.ok)
547 res = response.json()
548 self.assertDictContainsSubset(
549 {'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
550 'wavelength-number': 1,
551 'opticalControlMode': 'gainLoss',
552 'target-output-power': 2.0},
553 res['roadm-connections'][0])
554 self.assertDictEqual(
555 {'src-if': 'SRG1-PP1-TXRX-1'},
556 res['roadm-connections'][0]['source'])
557 self.assertDictEqual(
558 {'dst-if': 'DEG2-TTP-TXRX-1'},
559 res['roadm-connections'][0]['destination'])
562 def test_17_check_topo_XPDRA(self):
563 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
564 .format(self.restconf_baseurl))
565 response = requests.request(
566 "GET", url1, auth=('admin', 'admin'))
567 self.assertEqual(response.status_code, requests.codes.ok)
568 res = response.json()
569 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
571 if ele['tp-id'] == 'XPDR1-CLIENT1':
572 self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
573 if ele['tp-id'] == 'XPDR1-NETWORK1':
574 self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
575 if ele['tp-id'] == 'XPDR1-CLIENT2':
576 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
577 if ele['tp-id'] == 'XPDR1-NETWORK2':
578 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
581 def test_18_check_topo_ROADMA_SRG1(self):
582 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
583 .format(self.restconf_baseurl))
584 response = requests.request(
585 "GET", url1, auth=('admin', 'admin'))
586 self.assertEqual(response.status_code, requests.codes.ok)
587 res = response.json()
588 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
589 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
591 if ele['tp-id'] == 'SRG1-PP1-TXRX':
592 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
593 if ele['tp-id'] == 'SRG1-PP2-TXRX':
594 self.assertNotIn('used-wavelength', dict.keys(ele))
597 def test_19_check_topo_ROADMA_DEG1(self):
598 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
599 .format(self.restconf_baseurl))
600 response = requests.request(
601 "GET", url1, auth=('admin', 'admin'))
602 self.assertEqual(response.status_code, requests.codes.ok)
603 res = response.json()
604 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
605 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
607 if ele['tp-id'] == 'DEG1-CTP-TXRX':
608 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
609 if ele['tp-id'] == 'DEG1-TTP-TXRX':
610 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
613 def test_20_create_eth_service2(self):
614 url = ("{}/operations/org-openroadm-service:service-create"
615 .format(self.restconf_baseurl))
617 "sdnc-request-header": {
618 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
619 "rpc-action": "service-create",
620 "request-system-id": "appname",
621 "notification-url": "http://localhost:8585/NotificationServer/notify"
623 "service-name": "service2",
624 "common-id": "ASATT1234567",
625 "connection-type": "service",
627 "service-rate": "100",
629 "service-format": "Ethernet",
630 "clli": "SNJSCAMCJP8",
633 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
634 "port-type": "router",
635 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
636 "port-rack": "000000.00",
640 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
641 "lgx-port-name": "LGX Back.3",
642 "lgx-port-rack": "000000.00",
643 "lgx-port-shelf": "00"
648 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
649 "port-type": "router",
650 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
651 "port-rack": "000000.00",
655 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
656 "lgx-port-name": "LGX Back.4",
657 "lgx-port-rack": "000000.00",
658 "lgx-port-shelf": "00"
664 "service-rate": "100",
666 "service-format": "Ethernet",
667 "clli": "SNJSCAMCJT4",
670 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
671 "port-type": "router",
672 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
673 "port-rack": "000000.00",
677 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
678 "lgx-port-name": "LGX Back.29",
679 "lgx-port-rack": "000000.00",
680 "lgx-port-shelf": "00"
685 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
686 "port-type": "router",
687 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
688 "port-rack": "000000.00",
692 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
693 "lgx-port-name": "LGX Back.30",
694 "lgx-port-rack": "000000.00",
695 "lgx-port-shelf": "00"
700 "due-date": "2016-11-28T00:00:01Z",
701 "operator-contact": "pw1234"
704 headers = {'content-type': 'application/json',
705 "Accept": "application/json"}
706 response = requests.request(
707 "POST", url, data=json.dumps(data), headers=headers,
708 auth=('admin', 'admin'))
709 self.assertEqual(response.status_code, requests.codes.ok)
710 res = response.json()
711 self.assertIn('PCE calculation in progress',
712 res['output']['configuration-response-common']['response-message'])
715 def test_21_get_eth_service2(self):
716 url = ("{}/operational/org-openroadm-service:service-list/services/service2"
717 .format(self.restconf_baseurl))
718 headers = {'content-type': 'application/json',
719 "Accept": "application/json"}
720 response = requests.request(
721 "GET", url, headers=headers, auth=('admin', 'admin'))
722 self.assertEqual(response.status_code, requests.codes.ok)
723 res = response.json()
725 res['services'][0]['administrative-state'],
728 res['services'][0]['service-name'], 'service2')
730 res['services'][0]['connection-type'], 'service')
732 res['services'][0]['lifecycle-state'], 'planned')
735 def test_22_check_xc2_ROADMA(self):
736 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
737 "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
738 "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-2"
739 .format(self.restconf_baseurl))
740 headers = {'content-type': 'application/json'}
741 response = requests.request(
742 "GET", url, headers=headers, auth=('admin', 'admin'))
743 self.assertEqual(response.status_code, requests.codes.ok)
744 res = response.json()
745 self.assertDictContainsSubset(
746 {'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-2',
747 'wavelength-number': 2,
748 'opticalControlMode': 'power'},
749 res['roadm-connections'][0])
750 self.assertDictEqual(
751 {'src-if': 'DEG1-TTP-TXRX-2'},
752 res['roadm-connections'][0]['source'])
753 self.assertDictEqual(
754 {'dst-if': 'SRG1-PP2-TXRX-2'},
755 res['roadm-connections'][0]['destination'])
757 def test_23_check_topo_XPDRA(self):
758 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
759 .format(self.restconf_baseurl))
760 response = requests.request(
761 "GET", url1, auth=('admin', 'admin'))
762 self.assertEqual(response.status_code, requests.codes.ok)
763 res = response.json()
764 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
766 if ele['tp-id'] == 'XPDR1-CLIENT1':
767 self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
768 if ele['tp-id'] == 'XPDR1-NETWORK1':
769 self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
770 if ele['tp-id'] == 'XPDR1-CLIENT2':
771 self.assertEqual({u'index': 2}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
772 if ele['tp-id'] == 'XPDR1-NETWORK2':
773 self.assertEqual({u'index': 2}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
776 def test_24_check_topo_ROADMA_SRG1(self):
777 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
778 .format(self.restconf_baseurl))
779 response = requests.request(
780 "GET", url1, auth=('admin', 'admin'))
781 self.assertEqual(response.status_code, requests.codes.ok)
782 res = response.json()
783 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
784 self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
785 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
787 if ele['tp-id'] == 'SRG1-PP1-TXRX':
788 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
789 self.assertNotIn({u'index': 2}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
790 if ele['tp-id'] == 'SRG1-PP2-TXRX':
791 self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
792 self.assertNotIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
793 if ele['tp-id'] == 'SRG1-PP3-TXRX':
794 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
798 def test_25_check_topo_ROADMA_DEG1(self):
799 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
800 .format(self.restconf_baseurl))
801 response = requests.request(
802 "GET", url1, auth=('admin', 'admin'))
803 self.assertEqual(response.status_code, requests.codes.ok)
804 res = response.json()
805 self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
806 self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
807 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
809 if ele['tp-id'] == 'DEG1-CTP-TXRX':
810 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
811 self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
812 if ele['tp-id'] == 'DEG1-TTP-TXRX':
813 self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
814 self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
817 # creation service test on a non-available resource
818 def test_26_create_eth_service3(self):
819 url = ("{}/operations/org-openroadm-service:service-create"
820 .format(self.restconf_baseurl))
822 "sdnc-request-header": {
823 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
824 "rpc-action": "service-create",
825 "request-system-id": "appname",
826 "notification-url": "http://localhost:8585/NotificationServer/notify"
828 "service-name": "service3",
829 "common-id": "ASATT1234567",
830 "connection-type": "service",
832 "service-rate": "100",
834 "service-format": "Ethernet",
835 "clli": "SNJSCAMCJP8",
838 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
839 "port-type": "router",
840 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
841 "port-rack": "000000.00",
845 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
846 "lgx-port-name": "LGX Back.3",
847 "lgx-port-rack": "000000.00",
848 "lgx-port-shelf": "00"
853 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
854 "port-type": "router",
855 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
856 "port-rack": "000000.00",
860 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
861 "lgx-port-name": "LGX Back.4",
862 "lgx-port-rack": "000000.00",
863 "lgx-port-shelf": "00"
869 "service-rate": "100",
871 "service-format": "Ethernet",
872 "clli": "SNJSCAMCJT4",
875 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
876 "port-type": "router",
877 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
878 "port-rack": "000000.00",
882 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
883 "lgx-port-name": "LGX Back.29",
884 "lgx-port-rack": "000000.00",
885 "lgx-port-shelf": "00"
890 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
891 "port-type": "router",
892 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
893 "port-rack": "000000.00",
897 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
898 "lgx-port-name": "LGX Back.30",
899 "lgx-port-rack": "000000.00",
900 "lgx-port-shelf": "00"
905 "due-date": "2016-11-28T00:00:01Z",
906 "operator-contact": "pw1234"
909 headers = {'content-type': 'application/json',
910 "Accept": "application/json"}
911 response = requests.request(
912 "POST", url, data=json.dumps(data), headers=headers,
913 auth=('admin', 'admin'))
914 self.assertEqual(response.status_code, requests.codes.ok)
915 res = response.json()
916 self.assertIn('No path available',
917 res['output']['configuration-response-common']['response-message'])
918 self.assertIn('500', res['output']['configuration-response-common']['response-code'])
921 # add a test that check the openroadm-service-list still only contains 2 elements
923 def test_27_delete_eth_service3(self):
924 url = ("{}/operations/org-openroadm-service:service-delete"
925 .format(self.restconf_baseurl))
927 "sdnc-request-header": {
928 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
929 "rpc-action": "service-delete",
930 "request-system-id": "appname",
931 "notification-url": "http://localhost:8585/NotificationServer/notify"
933 "service-delete-req-info": {
934 "service-name": "service3",
935 "tail-retention": "no"
939 headers = {'content-type': 'application/json'}
940 response = requests.request(
941 "POST", url, data=json.dumps(data), headers=headers,
942 auth=('admin', 'admin'))
943 self.assertEqual(response.status_code, requests.codes.ok)
944 res = response.json()
945 self.assertIn('Service \'service3\' does not exist in datastore',
946 res['output']['configuration-response-common']['response-message'])
947 self.assertIn('500', res['output']['configuration-response-common']['response-code'])
950 def test_28_delete_eth_service1(self):
951 url = ("{}/operations/org-openroadm-service:service-delete"
952 .format(self.restconf_baseurl))
954 "sdnc-request-header": {
955 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
956 "rpc-action": "service-delete",
957 "request-system-id": "appname",
958 "notification-url": "http://localhost:8585/NotificationServer/notify"
960 "service-delete-req-info": {
961 "service-name": "service1",
962 "tail-retention": "no"
966 headers = {'content-type': 'application/json'}
967 response = requests.request(
968 "POST", url, data=json.dumps(data), headers=headers,
969 auth=('admin', 'admin'))
970 self.assertEqual(response.status_code, requests.codes.ok)
971 res = response.json()
972 self.assertIn('Renderer service delete in progress',
973 res['output']['configuration-response-common']['response-message'])
976 def test_29_delete_eth_service2(self):
977 url = ("{}/operations/org-openroadm-service:service-delete"
978 .format(self.restconf_baseurl))
980 "sdnc-request-header": {
981 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
982 "rpc-action": "service-delete",
983 "request-system-id": "appname",
984 "notification-url": "http://localhost:8585/NotificationServer/notify"
986 "service-delete-req-info": {
987 "service-name": "service2",
988 "tail-retention": "no"
992 headers = {'content-type': 'application/json'}
993 response = requests.request(
994 "POST", url, data=json.dumps(data), headers=headers,
995 auth=('admin', 'admin'))
996 self.assertEqual(response.status_code, requests.codes.ok)
997 res = response.json()
998 self.assertIn('Renderer service delete in progress',
999 res['output']['configuration-response-common']['response-message'])
1002 def test_30_check_no_xc_ROADMA(self):
1003 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1004 "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1005 .format(self.restconf_baseurl))
1006 response = requests.request(
1007 "GET", url, auth=('admin', 'admin'))
1008 res = response.json()
1009 self.assertEqual(response.status_code, requests.codes.ok)
1010 self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device']))
1013 def test_31_check_topo_XPDRA(self):
1014 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
1015 .format(self.restconf_baseurl))
1016 response = requests.request(
1017 "GET", url1, auth=('admin', 'admin'))
1018 self.assertEqual(response.status_code, requests.codes.ok)
1019 res = response.json()
1020 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1021 for ele in liste_tp:
1022 if ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-CLIENT':
1023 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
1024 elif ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-NETWORK':
1025 self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
1028 def test_32_check_topo_ROADMA_SRG1(self):
1029 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
1030 .format(self.restconf_baseurl))
1031 response = requests.request(
1032 "GET", url1, auth=('admin', 'admin'))
1033 self.assertEqual(response.status_code, requests.codes.ok)
1034 res = response.json()
1035 self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
1036 self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
1037 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1038 for ele in liste_tp:
1039 if ele['tp-id'] == 'SRG1-PP1-TXRX':
1040 self.assertEqual({}, ele['org-openroadm-network-topology:pp-attributes'])
1041 elif ele['tp-id'] == 'SRG1-PP2-TXRX':
1042 self.assertEqual({}, ele['org-openroadm-network-topology:pp-attributes'])
1044 self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
1047 def test_33_check_topo_ROADMA_DEG1(self):
1048 url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
1049 .format(self.restconf_baseurl))
1050 response = requests.request(
1051 "GET", url1, auth=('admin', 'admin'))
1052 self.assertEqual(response.status_code, requests.codes.ok)
1053 res = response.json()
1054 self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
1055 self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
1056 liste_tp = res['node'][0]['ietf-network-topology:termination-point']
1057 for ele in liste_tp:
1058 if ele['tp-id'] == 'DEG1-CTP-TXRX':
1059 self.assertEqual({}, ele['org-openroadm-network-topology:ctp-attributes'])
1060 if ele['tp-id'] == 'DEG1-TTP-TXRX':
1061 self.assertEqual({}, ele['org-openroadm-network-topology:tx-ttp-attributes'])
1065 # test service-create for Optical Channel (OC) service from srg-pp to srg-pp
1066 def test_34_create_oc_service1(self):
1067 url = ("{}/operations/org-openroadm-service:service-create"
1068 .format(self.restconf_baseurl))
1070 "sdnc-request-header": {
1071 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1072 "rpc-action": "service-create",
1073 "request-system-id": "appname",
1074 "notification-url": "http://localhost:8585/NotificationServer/notify"
1076 "service-name": "service1",
1077 "common-id": "ASATT1234567",
1078 "connection-type": "roadm-line",
1080 "service-rate": "100",
1081 "node-id": "ROADMA",
1082 "service-format": "OC",
1083 "clli": "SNJSCAMCJP8",
1086 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1087 "port-type": "router",
1088 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1089 "port-rack": "000000.00",
1093 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1094 "lgx-port-name": "LGX Back.3",
1095 "lgx-port-rack": "000000.00",
1096 "lgx-port-shelf": "00"
1101 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1102 "port-type": "router",
1103 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1104 "port-rack": "000000.00",
1108 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1109 "lgx-port-name": "LGX Back.4",
1110 "lgx-port-rack": "000000.00",
1111 "lgx-port-shelf": "00"
1114 "optic-type": "gray"
1117 "service-rate": "100",
1118 "node-id": "ROADMC",
1119 "service-format": "OC",
1120 "clli": "SNJSCAMCJT4",
1123 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1124 "port-type": "router",
1125 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1126 "port-rack": "000000.00",
1130 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1131 "lgx-port-name": "LGX Back.29",
1132 "lgx-port-rack": "000000.00",
1133 "lgx-port-shelf": "00"
1138 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1139 "port-type": "router",
1140 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1141 "port-rack": "000000.00",
1145 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1146 "lgx-port-name": "LGX Back.30",
1147 "lgx-port-rack": "000000.00",
1148 "lgx-port-shelf": "00"
1151 "optic-type": "gray"
1153 "due-date": "2016-11-28T00:00:01Z",
1154 "operator-contact": "pw1234"
1157 headers = {'content-type': 'application/json',
1158 "Accept": "application/json"}
1159 response = requests.request(
1160 "POST", url, data=json.dumps(data), headers=headers,
1161 auth=('admin', 'admin'))
1162 self.assertEqual(response.status_code, requests.codes.ok)
1163 res = response.json()
1164 self.assertIn('PCE calculation in progress',
1165 res['output']['configuration-response-common']['response-message'])
1168 def test_35_get_oc_service1(self):
1169 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
1170 .format(self.restconf_baseurl))
1171 headers = {'content-type': 'application/json',
1172 "Accept": "application/json"}
1173 response = requests.request(
1174 "GET", url, headers=headers, auth=('admin', 'admin'))
1175 self.assertEqual(response.status_code, requests.codes.ok)
1176 res = response.json()
1178 res['services'][0]['administrative-state'],
1181 res['services'][0]['service-name'], 'service1')
1183 res['services'][0]['connection-type'], 'roadm-line')
1185 res['services'][0]['lifecycle-state'], 'planned')
1188 def test_36_check_xc1_ROADMA(self):
1189 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1190 "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1191 "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
1192 .format(self.restconf_baseurl))
1193 headers = {'content-type': 'application/json'}
1194 response = requests.request(
1195 "GET", url, headers=headers, auth=('admin', 'admin'))
1196 self.assertEqual(response.status_code, requests.codes.ok)
1197 res = response.json()
1198 self.assertDictContainsSubset(
1199 {'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
1200 'wavelength-number': 1,
1201 'opticalControlMode': 'gainLoss',
1202 'target-output-power': -3.0},
1203 res['roadm-connections'][0])
1204 self.assertDictEqual(
1205 {'src-if': 'SRG1-PP1-TXRX-1'},
1206 res['roadm-connections'][0]['source'])
1207 self.assertDictEqual(
1208 {'dst-if': 'DEG1-TTP-TXRX-1'},
1209 res['roadm-connections'][0]['destination'])
1212 def test_37_check_xc1_ROADMC(self):
1213 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1214 "node/ROADMC/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1215 "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
1216 .format(self.restconf_baseurl))
1217 headers = {'content-type': 'application/json'}
1218 response = requests.request(
1219 "GET", url, headers=headers, auth=('admin', 'admin'))
1220 self.assertEqual(response.status_code, requests.codes.ok)
1221 res = response.json()
1222 self.assertDictContainsSubset(
1223 {'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
1224 'wavelength-number': 1,
1225 'opticalControlMode': 'gainLoss',
1226 'target-output-power': 2.0},
1227 res['roadm-connections'][0])
1228 self.assertDictEqual(
1229 {'src-if': 'SRG1-PP1-TXRX-1'},
1230 res['roadm-connections'][0]['source'])
1231 self.assertDictEqual(
1232 {'dst-if': 'DEG2-TTP-TXRX-1'},
1233 res['roadm-connections'][0]['destination'])
1236 def test_38_create_oc_service2(self):
1237 url = ("{}/operations/org-openroadm-service:service-create"
1238 .format(self.restconf_baseurl))
1240 "sdnc-request-header": {
1241 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1242 "rpc-action": "service-create",
1243 "request-system-id": "appname",
1244 "notification-url": "http://localhost:8585/NotificationServer/notify"
1246 "service-name": "service2",
1247 "common-id": "ASATT1234567",
1248 "connection-type": "roadm-line",
1250 "service-rate": "100",
1251 "node-id": "ROADMA",
1252 "service-format": "OC",
1253 "clli": "SNJSCAMCJP8",
1256 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1257 "port-type": "router",
1258 "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
1259 "port-rack": "000000.00",
1263 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1264 "lgx-port-name": "LGX Back.3",
1265 "lgx-port-rack": "000000.00",
1266 "lgx-port-shelf": "00"
1271 "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
1272 "port-type": "router",
1273 "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
1274 "port-rack": "000000.00",
1278 "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
1279 "lgx-port-name": "LGX Back.4",
1280 "lgx-port-rack": "000000.00",
1281 "lgx-port-shelf": "00"
1284 "optic-type": "gray"
1287 "service-rate": "100",
1288 "node-id": "ROADMC",
1289 "service-format": "OC",
1290 "clli": "SNJSCAMCJT4",
1293 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1294 "port-type": "router",
1295 "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
1296 "port-rack": "000000.00",
1300 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1301 "lgx-port-name": "LGX Back.29",
1302 "lgx-port-rack": "000000.00",
1303 "lgx-port-shelf": "00"
1308 "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
1309 "port-type": "router",
1310 "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
1311 "port-rack": "000000.00",
1315 "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
1316 "lgx-port-name": "LGX Back.30",
1317 "lgx-port-rack": "000000.00",
1318 "lgx-port-shelf": "00"
1321 "optic-type": "gray"
1323 "due-date": "2016-11-28T00:00:01Z",
1324 "operator-contact": "pw1234"
1327 headers = {'content-type': 'application/json',
1328 "Accept": "application/json"}
1329 response = requests.request(
1330 "POST", url, data=json.dumps(data), headers=headers,
1331 auth=('admin', 'admin'))
1332 self.assertEqual(response.status_code, requests.codes.ok)
1333 res = response.json()
1334 self.assertIn('PCE calculation in progress',
1335 res['output']['configuration-response-common']['response-message'])
1338 def test_39_get_oc_service2(self):
1339 url = ("{}/operational/org-openroadm-service:service-list/services/service2"
1340 .format(self.restconf_baseurl))
1341 headers = {'content-type': 'application/json',
1342 "Accept": "application/json"}
1343 response = requests.request(
1344 "GET", url, headers=headers, auth=('admin', 'admin'))
1345 self.assertEqual(response.status_code, requests.codes.ok)
1346 res = response.json()
1348 res['services'][0]['administrative-state'],
1351 res['services'][0]['service-name'], 'service2')
1353 res['services'][0]['connection-type'], 'roadm-line')
1355 res['services'][0]['lifecycle-state'], 'planned')
1358 def test_40_check_xc2_ROADMA(self):
1359 url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
1360 "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1361 "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-2"
1362 .format(self.restconf_baseurl))
1363 headers = {'content-type': 'application/json'}
1364 response = requests.request(
1365 "GET", url, headers=headers, auth=('admin', 'admin'))
1366 self.assertEqual(response.status_code, requests.codes.ok)
1367 res = response.json()
1368 self.assertDictContainsSubset(
1369 {'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-2',
1370 'wavelength-number': 2,
1371 'opticalControlMode': 'gainLoss',
1372 'target-output-power': -3.0},
1373 res['roadm-connections'][0])
1374 self.assertDictEqual(
1375 {'src-if': 'SRG1-PP2-TXRX-2'},
1376 res['roadm-connections'][0]['source'])
1377 self.assertDictEqual(
1378 {'dst-if': 'DEG1-TTP-TXRX-2'},
1379 res['roadm-connections'][0]['destination'])
1382 def test_41_check_topo_ROADMA(self):
1383 self.test_24_check_topo_ROADMA_SRG1()
1384 self.test_25_check_topo_ROADMA_DEG1()
1388 def test_42_delete_oc_service1(self):
1389 url = ("{}/operations/org-openroadm-service:service-delete"
1390 .format(self.restconf_baseurl))
1392 "sdnc-request-header": {
1393 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1394 "rpc-action": "service-delete",
1395 "request-system-id": "appname",
1396 "notification-url": "http://localhost:8585/NotificationServer/notify"
1398 "service-delete-req-info": {
1399 "service-name": "service1",
1400 "tail-retention": "no"
1404 headers = {'content-type': 'application/json'}
1405 response = requests.request(
1406 "POST", url, data=json.dumps(data), headers=headers,
1407 auth=('admin', 'admin'))
1408 self.assertEqual(response.status_code, requests.codes.ok)
1409 res = response.json()
1410 self.assertIn('Renderer service delete in progress',
1411 res['output']['configuration-response-common']['response-message'])
1414 def test_43_delete_oc_service2(self):
1415 url = ("{}/operations/org-openroadm-service:service-delete"
1416 .format(self.restconf_baseurl))
1418 "sdnc-request-header": {
1419 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1420 "rpc-action": "service-delete",
1421 "request-system-id": "appname",
1422 "notification-url": "http://localhost:8585/NotificationServer/notify"
1424 "service-delete-req-info": {
1425 "service-name": "service2",
1426 "tail-retention": "no"
1430 headers = {'content-type': 'application/json'}
1431 response = requests.request(
1432 "POST", url, data=json.dumps(data), headers=headers,
1433 auth=('admin', 'admin'))
1434 self.assertEqual(response.status_code, requests.codes.ok)
1435 res = response.json()
1436 self.assertIn('Renderer service delete in progress',
1437 res['output']['configuration-response-common']['response-message'])
1440 def test_44_get_no_oc_services(self):
1441 print ("start test")
1442 url = ("{}/operational/org-openroadm-service:service-list"
1443 .format(self.restconf_baseurl))
1444 headers = {'content-type': 'application/json',
1445 "Accept": "application/json"}
1446 response = requests.request(
1447 "GET", url, headers=headers, auth=('admin', 'admin'))
1448 self.assertEqual(response.status_code, requests.codes.ok)
1449 res = response.json()
1450 self.assertEqual({u'service-list': {}}, res)
1453 def test_45_get_no_xc_ROADMA(self):
1454 url = ("{}/config/network-topology:network-topology/topology/topology-netconf"
1455 "/node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
1456 .format(self.restconf_baseurl))
1457 headers = {'content-type': 'application/json',
1458 "Accept": "application/json"}
1459 response = requests.request(
1460 "GET", url, headers=headers, auth=('admin', 'admin'))
1461 self.assertEqual(response.status_code, requests.codes.ok)
1462 res = response.json()
1463 self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
1466 def test_46_check_topo_ROADMA(self):
1467 self.test_32_check_topo_ROADMA_SRG1()
1468 self.test_33_check_topo_ROADMA_DEG1()
1470 def test_47_loop_create_eth_service(self):
1471 for i in range(1,6):
1472 print ("trial number {}".format(i))
1473 print("eth service creation")
1474 self.test_13_create_eth_service1()
1475 print ("check xc in ROADMA")
1476 self.test_15_check_xc1_ROADMA()
1477 print ("check xc in ROADMC")
1478 self.test_16_check_xc1_ROADMC()
1479 print ("eth service deletion\n")
1480 self.test_28_delete_eth_service1()
1482 def test_48_loop_create_oc_service(self):
1483 url = ("{}/operational/org-openroadm-service:service-list/services/service1"
1484 .format(self.restconf_baseurl))
1485 response = requests.request("GET", url, auth=('admin', 'admin'))
1486 if response.status_code != 404:
1487 url = ("{}/operations/org-openroadm-service:service-delete"
1488 .format(self.restconf_baseurl))
1490 "sdnc-request-header": {
1491 "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
1492 "rpc-action": "service-delete",
1493 "request-system-id": "appname",
1494 "notification-url": "http://localhost:8585/NotificationServer/notify"
1496 "service-delete-req-info": {
1497 "service-name": "service1",
1498 "tail-retention": "no"
1502 headers = {'content-type': 'application/json'}
1503 requests.request("POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin'))
1506 for i in range(1,6):
1507 print ("trial number {}".format(i))
1508 print("oc service creation")
1509 self.test_34_create_oc_service1()
1510 print ("check xc in ROADMA")
1511 self.test_36_check_xc1_ROADMA()
1512 print ("check xc in ROADMC")
1513 self.test_37_check_xc1_ROADMC()
1514 print ("oc service deletion\n")
1515 self.test_42_delete_oc_service1()
1518 def test_49_disconnect_XPDRA(self):
1519 url = ("{}/config/network-topology:"
1520 "network-topology/topology/topology-netconf/node/XPDRA"
1521 .format(self.restconf_baseurl))
1522 headers = {'content-type': 'application/json'}
1523 response = requests.request(
1524 "DELETE", url, headers=headers,
1525 auth=('admin', 'admin'))
1526 self.assertEqual(response.status_code, requests.codes.ok)
1529 def test_50_disconnect_XPDRC(self):
1530 url = ("{}/config/network-topology:"
1531 "network-topology/topology/topology-netconf/node/XPDRC"
1532 .format(self.restconf_baseurl))
1533 headers = {'content-type': 'application/json'}
1534 response = requests.request(
1535 "DELETE", url, headers=headers,
1536 auth=('admin', 'admin'))
1537 self.assertEqual(response.status_code, requests.codes.ok)
1540 def test_51_disconnect_ROADMA(self):
1541 url = ("{}/config/network-topology:"
1542 "network-topology/topology/topology-netconf/node/ROADMA"
1543 .format(self.restconf_baseurl))
1544 headers = {'content-type': 'application/json'}
1545 response = requests.request(
1546 "DELETE", url, headers=headers,
1547 auth=('admin', 'admin'))
1548 self.assertEqual(response.status_code, requests.codes.ok)
1551 def test_52_disconnect_ROADMC(self):
1552 url = ("{}/config/network-topology:"
1553 "network-topology/topology/topology-netconf/node/ROADMC"
1554 .format(self.restconf_baseurl))
1555 headers = {'content-type': 'application/json'}
1556 response = requests.request(
1557 "DELETE", url, headers=headers,
1558 auth=('admin', 'admin'))
1559 self.assertEqual(response.status_code, requests.codes.ok)
1563 if __name__ == "__main__":
1564 unittest.main(verbosity=2)