blob: ca19950b6dd088142b338d124b04fedcdad54f95 [file] [log] [blame]
Chetan Gaonker3533faa2016-04-25 17:50:14 -07001import SocketServer as socketserver
2import threading
3import socket
Chetan Gaonker6cf6e472016-04-26 14:41:51 -07004from CordContainer import Onos, Quagga
Chetan Gaonker3533faa2016-04-25 17:50:14 -07005from nose.tools import nottest
6
7##Server to handle container restart requests from test container.
8##Used now to restart ONOS from vrouter test container
9
10CORD_TEST_HOST = '172.17.0.1'
11CORD_TEST_PORT = 25000
12
13class CordTestServer(socketserver.BaseRequestHandler):
14
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070015 def restart_onos(self, *args):
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070016 print('Restarting ONOS')
17 onos = Onos(restart = True)
18 self.request.sendall('DONE')
19
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070020 def restart_quagga(self, *args):
21 config_file = Quagga.quagga_config_file
22 boot_delay = 15
23 if args:
24 config_file = args[0]
25 if len(args) > 1:
26 boot_delay = int(args[1])
27 print('Restarting QUAGGA with config file %s, delay %d secs'%(config_file, boot_delay))
28 quagga = Quagga(restart = True, config_file = config_file, boot_delay = boot_delay)
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070029 self.request.sendall('DONE')
30
31 callback_table = { 'RESTART_ONOS' : restart_onos,
32 'RESTART_QUAGGA' : restart_quagga,
33 }
34
Chetan Gaonker3533faa2016-04-25 17:50:14 -070035 def handle(self):
36 data = self.request.recv(1024).strip()
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070037 cmd = data.split()[0]
38 try:
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070039 #args = ' '.join(data.split()[1:])
40 args = data.split()[1:]
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070041 except:
42 args = None
43
44 if self.callback_table.has_key(cmd):
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070045 self.callback_table[cmd](self, *args)
Chetan Gaonker3533faa2016-04-25 17:50:14 -070046
47class ThreadedTestServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
Chetan Gaonker02236ba2016-04-26 11:24:34 -070048 allow_reuse_address = True
Chetan Gaonker3533faa2016-04-25 17:50:14 -070049
50@nottest
51def cord_test_server_start():
52 server = ThreadedTestServer( (CORD_TEST_HOST, CORD_TEST_PORT), CordTestServer)
53 task = threading.Thread(target = server.serve_forever)
54 ##terminate when main thread exits
55 task.daemon = True
56 task.start()
57 return server
58
59@nottest
60def cord_test_server_stop(server):
61 server.shutdown()
62 server.server_close()
63
64@nottest
65def cord_test_onos_restart():
66 '''Send ONOS restart to server'''
67 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
68 s.connect( (CORD_TEST_HOST, CORD_TEST_PORT) )
69 s.sendall('RESTART_ONOS\n')
70 data = s.recv(1024).strip()
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070071 s.close()
72 if data == 'DONE':
73 return True
74 return False
75
76@nottest
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070077def cord_test_quagga_restart(config_file = None, boot_delay = 30):
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070078 '''Send QUAGGA restart to server'''
79 if config_file is None:
80 config_file = Quagga.quagga_config_file
81 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
82 s.connect( (CORD_TEST_HOST, CORD_TEST_PORT) )
Chetan Gaonkerfd3d6502016-05-03 13:23:07 -070083 s.sendall('RESTART_QUAGGA {0} {1}\n'.format(config_file, boot_delay))
Chetan Gaonker6cf6e472016-04-26 14:41:51 -070084 data = s.recv(1024).strip()
85 s.close()
Chetan Gaonker3533faa2016-04-25 17:50:14 -070086 if data == 'DONE':
87 return True
88 return False