From 03595b40a2c028ed5d2768aeb61716cb0a86dbec Mon Sep 17 00:00:00 2001 From: Rohit Gupta <rohit.gupta@eurecom.fr> Date: Sat, 28 Nov 2015 22:18:07 +0100 Subject: [PATCH] added files for autotest framework --- cmake_targets/autotests/openair.py | 234 +++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 cmake_targets/autotests/openair.py diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py new file mode 100644 index 0000000000..1606bcaf6a --- /dev/null +++ b/cmake_targets/autotests/openair.py @@ -0,0 +1,234 @@ +#****************************************************************************** + +# Eurecom OpenAirInterface +# Copyright(c) 1999 - 2013 Eurecom + +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. + +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". + +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France + +#***************************************************************************** + +# \file openair.py +# \brief class that define the oaisim class and its attributes +# \author Navid Nikaein +# \date 2013 +# \version 0.1 +# @ingroup _test + +import pexpect +import pxssh +import time +import os +import array +import shutil +import subprocess +# import call + +from core import * + +SHELL = '/bin/bash' + +class openair(core): + def __init__(self, hostname, address): + self.error = '% ' + self.hostname = hostname + self.address = address + self.localhost = None + core.__init__(self) + + @property + def localhost(self): + if self.localhost : + return self.localhost + elif self.hostname in ['localhost', '127.0.0.7', '::1'] : + self.localhost = self.hostname + return self.localhost + + @localhost.setter + def localhost(self,localhost): + self.localhost = localhost + + def shcmd(self,cmd,sudo=False): + + if sudo: + cmd = "sudo %s" % command + + proc = subprocess.Popen(command, shell=True, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE) + + stdout, stderr = proc.communicate() + return (stdout, stderr) + + def connect(self, username, password, prompt='PEXPECT_OAI'): + self.prompt1 = prompt + self.prompt2 = prompt + self.password = '' + # WE do not store the password when sending commands for secuirity reasons. The password might be accidentally logged in such cases. + #The password is used only to make ssh connections. In case user wants to run programs with sudo, then he/she needs to add following line in /etc/sudoers + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + 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 connect2(self, username, password, prompt='$'): + self.prompt1 = prompt + self.prompt2 = prompt + self.password = password + 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_localshell(self, prompt='$'): + self.prompt1 = prompt + self.prompt2 = prompt + + while 1: + try: + # start a shell and use the current environment + self.oai = pexpect.spawn('bash --norc --noprofile') + + index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=40) + if index == 0 : + return 'Ok' + else : + sys.exit(1) + + except Exception, val: + time.sleep(5) + print "Error:", val + + def disconnect(self): + print 'disconnecting the ssh connection to ' + self.address + '\n' + self.oai.send('exit') +# self.cancel() + + def kill(self, user, pw): + try: + if user == 'root' : + os.system('pkill oaisim') + os.system('pkill cc1') + time.sleep(1) + os.system('pkill oaisim') + else : + os.system('echo '+pw+' | sudo -S pkill oaisim') + os.system('echo '+pw+' | sudo -S pkill cc1') + time.sleep(1) + os.system('echo '+pw+' | sudo -S pkill oaisim') + except Error, val: + print "Error:", val + + def rm_driver(self,oai,user, pw): + try: + if user == 'root' : + #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;') + except Error, val: + print "Error removing oai network driver module:", val + + def driver(self,oai,user,pw): + #pwd = oai.send_recv('pwd') + oai.send('cd $OPENAIR_TARGETS;') + oai.send('cd SIMU/USER;') + try: + if user == 'root' : + oai.send_nowait('insmod ./nasmesh.ko;') + else : + oai.send('echo '+pw+ ' | sudo -S insmod ./nasmesh.ko;') + + except Error, val: + print "Error inserting oai network driver module:", val + + def cleandir (self, logdir,debug) : + + for filename in os.listdir(logdir): + filepath = os.path.join(logdir, filename) + if debug == 2 : + print 'logdir is ' + logdir + print 'filepath is ' + filepath + try: + shutil.rmtree(filepath) + except OSError: + os.remove(filepath) + #print 'Could not remove the filepath'+ filepath + ' with error ' + OSError + + def create_dir(self,dirname,debug) : + if not os.path.exists(dirname) : + try: + os.makedirs(dirname,0755) + except OSError: + # There was an error on creation, so make sure we know about it + raise + def cpu_freq(self): + freq=0 + proc = subprocess.Popen(["cat","/proc/cpuinfo"], + stdout=subprocess.PIPE) + out, err = proc.communicate() + + for line in out.split("\n"): + if "cpu MHz" in line: + freq = float(line.split(":")[1]) + break + + return freq -- 2.26.2