blob: a96b8d52861fb9d88563c1f3cb6affeb4c945e55 [file] [log] [blame]
admine72fefb2014-04-03 17:24:16 -07001#!/usr/bin/env python
2'''
3Created on 31-May-2013
4
5@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
6
7
8 TestON is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 2 of the License, or
11 (at your option) any later version.
12
13 TestON is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with TestON. If not, see <http://www.gnu.org/licenses/>.
20
21
22RamCloudCliDriver is the basic driver which will handle the RamCloud server functions
23'''
24
25import pexpect
26import struct
27import fcntl
28import os
29import signal
30import re
31import sys
32import core.teston
33import time
34
35sys.path.append("../")
36from drivers.common.clidriver import CLI
37
38class RamCloudCliDriver(CLI):
39 '''
40RamCloudCliDriver is the basic driver which will handle the RamCloud server functions
41 '''
42 def __init__(self):
43 super(CLI, self).__init__()
44 self.handle = self
45 self.wrapped = sys.modules[__name__]
46
47 def connect(self, **connectargs):
48 # Here the main is the TestON instance after creating all the log handles.
49 self.port = None
50 for key in connectargs:
51 vars(self)[key] = connectargs[key]
admin6e3ed382014-04-03 18:01:18 -070052 self.home = "~/ONOS"
53 for key in self.options:
54 if key == "ONOShome":
55 self.home = self.options['ONOShome']
56 break
57
admine72fefb2014-04-03 17:24:16 -070058
59 self.name = self.options['name']
admin6e3ed382014-04-03 18:01:18 -070060 self.handle = super(RamCloudCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd, home = self.home)
admine72fefb2014-04-03 17:24:16 -070061
62 self.ssh_handle = self.handle
63 if self.handle :
64 return main.TRUE
65 else :
Jon Hallde47ebc2014-04-07 12:31:03 -070066 main.log.error(self.name+": Connection failed to the host "+self.user_name+"@"+self.ip_address)
67 main.log.error(self.name+": Failed to connect to the Onos system")
admine72fefb2014-04-03 17:24:16 -070068 return main.FALSE
69
70
71 def start_serv(self):
72 '''
73 This Function will start RamCloud Servers
74 '''
Jon Hallde47ebc2014-04-07 12:31:03 -070075 main.log.info(self.name+": Starting RAMCloud Server" )
admine72fefb2014-04-03 17:24:16 -070076 self.handle.sendline("")
Jon Hallebaa5c52014-04-14 17:36:55 -070077 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
admine72fefb2014-04-03 17:24:16 -070078 self.handle.sendline(self.home + "/onos.sh rc-server start")
Jon Hallebaa5c52014-04-14 17:36:55 -070079 self.handle.expect(["onos.sh rc-server start",pexpect.EOF,pexpect.TIMEOUT])
80 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
admine72fefb2014-04-03 17:24:16 -070081 response = self.handle.before + self.handle.after
James Lee342b4392014-04-08 09:22:57 -070082 #print ("RESPONSE IS: "+response)
admine72fefb2014-04-03 17:24:16 -070083 time.sleep(5)
James Lee342b4392014-04-08 09:22:57 -070084 if re.search("Killed\sexisting\sprocess", response):
James Leeb4527ad2014-04-07 11:04:08 -070085 main.log.info(self.name + ": Previous RAMCloud killed. ")
86 if re.search("Starting\sRAMCloud\sserver",response):
87 main.log.info(self.name + ": RAMCloud Server Started")
88 return main.TRUE
89 else:
90 main.log.info(self.name + ": Failed to start RAMCloud Server"+response)
91 return main.FALSE
James Lee342b4392014-04-08 09:22:57 -070092 elif re.search("Starting\sRAMCloud\sserver",response):
Jon Hall5b4e1e82014-04-07 15:25:50 -070093 main.log.info(self.name + ": RAMCloud Server Started")
94 return main.TRUE
95 else:
James Leeb4527ad2014-04-07 11:04:08 -070096 main.log.info(self.name + ": Failed to start RAMCloud Server"+response)
admine72fefb2014-04-03 17:24:16 -070097 return main.FALSE
98
99
100 def start_coor(self):
101 '''
102 This Function will start RamCloud
103 '''
Jon Hallde47ebc2014-04-07 12:31:03 -0700104 main.log.info(self.name+": Starting RAMCloud Coordinator" )
admine72fefb2014-04-03 17:24:16 -0700105 self.handle.sendline("")
Jon Hallebaa5c52014-04-14 17:36:55 -0700106 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
admin6e3ed382014-04-03 18:01:18 -0700107 self.handle.sendline(self.home + "/onos.sh rc-coord start")
Jon Hallebaa5c52014-04-14 17:36:55 -0700108 self.handle.expect(["onos.sh rc-coord start",pexpect.EOF,pexpect.TIMEOUT])
109 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
admine72fefb2014-04-03 17:24:16 -0700110 response = self.handle.before + self.handle.after
Jon Hallde47ebc2014-04-07 12:31:03 -0700111 if re.search("Starting\sRAMCloud\scoordinator\s", response):
112 if re.search("Killed\sexisting\sprocess", response):
113 main.log.warn(self.name+": Process was already running, killing existing process")
114 main.log.info(self.name+": RAMCloud Coordinator Started ")
admine72fefb2014-04-03 17:24:16 -0700115 return main.TRUE
116 else:
Jon Hallde47ebc2014-04-07 12:31:03 -0700117 main.log.error(self.name+": Failed to start RAMCloud Coordinator"+ response)
admine72fefb2014-04-03 17:24:16 -0700118 return main.FALSE
119
120 def status_serv(self):
121 '''
122 This Function will return the Status of the RAMCloud
123 '''
James Lee342b4392014-04-08 09:22:57 -0700124 main.log.info(self.name + ": Getting RC-Server Status")
125 self.handle.sendline("")
Jon Hallebaa5c52014-04-14 17:36:55 -0700126 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
James Lee342b4392014-04-08 09:22:57 -0700127 self.handle.sendline(self.home + "/onos.sh rc-server status")
Jon Hallebaa5c52014-04-14 17:36:55 -0700128 self.handle.expect(["onos.sh rc-server status",pexpect.EOF,pexpect.TIMEOUT])
129 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
James Lee342b4392014-04-08 09:22:57 -0700130 response = self.handle.before + self.handle.after
admine72fefb2014-04-03 17:24:16 -0700131
James Lee342b4392014-04-08 09:22:57 -0700132 if re.search("0\sRAMCloud\sserver\srunning", response) :
Jon Hallde47ebc2014-04-07 12:31:03 -0700133 main.log.info(self.name+": RAMCloud not running")
admine72fefb2014-04-03 17:24:16 -0700134 return main.TRUE
James Lee342b4392014-04-08 09:22:57 -0700135 elif re.search("1\sRAMCloud\sserver\srunning",response):
Jon Hallde47ebc2014-04-07 12:31:03 -0700136 main.log.warn(self.name+": RAMCloud Running")
admine72fefb2014-04-03 17:24:16 -0700137 return main.TRUE
Jon Hallde47ebc2014-04-07 12:31:03 -0700138 else:
139 main.log.info( self.name+": WARNING: status recieved unknown response")
140 return main.FALSE
admine72fefb2014-04-03 17:24:16 -0700141
142 def status_coor(self):
143 '''
144 This Function will return the Status of the RAMCloud
145 '''
Jon Hallebaa5c52014-04-14 17:36:55 -0700146 main.log.info(self.name + ": Getting RC-Coord Status")
147 self.handle.sendline("")
148 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
149 self.handle.sendline(self.home + "/onos.sh rc-coord status")
150 i=self.handle.expect(["onos.sh rc-coord status",pexpect.EOF,pexpect.TIMEOUT])
151 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
152 response = self.handle.before + self.handle.after
Jon Hallde47ebc2014-04-07 12:31:03 -0700153 #return response
admine72fefb2014-04-03 17:24:16 -0700154
Jon Hallde47ebc2014-04-07 12:31:03 -0700155 if re.search("0\sRAMCloud\scoordinator\srunning", response) :
156 main.log.warn(self.name+": RAMCloud Coordinator not running")
admine72fefb2014-04-03 17:24:16 -0700157 return main.TRUE
Jon Hallde47ebc2014-04-07 12:31:03 -0700158 elif re.search("1\sRAMCloud\scoordinator\srunning", response):
159 main.log.info(self.name+": RAMCloud Coordinator Running")
admine72fefb2014-04-03 17:24:16 -0700160 return main.TRUE
Jon Hallde47ebc2014-04-07 12:31:03 -0700161 else:
162 main.log.warn( self.name+": coordinator status recieved unknown response")
163 return main.FALSE
admine72fefb2014-04-03 17:24:16 -0700164
165 def stop_serv(self):
166 '''
167 This Function will stop the RAMCloud if it is Running
James Lee342b4392014-04-08 09:22:57 -0700168 '''
169 main.log.info(self.name + ": Stopping RC-Server")
170 self.handle.sendline("")
Jon Hallebaa5c52014-04-14 17:36:55 -0700171 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
James Lee342b4392014-04-08 09:22:57 -0700172 self.handle.sendline(self.home + "/onos.sh rc-server stop")
Jon Hallebaa5c52014-04-14 17:36:55 -0700173 self.handle.expect(["onos.sh rc-server stop",pexpect.EOF,pexpect.TIMEOUT])
174 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
James Lee342b4392014-04-08 09:22:57 -0700175 response = self.handle.before + self.handle.after
176 if re.search("Killed\sexisting\sprocess",response):
admine72fefb2014-04-03 17:24:16 -0700177 main.log.info("RAMCloud Server Stopped")
178 return main.TRUE
179 else:
Jon Hallde47ebc2014-04-07 12:31:03 -0700180 main.log.warn(self.name+": RAMCloud is not Running")
admine72fefb2014-04-03 17:24:16 -0700181 return main.FALSE
182
183
184 def stop_coor(self):
185 '''
186 This Function will stop the RAMCloud if it is Running
187 '''
Jon Hallebaa5c52014-04-14 17:36:55 -0700188 main.log.info(self.name + ": Stopping RC-Coord")
189 self.handle.sendline("")
190 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
191 self.handle.sendline(self.home + "/onos.sh rc-coord stop")
192 self.handle.expect(["onos.sh rc-coord stop",pexpect.EOF,pexpect.TIMEOUT])
193 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
194 response = self.handle.before + self.handle.after
Jon Hallde47ebc2014-04-07 12:31:03 -0700195 if re.search("Killed\sexisting\sprocess",response):
196 main.log.info(self.name+": RAMCloud Coordinator Stopped")
admine72fefb2014-04-03 17:24:16 -0700197 return main.TRUE
198 else:
Jon Hallde47ebc2014-04-07 12:31:03 -0700199 main.log.warn(self.name+": RAMCloud was not Running")
Jon Hall4121fdc2014-04-08 15:20:03 -0700200 return main.FALSE
admine72fefb2014-04-03 17:24:16 -0700201
202 def disconnect(self):
203 '''
204 Called at the end of the test to disconnect the ssh handle.
205 '''
206 response = ''
207 if self.handle:
208 self.handle.sendline("exit")
Jon Hallebaa5c52014-04-14 17:36:55 -0700209 self.handle.expect(["closed",pexpect.EOF,pexpect.TIMEOUT])
admine72fefb2014-04-03 17:24:16 -0700210 else :
Jon Hallde47ebc2014-04-07 12:31:03 -0700211 main.log.error("Connection failed to the host when trying to disconnect from RAMCloud component")
admine72fefb2014-04-03 17:24:16 -0700212 response = main.FALSE
213 return response