blob: 18895369dca7084e6a6c8f33e4ddc6da219aa625 [file] [log] [blame]
A R Karthick81acbff2016-06-17 14:45:16 -07001#
Chetan Gaonkercfcce782016-05-10 10:10:42 -07002# Copyright 2016-present Ciena Corporation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
A R Karthick81acbff2016-06-17 14:45:16 -07007#
Chetan Gaonkercfcce782016-05-10 10:10:42 -07008# http://www.apache.org/licenses/LICENSE-2.0
A R Karthick81acbff2016-06-17 14:45:16 -07009#
Chetan Gaonkercfcce782016-05-10 10:10:42 -070010# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
A R Karthick81acbff2016-06-17 14:45:16 -070016from CordContainer import Container, Onos, Quagga, Radius, reinitContainerClients
Chetan Gaonker3533faa2016-04-25 17:50:14 -070017from nose.tools import nottest
A R Karthick81acbff2016-06-17 14:45:16 -070018from SimpleXMLRPCServer import SimpleXMLRPCServer
19import daemon
20import xmlrpclib
21import os
22import json
23import time
24import threading
Chetan Gaonker3533faa2016-04-25 17:50:14 -070025
A R Karthick81acbff2016-06-17 14:45:16 -070026##Server to handle container restart/stop requests from test container.
Chetan Gaonker3533faa2016-04-25 17:50:14 -070027##Used now to restart ONOS from vrouter test container
28
29CORD_TEST_HOST = '172.17.0.1'
30CORD_TEST_PORT = 25000
31
A R Karthick81acbff2016-06-17 14:45:16 -070032class QuaggaStopWrapper(Container):
33 def __init__(self, name = Quagga.NAME, image = Quagga.IMAGE, tag = 'latest'):
34 super(QuaggaStopWrapper, self).__init__(name, image, tag = tag)
35 if self.exists():
36 self.kill()
Chetan Gaonker3533faa2016-04-25 17:50:14 -070037
A R Karthick81acbff2016-06-17 14:45:16 -070038class CordTestServer(object):
39
40 def __restart_onos(self, config = None):
41 onos_config = '{}/network-cfg.json'.format(Onos.host_config_dir)
42 if config is None:
43 try:
44 os.unlink(onos_config)
45 except:
46 pass
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070047 print('Restarting ONOS')
A R Karthick81acbff2016-06-17 14:45:16 -070048 Onos(restart = True, network_cfg = config)
49 return 'DONE'
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070050
A R Karthick81acbff2016-06-17 14:45:16 -070051 def restart_onos(self, kwargs):
52 return self.__restart_onos(**kwargs)
53
54 def __restart_quagga(self, config = None, boot_delay = 30 ):
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070055 config_file = Quagga.quagga_config_file
A R Karthick81acbff2016-06-17 14:45:16 -070056 if config is not None:
57 quagga_config = '{}/testrib_gen.conf'.format(Quagga.host_quagga_config)
58 config_file = '{}/testrib_gen.conf'.format(Quagga.guest_quagga_config)
59 with open(quagga_config, 'w+') as fd:
60 fd.write(str(config))
61 print('Restarting QUAGGA with config file %s, delay %d' %(config_file, boot_delay))
62 Quagga(restart = True, config_file = config_file, boot_delay = boot_delay)
63 return 'DONE'
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070064
A R Karthick81acbff2016-06-17 14:45:16 -070065 def restart_quagga(self, kwargs):
66 return self.__restart_quagga(**kwargs)
Chetan Gaonker7f4bf742016-05-04 15:56:08 -070067
A R Karthick81acbff2016-06-17 14:45:16 -070068 def stop_quagga(self):
69 quaggaStop = QuaggaStopWrapper()
70 time.sleep(2)
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070071 try:
A R Karthick81acbff2016-06-17 14:45:16 -070072 quagga_config_gen = '{}/testrib_gen.conf'.format(Quagga.host_quagga_config)
73 os.unlink(quagga_config_gen)
74 except: pass
75 return 'DONE'
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070076
A R Karthick81acbff2016-06-17 14:45:16 -070077 def restart_radius(self):
78 print('Restarting RADIUS Server')
79 Radius(restart = True)
80 return 'DONE'
Chetan Gaonker3533faa2016-04-25 17:50:14 -070081
82@nottest
A R Karthick81acbff2016-06-17 14:45:16 -070083def cord_test_server_start(daemonize = True, cord_test_host = CORD_TEST_HOST, cord_test_port = CORD_TEST_PORT):
84 server = SimpleXMLRPCServer( (cord_test_host, cord_test_port) )
85 server.register_instance(CordTestServer())
86 if daemonize is True:
87 d = daemon.DaemonContext(files_preserve = [server],
88 detach_process = True)
89 with d:
90 reinitContainerClients()
91 server.serve_forever()
92 else:
93 task = threading.Thread(target = server.serve_forever)
94 ##terminate when main thread exits
95 task.daemon = True
96 task.start()
Chetan Gaonker3533faa2016-04-25 17:50:14 -070097 return server
98
99@nottest
100def cord_test_server_stop(server):
101 server.shutdown()
102 server.server_close()
103
104@nottest
A R Karthick81acbff2016-06-17 14:45:16 -0700105def get_cord_test_loc():
106 host = os.getenv('CORD_TEST_HOST', CORD_TEST_HOST)
107 port = int(os.getenv('CORD_TEST_PORT', CORD_TEST_PORT))
108 return host, port
109
110def rpc_server_instance():
111 '''Stateless'''
112 host, port = get_cord_test_loc()
113 rpc_server = 'http://{}:{}'.format(host, port)
114 return xmlrpclib.Server(rpc_server, allow_none = True)
115
116@nottest
117def __cord_test_onos_restart(**kwargs):
118 return rpc_server_instance().restart_onos(kwargs)
119
120@nottest
121def cord_test_onos_restart(config = None):
Chetan Gaonker3533faa2016-04-25 17:50:14 -0700122 '''Send ONOS restart to server'''
A R Karthick81acbff2016-06-17 14:45:16 -0700123 data = __cord_test_onos_restart(config = config)
Chetan Gaonker6cf6e472016-04-26 14:41:51 -0700124 if data == 'DONE':
125 return True
126 return False
127
128@nottest
A R Karthick81acbff2016-06-17 14:45:16 -0700129def __cord_test_quagga_restart(**kwargs):
130 return rpc_server_instance().restart_quagga(kwargs)
131
132@nottest
133def cord_test_quagga_restart(config = None, boot_delay = 30):
Chetan Gaonker6cf6e472016-04-26 14:41:51 -0700134 '''Send QUAGGA restart to server'''
A R Karthick81acbff2016-06-17 14:45:16 -0700135 data = __cord_test_quagga_restart(config = config, boot_delay = boot_delay)
136 if data == 'DONE':
137 return True
138 return False
139
140@nottest
141def cord_test_quagga_stop():
142 data = rpc_server_instance().stop_quagga()
Chetan Gaonker3533faa2016-04-25 17:50:14 -0700143 if data == 'DONE':
144 return True
145 return False
Chetan Gaonker7f4bf742016-05-04 15:56:08 -0700146
147@nottest
148def cord_test_radius_restart():
149 '''Send Radius server restart to server'''
A R Karthick81acbff2016-06-17 14:45:16 -0700150 data = rpc_server_instance().restart_radius()
Chetan Gaonker7f4bf742016-05-04 15:56:08 -0700151 if data == 'DONE':
152 return True
153 return False