fix minor bugs in portmapping
[transportpce.git] / tests / transportpce_tests / test_servicehandler.py
1 #!/usr/bin/env python
2 ##############################################################################
3 # Copyright (c) 2017 Orange, Inc. and others.  All rights reserved.
4 #
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 ##############################################################################
10
11 import json
12 import os
13 import psutil
14 import requests
15 import signal
16 import shutil
17 import subprocess
18 import time
19 import unittest
20
21
22 class TransportPCEtesting(unittest.TestCase):
23
24     odl_process = None
25     honeynode_topology = None
26     restconf_baseurl = "http://localhost:8181/restconf"
27
28     @classmethod
29     def _get_file(cls):
30         honeynode_topology_file = "sample_configs/honeynode-topo.xml"
31         if os.path.isfile(honeynode_topology_file):
32             with open(honeynode_topology_file, 'r') as honeynode_file:
33                 cls.honeynode_topo = honeynode_file.read();
34
35     @classmethod
36     def __start_odl(cls):
37         executable = "../karaf/target/assembly/bin/karaf"
38         with open('odl.log', 'w') as outfile:
39             cls.odl_process = subprocess.Popen(
40                 ["bash", executable, "server"], stdout=outfile,
41                 stdin=open(os.devnull))
42
43     @classmethod
44     def setUpClass(cls):  # a class method called before tests in an individual class run.
45         cls._get_file()
46         cls.__start_odl()
47         time.sleep(90)
48
49     @classmethod
50     def tearDownClass(cls):
51         for child in psutil.Process(cls.odl_process.pid).children():
52             child.send_signal(signal.SIGINT)
53             child.wait()
54         cls.odl_process.send_signal(signal.SIGINT)
55         cls.odl_process.wait()
56
57     def setUp(self):  # instruction executed before each test method
58         print ("execution of {}".format(self.id().split(".")[-1]))
59
60 #    def test_01_restconfAPI(self):
61 #        url = ("{}/operational/network-topology:network-topology/topology/"
62 #        "topology-netconf/node/controller-config".format(self.restconf_baseurl))
63 #        headers = {'content-type': 'application/json'}
64 #        response = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
65 #        self.assertEqual(response.status_code, requests.codes.ok)
66 #        res = response.json()
67 #        self.assertEqual(res['node'] [0] ['netconf-node-topology:connection-status'],
68 #                         'connected')
69 #        time.sleep(1)
70
71     # Load honeynode topology
72     def test_02_load_honeynode_topology(self):
73         url = ("{}/config/ietf-network:network/openroadm-topology"
74               .format(self.restconf_baseurl))
75         body = self.honeynode_topo
76         headers = {'content-type': 'application/xml',
77         "Accept": "application/json"}
78         response = requests.request(
79             "PUT", url, data=body, headers=headers,
80             auth=('admin', 'admin'))
81         self.assertEqual(response.status_code, requests.codes.ok)
82         time.sleep(2)
83
84     def test_03_check_link_xpdra_roadma(self):
85         url = ("{}/config/ietf-network:network/openroadm-topology/link/"
86                "XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX".format(self.restconf_baseurl))
87         headers = {'content-type': 'application/json'}
88         response = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
89         self.assertEqual(response.status_code, requests.codes.ok)
90         res = response.json()
91         time.sleep(1)
92
93     def test_04_check_link_xpdrc_roadmc(self):
94         url = ("{}/config/ietf-network:network/openroadm-topology/link/"
95                "XPDRC-XPDR1-XPDR1-NETWORK1toROADMC-SRG1-SRG1-PP1-TXRX".format(self.restconf_baseurl))
96         headers = {'content-type': 'application/json'}
97         response = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
98         self.assertEqual(response.status_code, requests.codes.ok)
99         res = response.json()
100         time.sleep(1)
101
102     def test_05_check_link_roadma_xpdra(self):
103         url = ("{}/config/ietf-network:network/openroadm-topology/link/"
104                "ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1".format(self.restconf_baseurl))
105         headers = {'content-type': 'application/json'}
106         response = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
107         self.assertEqual(response.status_code, requests.codes.ok)
108         res = response.json()
109         time.sleep(1)
110
111     def test_06_check_link_roadmc_xpdrc(self):
112         url = ("{}/config/ietf-network:network/openroadm-topology/link/"
113                "ROADMC-SRG1-SRG1-PP1-TXRXtoXPDRC-XPDR1-XPDR1-NETWORK1".format(self.restconf_baseurl))
114         headers = {'content-type': 'application/json'}
115         response = requests.request("GET", url, headers=headers, auth=('admin', 'admin'))
116         self.assertEqual(response.status_code, requests.codes.ok)
117         res = response.json()
118         time.sleep(1)
119
120     # Create Service 'test' with correct parameters
121     def test_07_create_service_success(self):
122         url = ("{}/operations/org-openroadm-service:service-create"
123               .format(self.restconf_baseurl))
124         data = {"input": {
125                 "sdnc-request-header": {
126                     "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
127                     "rpc-action": "service-create",
128                     "request-system-id": "appname",
129                     "notification-url": "http://localhost:8585/NotificationServer/notify"
130                 },
131                 "service-name": "test",
132                 "common-id": "ASATT1234567",
133                 "connection-type": "infrastructure",
134                 "service-a-end": {
135                     "service-rate": "100",
136                     "node-id": "XPDRA",
137                     "service-format": "Ethernet",
138                     "clli": "SNJSCAMCJP8",
139                     "tx-direction": {
140                         "port": {
141                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
142                             "port-type": "router",
143                             "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
144                             "port-rack": "000000.00",
145                             "port-shelf": "00"
146                         },
147                         "lgx": {
148                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
149                             "lgx-port-name": "LGX Back.3",
150                             "lgx-port-rack": "000000.00",
151                             "lgx-port-shelf": "00"
152                         }
153                     },
154                     "rx-direction": {
155                         "port": {
156                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
157                             "port-type": "router",
158                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
159                             "port-rack": "000000.00",
160                             "port-shelf": "00"
161                         },
162                         "lgx": {
163                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
164                             "lgx-port-name": "LGX Back.4",
165                             "lgx-port-rack": "000000.00",
166                             "lgx-port-shelf": "00"
167                         }
168                     },
169                     "optic-type": "gray"
170                 },
171                 "service-z-end": {
172                     "service-rate": "100",
173                     "node-id": "XPDRC",
174                     "service-format": "Ethernet",
175                     "clli": "SNJSCAMCJT4",
176                     "tx-direction": {
177                         "port": {
178                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
179                             "port-type": "router",
180                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
181                             "port-rack": "000000.00",
182                             "port-shelf": "00"
183                         },
184                         "lgx": {
185                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
186                             "lgx-port-name": "LGX Back.29",
187                             "lgx-port-rack": "000000.00",
188                             "lgx-port-shelf": "00"
189                         }
190                     },
191                     "rx-direction": {
192                         "port": {
193                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
194                             "port-type": "router",
195                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
196                             "port-rack": "000000.00",
197                             "port-shelf": "00"
198                         },
199                         "lgx": {
200                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
201                             "lgx-port-name": "LGX Back.30",
202                             "lgx-port-rack": "000000.00",
203                             "lgx-port-shelf": "00"
204                         }
205                     },
206                     "optic-type": "gray"
207                 },
208                 "due-date": "2016-11-28T00:00:01Z",
209                 "operator-contact": "pw1234"
210             }
211         }
212         headers = {'content-type': 'application/json',
213         "Accept": "application/json"}
214         response = requests.request(
215             "POST", url, data=json.dumps(data), headers=headers,
216             auth=('admin', 'admin'))
217         self.assertEqual(response.status_code, requests.codes.ok)
218         res = response.json()
219         self.assertIn('PCE calculation in progress',
220             res['output']['configuration-response-common']['response-message'])
221         time.sleep(20)
222
223     # Create Service 'test' with not compliant parameter : no 'sdnc-request-header' parameter
224     def test_08_create_service_failed(self):
225         url = ("{}/operations/org-openroadm-service:service-create"
226               .format(self.restconf_baseurl))
227         data = {"input": {
228                 "service-name": "test",
229                 "common-id": "ASATT1234567",
230                 "connection-type": "infrastructure",
231                 "service-a-end": {
232                     "service-rate": "100",
233                     "node-id": "XPDRA",
234                     "service-format": "Ethernet",
235                     "clli": "SNJSCAMCJP8",
236                     "tx-direction": {
237                         "port": {
238                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
239                             "port-type": "router",
240                             "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
241                             "port-rack": "000000.00",
242                             "port-shelf": "00"
243                         },
244                         "lgx": {
245                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
246                             "lgx-port-name": "LGX Back.3",
247                             "lgx-port-rack": "000000.00",
248                             "lgx-port-shelf": "00"
249                         }
250                     },
251                     "rx-direction": {
252                         "port": {
253                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
254                             "port-type": "router",
255                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
256                             "port-rack": "000000.00",
257                             "port-shelf": "00"
258                         },
259                         "lgx": {
260                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
261                             "lgx-port-name": "LGX Back.4",
262                             "lgx-port-rack": "000000.00",
263                             "lgx-port-shelf": "00"
264                         }
265                     },
266                     "optic-type": "gray"
267                 },
268                 "service-z-end": {
269                     "service-rate": "100",
270                     "node-id": "XPDRC",
271                     "service-format": "Ethernet",
272                     "clli": "SNJSCAMCJT4",
273                     "tx-direction": {
274                         "port": {
275                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
276                             "port-type": "router",
277                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
278                             "port-rack": "000000.00",
279                             "port-shelf": "00"
280                         },
281                         "lgx": {
282                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
283                             "lgx-port-name": "LGX Back.29",
284                             "lgx-port-rack": "000000.00",
285                             "lgx-port-shelf": "00"
286                         }
287                     },
288                     "rx-direction": {
289                         "port": {
290                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
291                             "port-type": "router",
292                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
293                             "port-rack": "000000.00",
294                             "port-shelf": "00"
295                         },
296                         "lgx": {
297                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
298                             "lgx-port-name": "LGX Back.30",
299                             "lgx-port-rack": "000000.00",
300                             "lgx-port-shelf": "00"
301                         }
302                     },
303                     "optic-type": "gray"
304                 },
305                 "due-date": "2016-11-28T00:00:01Z",
306                 "operator-contact": "pw1234"
307             }
308         }
309         headers = {'content-type': 'application/json',
310         "Accept": "application/json"}
311         response = requests.request(
312             "POST", url, data=json.dumps(data), headers=headers,
313             auth=('admin', 'admin'))
314         self.assertEqual(response.status_code, requests.codes.ok)
315         res = response.json()
316         self.assertIn('Service sndc-request-header is not set',
317             res['output']['configuration-response-common']['response-message'])
318         time.sleep(5)
319
320     # Create Service 'test' with not compliant parameter : no 'tx-direction' for serviceAEnd
321     def test_09_create_service_failed(self):
322         url = ("{}/operations/org-openroadm-service:service-create"
323               .format(self.restconf_baseurl))
324         data = {"input": {
325                 "sdnc-request-header": {
326                     "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
327                     "rpc-action": "service-create",
328                     "request-system-id": "appname",
329                     "notification-url": "http://localhost:8585/NotificationServer/notify"
330                 },
331                 "service-name": "test",
332                 "common-id": "ASATT1234567",
333                 "connection-type": "infrastructure",
334                 "service-a-end": {
335                     "service-rate": "100",
336                     "node-id": "XPDRA",
337                     "service-format": "Ethernet",
338                     "clli": "SNJSCAMCJP8",
339                     "rx-direction": {
340                         "port": {
341                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
342                             "port-type": "router",
343                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
344                             "port-rack": "000000.00",
345                             "port-shelf": "00"
346                         },
347                         "lgx": {
348                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
349                             "lgx-port-name": "LGX Back.4",
350                             "lgx-port-rack": "000000.00",
351                             "lgx-port-shelf": "00"
352                         }
353                     },
354                     "optic-type": "gray"
355                 },
356                 "service-z-end": {
357                     "service-rate": "100",
358                     "node-id": "XPDRC",
359                     "service-format": "Ethernet",
360                     "clli": "SNJSCAMCJT4",
361                     "tx-direction": {
362                         "port": {
363                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
364                             "port-type": "router",
365                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
366                             "port-rack": "000000.00",
367                             "port-shelf": "00"
368                         },
369                         "lgx": {
370                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
371                             "lgx-port-name": "LGX Back.29",
372                             "lgx-port-rack": "000000.00",
373                             "lgx-port-shelf": "00"
374                         }
375                     },
376                     "rx-direction": {
377                         "port": {
378                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
379                             "port-type": "router",
380                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
381                             "port-rack": "000000.00",
382                             "port-shelf": "00"
383                         },
384                         "lgx": {
385                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
386                             "lgx-port-name": "LGX Back.30",
387                             "lgx-port-rack": "000000.00",
388                             "lgx-port-shelf": "00"
389                         }
390                     },
391                     "optic-type": "gray"
392                 },
393                 "due-date": "2016-11-28T00:00:01Z",
394                 "operator-contact": "pw1234"
395             }
396         }
397         headers = {'content-type': 'application/json',
398         "Accept": "application/json"}
399         response = requests.request(
400             "POST", url, data=json.dumps(data), headers=headers,
401             auth=('admin', 'admin'))
402         self.assertEqual(response.status_code, requests.codes.ok)
403         res = response.json()
404         self.assertIn('Service TxDirection is not correctly set',
405             res['output']['configuration-response-common']['response-message'])
406         time.sleep(5)
407
408     # Get 'test' service created
409     def test_10_verify_service_created(self):
410         url = ("{}/operational/org-openroadm-service:service-list/services/test"
411               .format(self.restconf_baseurl))
412         headers = {'content-type': 'application/json',
413         "Accept": "application/json"}
414         response = requests.request(
415             "GET", url, headers=headers, auth=('admin', 'admin'))
416         self.assertEqual(response.status_code, requests.codes.ok)
417         res = response.json()
418         self.assertEqual(
419             res['services'][0]['administrative-state'],
420             'inService')
421         time.sleep(1)
422
423     # get non existing service
424     def test_11_get_non_existing_service(self):
425         url = ("{}/operational/org-openroadm-service:service-list/services/test1"
426               .format(self.restconf_baseurl))
427         headers = {'content-type': 'application/json',
428         "Accept": "application/json"}
429         response = requests.request(
430             "GET", url, headers=headers, auth=('admin', 'admin'))
431         self.assertEqual(response.status_code, 404)
432         time.sleep(1)
433
434     #reconfigure 'test' to be 'test-new'
435     def test_12_reconfigure_service_test(self):
436         url = ("{}/operations/org-openroadm-service:service-reconfigure"
437               .format(self.restconf_baseurl))
438         data = {"input": {
439                 "service-name": "test",
440                 "new-service-name": "test-new",
441                 "common-id": "ASATT1234567",
442                 "connection-type": "infrastructure",
443                 "service-a-end": {
444                     "service-rate": "100",
445                     "node-id": "XPDRA",
446                     "service-format": "Ethernet",
447                     "clli": "SNJSCAMCJP8",
448                     "tx-direction": {
449                         "port": {
450                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
451                             "port-type": "router",
452                             "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
453                             "port-rack": "000000.00",
454                             "port-shelf": "00"
455                         },
456                         "lgx": {
457                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
458                             "lgx-port-name": "LGX Back.3",
459                             "lgx-port-rack": "000000.00",
460                             "lgx-port-shelf": "00"
461                         }
462                     },
463                     "rx-direction": {
464                         "port": {
465                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
466                             "port-type": "router",
467                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
468                             "port-rack": "000000.00",
469                             "port-shelf": "00"
470                         },
471                         "lgx": {
472                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
473                             "lgx-port-name": "LGX Back.4",
474                             "lgx-port-rack": "000000.00",
475                             "lgx-port-shelf": "00"
476                         }
477                     },
478                     "optic-type": "gray"
479                 },
480                 "service-z-end": {
481                     "service-rate": "100",
482                     "node-id": "XPDRC",
483                     "service-format": "Ethernet",
484                     "clli": "SNJSCAMCJT4",
485                     "tx-direction": {
486                         "port": {
487                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
488                             "port-type": "router",
489                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
490                             "port-rack": "000000.00",
491                             "port-shelf": "00"
492                         },
493                         "lgx": {
494                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
495                             "lgx-port-name": "LGX Back.29",
496                             "lgx-port-rack": "000000.00",
497                             "lgx-port-shelf": "00"
498                         }
499                     },
500                     "rx-direction": {
501                         "port": {
502                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
503                             "port-type": "router",
504                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
505                             "port-rack": "000000.00",
506                             "port-shelf": "00"
507                         },
508                         "lgx": {
509                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
510                             "lgx-port-name": "LGX Back.30",
511                             "lgx-port-rack": "000000.00",
512                             "lgx-port-shelf": "00"
513                         }
514                     },
515                     "optic-type": "gray"
516                 }
517             }
518         }
519         headers = {'content-type': 'application/json',
520         "Accept": "application/json"}
521         response = requests.request(
522             "POST", url, data=json.dumps(data), headers=headers,
523             auth=('admin', 'admin'))
524         self.assertEqual(response.status_code, requests.codes.ok)
525         res = response.json()
526         self.assertIn('Renderer service delete in progress',
527             res['output']['status-message'])
528         time.sleep(30)
529
530     # get new service 'test-new'
531     def test_13_verify_service_reconfigure(self):
532         url = ("{}/operational/org-openroadm-service:service-list/services/test-new"
533               .format(self.restconf_baseurl))
534         headers = {'content-type': 'application/json',
535         "Accept": "application/json"}
536         response = requests.request(
537             "GET", url, headers=headers, auth=('admin', 'admin'))
538         res = response.json()
539         self.assertEqual(
540             res['services'][0]['administrative-state'],
541             'inService')
542         time.sleep(1)
543
544     # Delete  service
545     def test_14_delete_service_reconfigure(self):
546         url = ("{}/operations/org-openroadm-service:service-delete"
547               .format(self.restconf_baseurl))
548         data = {"input": {
549                 "sdnc-request-header": {
550                     "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
551                     "rpc-action": "service-delete",
552                     "request-system-id": "appname",
553                     "notification-url": "http://localhost:8585/NotificationServer/notify"
554                 },
555                 "service-delete-req-info": {
556                     "service-name": "test-new",
557                     "due-date": "2016-11-28T00:00:01Z",
558                     "tail-retention": "no"
559                 }
560             }
561         }
562         headers = {'content-type': 'application/json'}
563         response = requests.request(
564             "POST", url, data=json.dumps(data), headers=headers,
565             auth=('admin', 'admin'))
566         self.assertEqual(response.status_code, requests.codes.ok)
567         res = response.json()
568         self.assertIn('Renderer service delete in progress',
569             res['output']['configuration-response-common']['response-message'])
570         time.sleep(20)
571
572     # Verify 'test' service deleted
573     def test_15_verify_service_reconfigure_deleted(self):
574         url = ("{}/operational/org-openroadm-service:service-list/services/test-new"
575               .format(self.restconf_baseurl))
576         headers = {'content-type': 'application/json',
577         "Accept": "application/json"}
578         response = requests.request(
579             "GET", url, headers=headers, auth=('admin', 'admin'))
580         self.assertEqual(response.status_code, 404)
581         time.sleep(1)
582
583     # Create Temp Service 'ASATT1234567' with correct parameters
584     def test_16_create_temp_service_success(self):
585         url = ("{}/operations/org-openroadm-service:temp-service-create"
586               .format(self.restconf_baseurl))
587         data = {
588             "input": {
589                 "sdnc-request-header": {
590                     "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
591                     "rpc-action": "temp-service-create",
592                     "request-system-id": "appname",
593                     "notification-url": "http://localhost:8585/NotificationServer/notify"
594                 },
595                 "common-id": "ASATT1234567",
596                 "connection-type": "infrastructure",
597                 "service-a-end": {
598                     "service-rate": "100",
599                     "node-id": "ROADMA",
600                     "service-format": "Ethernet",
601                     "clli": "SNJSCAMCJP8",
602                     "tx-direction": {
603                         "port": {
604                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
605                             "port-type": "router",
606                             "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
607                             "port-rack": "000000.00",
608                             "port-shelf": "00"
609                         },
610                         "lgx": {
611                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
612                             "lgx-port-name": "LGX Back.3",
613                             "lgx-port-rack": "000000.00",
614                             "lgx-port-shelf": "00"
615                         }
616                     },
617                     "rx-direction": {
618                         "port": {
619                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
620                             "port-type": "router",
621                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
622                             "port-rack": "000000.00",
623                             "port-shelf": "00"
624                         },
625                         "lgx": {
626                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
627                             "lgx-port-name": "LGX Back.4",
628                             "lgx-port-rack": "000000.00",
629                             "lgx-port-shelf": "00"
630                         }
631                     },
632                     "optic-type": "gray"
633                 },
634                 "service-z-end": {
635                     "service-rate": "100",
636                     "node-id": "ROADMC",
637                     "service-format": "Ethernet",
638                     "clli": "SNJSCAMCJT4",
639                     "tx-direction": {
640                         "port": {
641                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
642                             "port-type": "router",
643                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
644                             "port-rack": "000000.00",
645                             "port-shelf": "00"
646                         },
647                         "lgx": {
648                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
649                             "lgx-port-name": "LGX Back.29",
650                             "lgx-port-rack": "000000.00",
651                             "lgx-port-shelf": "00"
652                         }
653                     },
654                     "rx-direction": {
655                         "port": {
656                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
657                             "port-type": "router",
658                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
659                             "port-rack": "000000.00",
660                             "port-shelf": "00"
661                         },
662                         "lgx": {
663                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
664                             "lgx-port-name": "LGX Back.30",
665                             "lgx-port-rack": "000000.00",
666                             "lgx-port-shelf": "00"
667                         }
668                     },
669                     "optic-type": "gray"
670                 },
671                 "due-date": "2016-11-28T00:00:01Z",
672                 "operator-contact": "pw1234"
673             }
674         }
675         headers = {'content-type': 'application/json',
676         "Accept": "application/json"}
677         response = requests.request(
678             "POST", url, data=json.dumps(data), headers=headers,
679             auth=('admin', 'admin'))
680         self.assertEqual(response.status_code, requests.codes.ok)
681         res = response.json()
682         self.assertIn('PCE calculation in progress',
683             res['output']['configuration-response-common']['response-message'])
684         time.sleep(20)
685
686
687     # Create Temp Service not compliant with no common-id
688     def test_17_create_temp_service_failed(self):
689         url = ("{}/operations/org-openroadm-service:temp-service-create"
690               .format(self.restconf_baseurl))
691         data = {
692             "input": {
693                 "sdnc-request-header": {
694                     "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
695                     "rpc-action": "temp-service-create",
696                     "request-system-id": "appname",
697                     "notification-url": "http://localhost:8585/NotificationServer/notify"
698                 },
699                 "connection-type": "infrastructure",
700                 "service-a-end": {
701                     "service-rate": "100",
702                     "node-id": "ROADMA",
703                     "service-format": "Ethernet",
704                     "clli": "SNJSCAMCJP8",
705                     "tx-direction": {
706                         "port": {
707                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
708                             "port-type": "router",
709                             "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
710                             "port-rack": "000000.00",
711                             "port-shelf": "00"
712                         },
713                         "lgx": {
714                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
715                             "lgx-port-name": "LGX Back.3",
716                             "lgx-port-rack": "000000.00",
717                             "lgx-port-shelf": "00"
718                         }
719                     },
720                     "rx-direction": {
721                         "port": {
722                             "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
723                             "port-type": "router",
724                             "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
725                             "port-rack": "000000.00",
726                             "port-shelf": "00"
727                         },
728                         "lgx": {
729                             "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
730                             "lgx-port-name": "LGX Back.4",
731                             "lgx-port-rack": "000000.00",
732                             "lgx-port-shelf": "00"
733                         }
734                     },
735                     "optic-type": "gray"
736                 },
737                 "service-z-end": {
738                     "service-rate": "100",
739                     "node-id": "ROADMC",
740                     "service-format": "Ethernet",
741                     "clli": "SNJSCAMCJT4",
742                     "tx-direction": {
743                         "port": {
744                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
745                             "port-type": "router",
746                             "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
747                             "port-rack": "000000.00",
748                             "port-shelf": "00"
749                         },
750                         "lgx": {
751                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
752                             "lgx-port-name": "LGX Back.29",
753                             "lgx-port-rack": "000000.00",
754                             "lgx-port-shelf": "00"
755                         }
756                     },
757                     "rx-direction": {
758                         "port": {
759                             "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
760                             "port-type": "router",
761                             "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
762                             "port-rack": "000000.00",
763                             "port-shelf": "00"
764                         },
765                         "lgx": {
766                             "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
767                             "lgx-port-name": "LGX Back.30",
768                             "lgx-port-rack": "000000.00",
769                             "lgx-port-shelf": "00"
770                         }
771                     },
772                     "optic-type": "gray"
773                 },
774                 "due-date": "2016-11-28T00:00:01Z",
775                 "operator-contact": "pw1234"
776             }
777         }
778         headers = {'content-type': 'application/json',
779         "Accept": "application/json"}
780         response = requests.request(
781             "POST", url, data=json.dumps(data), headers=headers,
782             auth=('admin', 'admin'))
783         self.assertEqual(response.status_code, requests.codes.ok)
784         res = response.json()
785         self.assertIn('Service Name (common-id for Temp service) is not set',
786             res['output']['configuration-response-common']['response-message'])
787         time.sleep(5)
788
789     # Get 'ASATT1234567' temp service created
790     def test_18_verify_temp_service_created(self):
791         url = ("{}/operational/org-openroadm-service:temp-service-list/services/ASATT1234567"
792               .format(self.restconf_baseurl))
793         headers = {'content-type': 'application/json',
794         "Accept": "application/json"}
795         response = requests.request(
796             "GET", url, headers=headers, auth=('admin', 'admin'))
797         self.assertEqual(response.status_code, requests.codes.ok)
798         res = response.json()
799         self.assertEqual(
800             res['services'][0]['administrative-state'],
801             'inService')
802         time.sleep(1)
803
804     # get non existing service
805     def test_19_get_temp_service_non_existed(self):
806         url = ("{}/operational/org-openroadm-service:temp-service-list/services/test1"
807               .format(self.restconf_baseurl))
808         headers = {'content-type': 'application/json',
809         "Accept": "application/json"}
810         response = requests.request(
811             "GET", url, headers=headers, auth=('admin', 'admin'))
812         self.assertEqual(response.status_code, 404)
813         time.sleep(1)
814
815     # Delete temp service
816     def test_20_delete_temp_service_created(self):
817         url = ("{}/operations/org-openroadm-service:temp-service-delete"
818               .format(self.restconf_baseurl))
819         data = {"input": {
820                 "common-id": "ASATT1234567"
821             }
822         }
823         headers = {'content-type': 'application/json'}
824         response = requests.request(
825             "POST", url, data=json.dumps(data), headers=headers,
826             auth=('admin', 'admin'))
827         self.assertEqual(response.status_code, requests.codes.ok)
828         res = response.json()
829         self.assertIn('Renderer service delete in progress',
830             res['output']['configuration-response-common']['response-message'])
831         time.sleep(20)
832
833 # Verify 'test' service deleted
834     def test_21_verify_temp_service_deleted(self):
835         url = ("{}/operational/org-openroadm-service:service-list/services/ASATT1234567"
836               .format(self.restconf_baseurl))
837         headers = {'content-type': 'application/json',
838         "Accept": "application/json"}
839         response = requests.request(
840             "GET", url, headers=headers, auth=('admin', 'admin'))
841         self.assertEqual(response.status_code, 404)
842         time.sleep(1)
843
844
845 if __name__ == "__main__":
846     unittest.main(verbosity=2)