Adapt Parser test case to the new template
[functest.git] / functest / opnfv_tests / Controllers / ONOS / Teston / adapters / connection.py
1 """
2 Description:
3     This file is used to make connections
4     Include ssh & exchange public-key to each other so that
5     it can run without password
6
7     lanqinglong@huawei.com
8
9 #
10 # All rights reserved. This program and the accompanying materials
11 # are made available under the terms of the Apache License, Version 2.0
12 # which accompanies this distribution, and is available at
13 # http://www.apache.org/licenses/LICENSE-2.0
14 #
15 """
16 import os
17 import pexpect
18 import re
19
20 from foundation import foundation
21 import functest.utils.functest_logger as ft_logger
22
23
24 class connection(foundation):
25
26     logger = ft_logger.Logger("connection").getLogger()
27
28     def __init__(self):
29         foundation.__init__(self)
30         self.loginfo = foundation()
31
32     def AddKnownHost(self, handle, ipaddr, username, password):
33         """
34         Add an user to known host,so that onos can login in with onos $ipaddr.
35         parameters:
36         ipaddr:   ip address
37         username: login user name
38         password: login password
39         """
40         self.logger.info("Now Adding an user to known hosts " + ipaddr)
41         login = handle
42         login.sendline("ssh -l %s -p 8101 %s" % (username, ipaddr))
43         index = 0
44         while index != 2:
45             index = login.expect(['assword:', 'yes/no', pexpect.EOF,
46                                   pexpect.TIMEOUT])
47             if index == 0:
48                 login.sendline(password)
49                 login.sendline("logout")
50                 index = login.expect(["closed", pexpect.EOF])
51                 if index == 0:
52                     self.loginfo.log("Add SSH Known Host Success!")
53                     break
54                 else:
55                     self.loginfo.log("Add SSH Known Host Failed! "
56                                      "Please Check!")
57                     break
58                 login.prompt()
59
60             if index == 1:
61                 login.sendline('yes')
62
63     def GetEnvValue(self, handle, envname):
64         """
65         os.getenv only returns current user value
66         GetEnvValue returns a environment value of
67             current handle
68         eg: GetEnvValue(handle,'HOME')
69         """
70         envhandle = handle
71         envhandle.sendline('echo $' + envname)
72         envhandle.prompt()
73         reg = envname + '\r\n(.*)\r'
74         envaluereg = re.compile(reg)
75         envalue = envaluereg.search(envhandle.before)
76         if envalue:
77             return envalue.groups()[0]
78         else:
79             return None
80
81     def Gensshkey(self, handle):
82         """
83         Generate ssh keys, used for some server have no sshkey.
84         """
85         self.logger.info("Now Generating SSH keys...")
86         # Here file name may be id_rsa or id_ecdsa or others
87         # So here will have a judgement
88         keysub = handle
89         filepath = self.GetEnvValue(keysub, 'HOME') + '/.ssh'
90         filelist = os.listdir(filepath)
91         for item in filelist:
92             if 'id' in item:
93                 self.loginfo.log("SSH keys are exsit in ssh directory.")
94                 return True
95         keysub.sendline("ssh-keygen -t rsa")
96         Result = 0
97         while Result != 2:
98             Result = keysub.expect(["Overwrite", "Enter", pexpect.EOF,
99                                     'PEXPECT]#', pexpect.TIMEOUT])
100             if Result == 0:
101                 keysub.sendline("y")
102             if Result == 1 or Result == 2:
103                 keysub.sendline("\n")
104             if Result == 3:
105                 self.loginfo.log("Generate SSH key success.")
106                 keysub.prompt()
107                 break
108             if Result == 4:
109                 self.loginfo.log("Generate SSH key failed.")
110                 keysub.prompt()
111                 break
112
113     def GetRootAuth(self, password):
114         """
115         Get root user
116         parameters:
117         password: root login password
118         """
119         self.logger.info("Now changing to user root")
120         login = pexpect.spawn("su - root")
121         index = 0
122         while index != 2:
123             index = login.expect(['assword:', "failure",
124                                   pexpect.EOF, pexpect.TIMEOUT])
125             if index == 0:
126                 login.sendline(password)
127             if index == 1:
128                 self.loginfo.log("Change user to root failed.")
129
130         login.interact()
131
132     def ReleaseRootAuth(self):
133         """
134         Exit root user.
135         """
136         self.logger.info("Now Release user root")
137         login = pexpect.spawn("exit")
138         index = login.expect(['logout', pexpect.EOF, pexpect.TIMEOUT])
139         if index == 0:
140             self.loginfo.log("Release root user success.")
141         if index == 1:
142             self.loginfo.log("Release root user failed.")
143
144         login.interact()
145
146     def AddEnvIntoBashrc(self, envalue):
147         """
148         Add Env var into /etc/profile.
149         parameters:
150         envalue: environment value to add
151         """
152         self.logger.info("Now Adding bash environment")
153         fileopen = open("/etc/profile", 'r')
154         findContext = 1
155         while findContext:
156             findContext = fileopen.readline()
157             result = findContext.find(envalue)
158             if result != -1:
159                 break
160         fileopen.close
161         if result == -1:
162             envAdd = open("/etc/profile", 'a+')
163             envAdd.writelines("\n" + envalue)
164             envAdd.close()
165         self.loginfo.log("Add env to bashrc success!")
166
167     def OnosRootPathChange(self, onospath):
168         """
169         Change ONOS root path in file:bash_profile
170         onospath: path of onos root
171         """
172         self.logger.info("Now Changing ONOS Root Path")
173         filepath = onospath + 'onos/tools/dev/bash_profile'
174         line = open(filepath, 'r').readlines()
175         lenall = len(line) - 1
176         for i in range(lenall):
177             if "export ONOS_ROOT" in line[i]:
178                 line[i] = 'export ONOS_ROOT=' + onospath + 'onos\n'
179         NewFile = open(filepath, 'w')
180         NewFile.writelines(line)
181         NewFile.close
182         self.logger.info("Done!")
183
184     def OnosConnectionSet(self):
185         """
186         Intergrate for ONOS connection setup
187         """
188         if self.masterusername == 'root':
189             filepath = '/root/'
190         else:
191             filepath = '/home/' + self.masterusername + '/'
192         filepath = os.path.join(filepath, "onos/tools/dev/bash_profile")
193         self.AddEnvIntoBashrc("source " + filepath + "\n")
194         self.AddEnvIntoBashrc("export OCT=" + self.OCT)
195         self.AddEnvIntoBashrc("export OC1=" + self.OC1)
196         self.AddEnvIntoBashrc("export OC2=" + self.OC2)
197         self.AddEnvIntoBashrc("export OC3=" + self.OC3)
198         self.AddEnvIntoBashrc("export OCN=" + self.OCN)
199         self.AddEnvIntoBashrc("export OCN2=" + self.OCN2)
200         self.AddEnvIntoBashrc("export localhost=" + self.localhost)