blob: 242e07b7ceb6887d4efd97c818ad08f0f0cdfe06 [file] [log] [blame]
adminbae64d82013-08-01 10:50:15 -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
22ZookeeperCliDriver is the basic driver which will handle the Zookeeper 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 ZookeeperCliDriver(CLI):
39 '''
adminaeedddd2013-08-02 15:14:15 -070040 ZookeeperCliDriver is the basic driver which will handle the Zookeeper's functions
adminbae64d82013-08-01 10:50:15 -070041 '''
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]
Jon Hall4a2b0482014-04-18 16:29:26 -070052 self.home = "~/ONOS"
53 #self.home = "~/zookeeper-3.4.5"
Jon Hallf89c8552014-04-02 13:14:06 -070054 for key in self.options:
55 if key == "home":
56 self.home = self.options['home']
57 break
adminbae64d82013-08-01 10:50:15 -070058
59 self.name = self.options['name']
Jon Hallf89c8552014-04-02 13:14:06 -070060 self.handle = super(ZookeeperCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd, home = self.home)
adminbae64d82013-08-01 10:50:15 -070061
62 self.ssh_handle = self.handle
63 if self.handle :
adminbae64d82013-08-01 10:50:15 -070064 return main.TRUE
65 else :
66 main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
Jon Hallf89c8552014-04-02 13:14:06 -070067 main.log.error(self.name + ": Failed to connect to Zookeeper")
adminbae64d82013-08-01 10:50:15 -070068 return main.FALSE
69
70
71 def start(self):
adminaeedddd2013-08-02 15:14:15 -070072 '''
73 This Function will start the Zookeeper
74 '''
Jon Hallf89c8552014-04-02 13:14:06 -070075 main.log.info(self.name + ": Starting Zookeeper" )
adminbae64d82013-08-01 10:50:15 -070076 self.handle.sendline("")
77 self.handle.expect("\$")
Jon Hall4a2b0482014-04-18 16:29:26 -070078 self.handle.sendline("cd "+self.home)
79 self.handle.sendline("./onos.sh zk start")
80 self.handle.expect("zk start")
adminbae64d82013-08-01 10:50:15 -070081 self.handle.expect("\$")
82 response = self.handle.before + self.handle.after
83 if re.search("STARTED", response):
Jon Hallf89c8552014-04-02 13:14:06 -070084 main.log.info(self.name + ": Zookeeper Started ")
adminbae64d82013-08-01 10:50:15 -070085 return main.TRUE
86 elif re.search("running", response):
Jon Hallf89c8552014-04-02 13:14:06 -070087 main.log.warn(self.name +": zookeeper ... already running")
88 return main.TRUE
adminbae64d82013-08-01 10:50:15 -070089 else:
Jon Hallf89c8552014-04-02 13:14:06 -070090 main.log.error(self.name + ": Failed to start Zookeeper"+ response)
adminbae64d82013-08-01 10:50:15 -070091 return main.FALSE
92
93 def status(self):
adminaeedddd2013-08-02 15:14:15 -070094 '''
95 This Function will return the Status of the Zookeeper
96 '''
adminbae64d82013-08-01 10:50:15 -070097 time.sleep(5)
Jon Hallf89c8552014-04-02 13:14:06 -070098 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Hall4a2b0482014-04-18 16:29:26 -070099 self.handle.sendline("cd "+self.home)
100 response = self.execute(cmd="./onos.sh zk status ",prompt="JMX",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700101
102 self.execute(cmd="\n",prompt="\$",timeout=10)
adminbae64d82013-08-01 10:50:15 -0700103 return response
104
105 def stop(self):
adminaeedddd2013-08-02 15:14:15 -0700106 '''
107 This Function will stop the Zookeeper if it is Running
108 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700109 self.execute(cmd="\n",prompt="\$",timeout=10)
adminbae64d82013-08-01 10:50:15 -0700110 time.sleep(5)
Jon Hall4a2b0482014-04-18 16:29:26 -0700111 self.handle.sendline("cd "+self.home)
112 response = self.execute(cmd="./onos.sh zk stop ",prompt="$",timeout=10)
113 if re.search("stopping",response):
Jon Hallf89c8552014-04-02 13:14:06 -0700114 main.log.info(self.name + ": Zookeeper Stopped")
adminbae64d82013-08-01 10:50:15 -0700115 return main.TRUE
116 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700117 main.log.warn(self.name + ": No zookeeper to stop")
adminbae64d82013-08-01 10:50:15 -0700118 return main.FALSE
119
120 def disconnect(self):
adminaeedddd2013-08-02 15:14:15 -0700121 '''
122 Called at the end of the test to disconnect the ZK handle
123 '''
adminbae64d82013-08-01 10:50:15 -0700124 response = ''
125 if self.handle:
126 self.handle.sendline("exit")
127 self.handle.expect("closed")
128 else :
Jon Hallf89c8552014-04-02 13:14:06 -0700129 main.log.error(self.name + ": Connection failed to the host")
adminbae64d82013-08-01 10:50:15 -0700130 response = main.FALSE
131 return response
132
133 def isup(self):
adminaeedddd2013-08-02 15:14:15 -0700134 '''
135 Calls the zookeeper status and returns TRUE if it has an assigned Mode to it.
136 '''
adminbae64d82013-08-01 10:50:15 -0700137 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Halle80ef8c2014-04-29 15:29:13 -0700138 response = self.execute(cmd=self.home + "/onos.sh zk status ",prompt="Mode",timeout=10)
adminbae64d82013-08-01 10:50:15 -0700139 pattern = '(.*)Mode(.*)'
Jon Hallf89c8552014-04-02 13:14:06 -0700140 if re.search(pattern, response):
141 main.log.info(self.name + ": Zookeeper is up.")
adminbae64d82013-08-01 10:50:15 -0700142 return main.TRUE
143 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700144 main.log.info(self.name + ": Zookeeper is down.")
adminbae64d82013-08-01 10:50:15 -0700145 return main.FALSE
146
147