From c753e7bc325e8761c1852595d6b62938668ca3ec Mon Sep 17 00:00:00 2001 From: thomasl <thomasl@eurecom.fr> Date: Fri, 5 Dec 2014 21:41:52 +0000 Subject: [PATCH] use pxssh class for ssh replace expect method by expect_exact: much faster execution git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6181 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- targets/TEST/OAI/case01.py | 2 +- targets/TEST/OAI/core.py | 8 ++-- targets/TEST/OAI/openair.py | 78 +++++++++++++------------------------ targets/TEST/OAI/test01.py | 14 ++----- 4 files changed, 34 insertions(+), 68 deletions(-) diff --git a/targets/TEST/OAI/case01.py b/targets/TEST/OAI/case01.py index 9a48d2a775..7c4222a0af 100644 --- a/targets/TEST/OAI/case01.py +++ b/targets/TEST/OAI/case01.py @@ -45,7 +45,7 @@ def execute(oai, user, pw, host, logfile,logdir,debug): case = '01' rv = 1 - oai.send('cd $OPENAIR_TARGETS;') + oai.send_recv('cd $OPENAIR_TARGETS;') try: test = '00' diff --git a/targets/TEST/OAI/core.py b/targets/TEST/OAI/core.py index f6792c519f..566b0c5979 100644 --- a/targets/TEST/OAI/core.py +++ b/targets/TEST/OAI/core.py @@ -143,17 +143,17 @@ class core: self.oai.send(command) if self.expect_echo: - cmd = self.oai.expect([re.escape(command), pexpect.TIMEOUT], timeout=timeout); + cmd = self.oai.expect_exact([command, pexpect.TIMEOUT], timeout=timeout); if cmd != 0: raise log.err(self.failed(command, command,debug)) if self.expect_response: - index = self.oai.expect([re.escape(rsp1), re.escape(rsp2),'%', pexpect.TIMEOUT], timeout=timeout) + index = self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout) if index == 0 or index == 1: return 'OK' elif index == 2: - self.oai.expect([re.escape(rsp1), re.escape(rsp2), pexpect.TIMEOUT], timeout=timeout) + self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout) if self.flag_errors: raise log.err(self.err(command)) else: @@ -177,7 +177,7 @@ class core: self.oai.sendline(command) else: self.oai.send(command) - index = self.oai.expect([re.escape(rsp1), re.escape(rsp2), pexpect.TIMEOUT], timeout=timeout); + index = self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout); if index == 0 or index == 1: return self.oai.before else: diff --git a/targets/TEST/OAI/openair.py b/targets/TEST/OAI/openair.py index fddf6915b8..4d9787141b 100644 --- a/targets/TEST/OAI/openair.py +++ b/targets/TEST/OAI/openair.py @@ -35,6 +35,7 @@ # @ingroup _test import pexpect +import pxssh import time import os import array @@ -51,21 +52,7 @@ class openair(core): self.hostname = hostname self.address = address self.localhost = None - self.shell_prompt = '$' core.__init__(self) - - def get_shell(self): - print 'get the bash \n' - self.prompt1 = self.shell_prompt - self.prompt2 = prompt - try: - self.sh = pexpect.spawn(SHELL) - index = self.sh.expect([self.prompt1, pexpect.TIMEOUT], timeout=10) - if index != 0: - print 'unable to spawn shell' - - except Exception, val: - print "Error:", val @property def localhost(self): @@ -91,40 +78,28 @@ class openair(core): stdout, stderr = proc.communicate() return (stdout, stderr) - def connect(self, username, password, prompt): - self.prompt2 = self.shell_prompt - if not prompt : - self.prompt1 = self.prompt2 - else : - self.prompt1 = prompt - - while 1: - try: - if not username: - username = root - if not password: - password = username - - self.oai = pexpect.spawn('ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "ConnectionAttempts=1" ' \ - + username + '@' + self.address) - - index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=40) - if index == 0 : - return 'Ok' - else : - index = self.oai.expect(['password:', pexpect.TIMEOUT], timeout=40) - if index == 0 : - self.oai.sendline(password) - index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=10) - if index != 0: - print 'ERROR! could not login with SSH.' - print 'Expected ' + self.prompt1 + ', received >>>>' + self.oai.before + '<<<<' - sys.exit(1) - return 'Ok' - - except Exception, val: - time.sleep(5) - print "Error:", val + def connect(self, username, password, prompt='PEXPECT_OAI'): + self.prompt1 = prompt + self.prompt2 = prompt + + try: + if not username: + username = root + if not password: + password = username + self.oai = pxssh.pxssh() + self.oai.login(self.address,username,password) + self.oai.sendline('PS1='+self.prompt1) + self.oai.PROMPT='PEXPECT_OAI' + # need to look for twice the string of the prompt + self.oai.prompt() + self.oai.prompt() + self.oai.sendline('uptime') + self.oai.prompt() + print self.oai.before + + except Error, val : + print "Error: can't connect to"+username+"@"+self.address def disconnect(self): @@ -153,8 +128,8 @@ class openair(core): #oai.send_nowait('rmmod nasmesh;') os.system('rmmod nasmesh;') else : - #oai.send_nowait('echo '+pw+ ' | sudo -S rmmod nasmesh;') - os.system('echo '+pw+ ' | sudo -S rmmod nasmesh;') + oai.send_nowait('echo '+pw+ ' | sudo -S rmmod nasmesh;') + #os.system('echo '+pw+ ' | sudo -S rmmod nasmesh;') except Error, val: print "Error removing oai network driver module:", val @@ -166,9 +141,8 @@ class openair(core): if user == 'root' : oai.send_nowait('insmod ./nasmesh.ko;') else : - oai.send_nowait('echo '+pw+ ' | sudo -S insmod ./nasmesh.ko;') + oai.send('echo '+pw+ ' | sudo -S insmod ./nasmesh.ko;') - oai.send_nowait('cd '+ pwd) except Error, val: print "Error inserting oai network driver module:", val diff --git a/targets/TEST/OAI/test01.py b/targets/TEST/OAI/test01.py index 7dbebbbc7e..ed952179f9 100644 --- a/targets/TEST/OAI/test01.py +++ b/targets/TEST/OAI/test01.py @@ -1,3 +1,4 @@ +#! /usr/bin/python #****************************************************************************** # Eurecom OpenAirInterface @@ -53,7 +54,6 @@ import case05 from openair import * debug = 0 -prompt2 = '$' pw ='' i = 0 dlsim=0 @@ -104,22 +104,14 @@ try: print '\n******* Note that the user <'+user+'> should be a sudoer *******\n' print '******* Connecting to the localhost to perform the test *******\n' - if not pw : print "username: " + user pw = getpass.getpass() else : print "username: " + user #print "password: " + pw - - try: - prompt = os.getenv("PS1")[-2] - except : - #prompt = input('set your shell prompt: ') - prompt = '$' - print "your prompt is: " + prompt - - oai.connect(user,pw,prompt) + + oai.connect(user,pw) #oai.get_shell() except : print 'Fail to connect to the local host' -- GitLab