summaryrefslogtreecommitdiffstats
path: root/framework/scripts/function_test/Teston/adapters
diff options
context:
space:
mode:
authorAshlee Young <ashlee@wildernessvoice.com>2015-11-30 07:58:38 -0800
committerAshlee Young <ashlee@wildernessvoice.com>2015-11-30 07:58:38 -0800
commit671823e12bc13be9a8b87a5d7de33da1bb7a44e8 (patch)
treecbb8f0f184a1d66b34a82da161ac8fe2b8108177 /framework/scripts/function_test/Teston/adapters
parentc5768287ef3bc0aa450d31caeb5762f66dd0dba2 (diff)
created broader test category under scripts
Change-Id: I3b8a39b7512594ae2c9aa7ab0e59cf6e2d31f7a2 Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
Diffstat (limited to 'framework/scripts/function_test/Teston/adapters')
-rw-r--r--framework/scripts/function_test/Teston/adapters/__init__.py0
-rw-r--r--framework/scripts/function_test/Teston/adapters/client.py69
-rw-r--r--framework/scripts/function_test/Teston/adapters/connection.py191
-rw-r--r--framework/scripts/function_test/Teston/adapters/environment.py226
-rw-r--r--framework/scripts/function_test/Teston/adapters/foundation.py64
5 files changed, 0 insertions, 550 deletions
diff --git a/framework/scripts/function_test/Teston/adapters/__init__.py b/framework/scripts/function_test/Teston/adapters/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/framework/scripts/function_test/Teston/adapters/__init__.py
+++ /dev/null
diff --git a/framework/scripts/function_test/Teston/adapters/client.py b/framework/scripts/function_test/Teston/adapters/client.py
deleted file mode 100644
index 32e3749f..00000000
--- a/framework/scripts/function_test/Teston/adapters/client.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-Description:
- This file is used to run testcase
- lanqinglong@huawei.com
-"""
-from environment import environment
-import os
-import time
-import pexpect
-import re
-
-class client( environment ):
-
- def __init__( self ):
- environment.__init__( self )
- self.loginfo = environment()
- self.testcase = ''
-
- def RunScript( self, handle, testname, timeout=300 ):
- """
- Run ONOS Test Script
- Parameters:
- testname: ONOS Testcase Name
- masterusername: The server username of running ONOS
- masterpassword: The server password of running ONOS
- """
- self.testcase = testname
- self.ChangeTestCasePara( testname, self.masterusername, self.masterpassword )
- runhandle = handle
- runtest = self.home + "/OnosSystemTest/TestON/bin/cli.py run " + testname
- runhandle.sendline(runtest)
- circletime = 0
- lastshowscreeninfo = ''
- while True:
- Result = runhandle.expect(["PEXPECT]#", pexpect.EOF, pexpect.TIMEOUT])
- curshowscreeninfo = runhandle.before
- if (len(lastshowscreeninfo) != len(curshowscreeninfo)):
- print str(curshowscreeninfo)[len(lastshowscreeninfo)::]
- lastshowscreeninfo = curshowscreeninfo
- if Result == 0:
- print "Done!"
- return
- time.sleep(1)
- circletime += 1
- if circletime > timeout:
- break
- self.loginfo.log( "Timeout when running the test, please check!" )
-
- def onosstart( self ):
- #This is the compass run machine user&pass,you need to modify
-
- print "Test Begin....."
- self.OnosConnectionSet()
- masterhandle = self.SSHlogin(self.localhost, self.masterusername,
- self.masterpassword)
- self.OnosEnvSetup( masterhandle )
- return masterhandle
-
- def onosclean( self, handle ):
- self.SSHRelease( handle )
- self.loginfo.log('Release onos handle Successful')
-
- def push_results_to_db( self, payload, pushornot = 1):
- url = self.Result_DB + "/results"
- params = {"project_name": "functest", "case_name": "ONOS-" + self.testcase,
- "pod_name": 'huawei-build-2', "details": payload}
- headers = {'Content-Type': 'application/json'}
- r = requests.post(url, data=json.dumps(params), headers=headers)
- self.loginfo.log('Pushing result via Northbound, info:' + r )
diff --git a/framework/scripts/function_test/Teston/adapters/connection.py b/framework/scripts/function_test/Teston/adapters/connection.py
deleted file mode 100644
index f7f283ed..00000000
--- a/framework/scripts/function_test/Teston/adapters/connection.py
+++ /dev/null
@@ -1,191 +0,0 @@
-"""
-Description:
- This file is used to make connections
- Include ssh & exchange public-key to each other so that
- it can run without password
-
- lanqinglong@huawei.com
-"""
-import os
-import time
-import pexpect
-import re
-import sys
-from foundation import foundation
-
-class connection( foundation ):
-
- def __init__( self ):
- foundation.__init__( self )
- self.loginfo = foundation()
-
- def AddKnownHost( self, handle, ipaddr, username, password ):
- """
- Add an user to known host,so that onos can login in with onos $ipaddr.
- parameters:
- ipaddr: ip address
- username: login user name
- password: login password
- """
- print( "Now Adding an user to known hosts " + ipaddr )
- login = handle
- login.sendline( "ssh -l %s -p 8101 %s"%( username, ipaddr ) )
- index = 0
- while index != 2:
- index = login.expect( ['assword:', 'yes/no', pexpect.EOF, \
- pexpect.TIMEOUT] )
- if index == 0:
- login.sendline( password )
- login.sendline( "logout" )
- index = login.expect( ["closed", pexpect.EOF] )
- if index == 0:
- self.loginfo.log( "Add SSH Known Host Success!" )
- break
- else:
- self.loginfo.log( "Add SSH Known Host Failed! Please Check!" )
- break
- login.prompt( )
-
- if index == 1:
- login.sendline('yes')
-
- def GetEnvValue( self, handle, envname):
- """
- os.getenv only returns current user value
- GetEnvValue returns a environment value of
- current handle
- eg: GetEnvValue(handle,'HOME')
- """
- envhandle = handle
- envhandle.sendline( 'echo $' + envname )
- envhandle.prompt( )
- reg = envname + '\r\n(.*)\r'
- envaluereg = re.compile( reg )
- envalue = envaluereg.search( envhandle.before )
- if envalue:
- return envalue.groups()[0]
- else:
- return None
-
- def Gensshkey( self, handle ):
- """
- Generate ssh keys, used for some server have no sshkey.
- """
- print "Now Generating SSH keys..."
- #Here file name may be id_rsa or id_ecdsa or others
- #So here will have a judgement
- keysub = handle
- filepath = self.GetEnvValue( keysub, 'HOME' ) + '/.ssh'
- filelist = os.listdir( filepath )
- for item in filelist:
- if 'id' in item:
- self.loginfo.log("SSH keys are exsit in ssh directory.")
- return True
- keysub.sendline("ssh-keygen -t rsa")
- Result = 0
- while Result != 2:
- Result = keysub.expect( ["Overwrite", "Enter", pexpect.EOF, \
- 'PEXPECT]#', pexpect.TIMEOUT])
- if Result == 0:
- keysub.sendline("y")
- if Result == 1 or Result == 2:
- keysub.sendline("\n")
- if Result == 3:
- self.loginfo.log( "Generate SSH key success." )
- keysub.prompt()
- break
- if Result == 4:
- self.loginfo.log("Generate SSH key failed.")
- keysub.prompt()
- break
-
- def GetRootAuth( self, password ):
- """
- Get root user
- parameters:
- password: root login password
- """
- print( "Now changing to user root" )
- login = pexpect.spawn( "su - root" )
- index = 0
- while index != 2:
- index = login.expect( ['assword:', "failure", \
- pexpect.EOF, pexpect.TIMEOUT] )
- if index == 0:
- login.sendline( password )
- if index == 1:
- self.loginfo.log("Change user to root failed.")
-
- login.interact()
-
- def ReleaseRootAuth( self ):
- """
- Exit root user.
- """
- print( "Now Release user root" )
- login = pexpect.spawn( "exit" )
- index = login.expect( ['logout', \
- pexpect.EOF, pexpect.TIMEOUT] )
- if index == 0:
- self.loginfo.log("Release root user success.")
- if index == 1:
- self.loginfo.log("Release root user failed.")
-
- login.interact()
-
- def AddEnvIntoBashrc( self, envalue ):
- """
- Add Env var into /etc/profile.
- parameters:
- envalue: environment value to add
- """
- print "Now Adding bash environment"
- fileopen = open( "/etc/profile", 'r' )
- findContext = 1
- while findContext:
- findContext = fileopen.readline( )
- result = findContext.find( envalue )
- if result != -1:
- break
- fileopen.close
- if result == -1:
- envAdd = open( "/etc/profile", 'a+' )
- envAdd.writelines( "\n" + envalue )
- envAdd.close( )
- self.loginfo.log( "Add env to bashrc success!" )
-
- def OnosRootPathChange( self, onospath ):
- """
- Change ONOS root path in file:bash_profile
- onospath: path of onos root
- """
- print "Now Changing ONOS Root Path"
- filepath = onospath + '/onos/tools/dev/bash_profile'
- line = open(filepath, 'r').readlines()
- lenall = len(line) - 1
- for i in range(lenall):
- if "export ONOS_ROOT" in line[i]:
- line[i] = 'export ONOS_ROOT=' + onospath + 'onos\n'
- NewFile = open(filepath, 'w')
- NewFile.writelines(line)
- NewFile.close
- print "Done!"
-
- def OnosConnectionSet (self):
- """
- Intergrate for ONOS connection setup
- """
- if self.masterusername == 'root':
- filepath = '/root/'
- else :
- filepath = '/home/' + self.masterusername + '/'
- self.OnosRootPathChange( filepath )
- filepath = os.path.join( filepath, "onos/tools/dev/bash_profile" )
- self.AddEnvIntoBashrc("source " + filepath + "\n")
- self.AddEnvIntoBashrc("export OCT=" + self.OCT)
- self.AddEnvIntoBashrc("export OC1=" + self.OC1)
- self.AddEnvIntoBashrc("export OC2=" + self.OC2)
- self.AddEnvIntoBashrc("export OC3=" + self.OC3)
- self.AddEnvIntoBashrc("export OCN=" + self.OCN)
- self.AddEnvIntoBashrc("export OCN2=" + self.OCN2)
- self.AddEnvIntoBashrc("export localhost=" + self.localhost)
diff --git a/framework/scripts/function_test/Teston/adapters/environment.py b/framework/scripts/function_test/Teston/adapters/environment.py
deleted file mode 100644
index bdd0e122..00000000
--- a/framework/scripts/function_test/Teston/adapters/environment.py
+++ /dev/null
@@ -1,226 +0,0 @@
-"""
-Description:
- This file is used to setup the running environment
- Include Download code,setup environment variable
- Set onos running config
- Set user name/password
- Onos-push-keys and so on
- lanqinglong@huawei.com
-"""
-
-import os
-import time
-import pexpect
-import re
-import sys
-import pxssh
-from connection import connection
-
-class environment( connection ):
-
- def __init__( self ):
- connection.__init__( self )
- self.loginfo = connection( )
- self.masterhandle = ''
- self.home = ''
-
- def DownLoadCode( self, handle, codeurl ):
- """
- Download Code use 'git clone'
- parameters:
- handle: current working handle
- codeurl: clone code url
- """
- print "Now loading test codes! Please wait in patient..."
- originalfolder = self.home
- gitclone = handle
- gitclone.sendline( "git clone " + codeurl )
- index = 0
- while index != 1 or index != 4:
- index = gitclone.expect ( ['already exists', 'resolving deltas: 100%', \
- 'Receiving objects', 'Already up-to-date', \
- pexpect.EOF] )
-
- filefolder = originalfolder + '/' + codeurl.split('/')[-1].split('.')[0]
- if index == 0 :
- os.chdir( filefolder )
- os.system( 'git pull' )
- os.chdir( originalfolder )
- self.loginfo.log( 'Download code success!' )
- break
- elif index == 1 :
- self.loginfo.log( 'Download code success!' )
- break
- elif index == 2 :
- increment += 1
- if increment == 20:
- print '\n'
- print '.'
- else :
- self.loginfo.log( 'Download code failed!' )
- self.loginfo.log( 'Information before' + gitclone.before )
- break
- time.sleep(5)
- gitclone.prompt( )
-
- def InstallDefaultSoftware( self, handle ):
- """
- Install default software
- parameters:
- handle(input): current working handle
- """
- print "Now Cleaning test environment"
- handle.sendline("sudo apt-get install -y mininet")
- handle.prompt( )
- handle.sendline("sudo pip install configobj")
- handle.prompt( )
- handle.sendline("sudo apt-get install -y sshpass")
- handle.prompt( )
- handle.sendline("OnosSystemTest/TestON/bin/cleanup.sh")
- handle.prompt( )
- time.sleep(5)
- self.loginfo.log( 'Clean environment success!' )
-
- def OnosPushKeys(self, handle, cmd, password):
- """
- Using onos-push-keys to make ssh device without password
- parameters:
- handle(input): working handle
- cmd(input): onos-push-keys xxx(xxx is device)
- password(input): login in password
- """
- print "Now Pushing Onos Keys:"+cmd
- Pushkeys = handle
- Pushkeys.sendline( cmd )
- Result = 0
- while Result != 2:
- Result = Pushkeys.expect( ["(yes/no)", "assword:", "PEXPECT]#", \
- pexpect.EOF, pexpect.TIMEOUT])
- if ( Result == 0 ):
- Pushkeys.sendline( "yes" )
- if ( Result == 1 ):
- Pushkeys.sendline( password )
- if ( Result == 2 ):
- self.loginfo.log( "ONOS Push keys Success!" )
- break
- if ( Result == 3 ):
- self.loginfo.log( "ONOS Push keys Error!" )
- break
- time.sleep(2)
- Pushkeys.prompt( )
- print "Done!"
-
- def SetOnosEnvVar( self, handle, masterpass, agentpass):
- """
- Setup onos pushkeys to all devices(3+2)
- parameters:
- handle(input): current working handle
- masterpass: scripts running server's password
- agentpass: onos cluster&compute node password
- """
- print "Now Setting test environment"
- self.OnosPushKeys( handle, "onos-push-keys " + self.OCT, masterpass)
- self.OnosPushKeys( handle, "onos-push-keys " + self.OC1, agentpass)
- self.OnosPushKeys( handle, "onos-push-keys " + self.OC2, agentpass)
- self.OnosPushKeys( handle, "onos-push-keys " + self.OC3, agentpass)
- self.OnosPushKeys( handle, "onos-push-keys " + self.OCN, agentpass)
- self.OnosPushKeys( handle, "onos-push-keys " + self.OCN2, agentpass)
-
- def ChangeOnosName( self, user, password):
- """
- Change onos name in envDefault file
- Because some command depend on this
- parameters:
- user: onos&compute node user
- password: onos&compute node password
- """
- print "Now Changing ONOS name&password"
- filepath = self.home + '/onos/tools/build/envDefaults'
- line = open(filepath, 'r').readlines()
- lenall = len(line) - 1
- for i in range(lenall):
- if "ONOS_USER=" in line[i]:
- line[i]=line[i].replace("sdn",user)
- if "ONOS_GROUP" in line[i]:
- line[i]=line[i].replace("sdn",user)
- if "ONOS_PWD" in line[i]:
- line[i]=line[i].replace("rocks",password)
- NewFile = open(filepath, 'w')
- NewFile.writelines(line)
- NewFile.close
- print "Done!"
-
- def ChangeTestCasePara(self, testcase, user, password):
- """
- When running test script, there's something need \
- to change in every test folder's *.param & *.topo files
- user: onos&compute node user
- password: onos&compute node password
- """
- print "Now Changing " + testcase + " name&password"
- if self.masterusername == 'root':
- filepath = '/root/'
- else :
- filepath = '/home/' + self.masterusername + '/'
- filepath = filepath +"OnosSystemTest/TestON/tests/" + testcase + "/" + \
- testcase + ".topo"
- line = open(filepath,'r').readlines()
- lenall = len(line)-1
- for i in range(lenall-2):
- if ("localhost" in line[i]) or ("OCT" in line[i]):
- line[i+1]=re.sub(">\w+",">"+user,line[i+1])
- line[i+2]=re.sub(">\w+",">"+password,line[i+2])
- if "OC1" in line [i] \
- or "OC2" in line [i] \
- or "OC3" in line [i] \
- or "OCN" in line [i] \
- or "OCN2" in line[i]:
- line[i+1]=re.sub(">\w+",">root",line[i+1])
- line[i+2]=re.sub(">\w+",">root",line[i+2])
- NewFile = open(filepath,'w')
- NewFile.writelines(line)
- NewFile.close
-
- def SSHlogin ( self, ipaddr, username, password ) :
- """
- SSH login provide a connection to destination.
- parameters:
- ipaddr: ip address
- username: login user name
- password: login password
- return: handle
- """
- login = pxssh.pxssh( )
- login.login ( ipaddr, username, password, original_prompt='[$#>]')
- #send command ls -l
- login.sendline ('ls -l')
- #match prompt
- login.prompt()
- print ("SSH login " + ipaddr + " success!")
- return login
-
- def SSHRelease( self, handle ):
- #Release ssh
- handle.logout()
-
- def CopyOnostoTestbin( self ):
- sourcefile = os.curdir + '/dependencies/onos'
- destifile = self.home + '/onos/tools/test/bin/'
- runcommand = 'cp ' + sourcefile + ' ' + destifile
- os.system( runcommand )
-
- def OnosEnvSetup( self, handle ):
- """
- Onos Environment Setup function
- """
- self.Gensshkey( handle )
- self.home = self.GetEnvValue( handle, 'HOME' )
- self.AddKnownHost( handle, self.OC1, "karaf", "karaf" )
- self.AddKnownHost( handle, self.OC2, "karaf", "karaf" )
- self.AddKnownHost( handle, self.OC3, "karaf", "karaf" )
- self.DownLoadCode( handle, 'https://github.com/sunyulin/OnosSystemTest.git' )
- self.DownLoadCode( handle, 'https://gerrit.onosproject.org/onos' )
- self.CopyOnostoTestbin()
- self.ChangeOnosName(self.agentusername,self.agentpassword)
- self.InstallDefaultSoftware( handle )
- self.SetOnosEnvVar(handle, self.masterpassword,self.agentpassword)
diff --git a/framework/scripts/function_test/Teston/adapters/foundation.py b/framework/scripts/function_test/Teston/adapters/foundation.py
deleted file mode 100644
index c909d36b..00000000
--- a/framework/scripts/function_test/Teston/adapters/foundation.py
+++ /dev/null
@@ -1,64 +0,0 @@
-"""
-Description:
- This file include basis functions
- lanqinglong@huawei.com
-"""
-
-import logging
-import os
-import time
-import yaml
-
-class foundation:
-
- def __init__(self):
-
- currentpath = os.getcwd()
- self.logdir = os.path.join( currentpath, 'log' )
- self.workhome = currentpath[0:currentpath.rfind('testcases')-1]
- self.Result_DB = ''
-
- def log (self, loginfo):
- """
- Record log in log directory for deploying test environment
- parameters:
- loginfo(input): record info
- """
- filename = time.strftime( '%Y-%m-%d-%H-%M-%S' ) + '.log'
- filepath = os.path.join( self.logdir, filename )
- logging.basicConfig( level=logging.INFO,
- format = '%(asctime)s %(filename)s:%(message)s',
- datefmt = '%d %b %Y %H:%M:%S',
- filename = filepath,
- filemode = 'w')
- filelog = logging.FileHandler( filepath )
- logging.getLogger( 'Functest' ).addHandler( filelog )
- print loginfo
- logging.info(loginfo)
-
- def getdefaultpara( self ):
- """
- Get Default Parameters value
- """
- with open(self.workhome + "testcases/config_functest.yaml") as f:
- functest_yaml = yaml.safe_load(f)
- f.close()
-
- self.Result_DB = str(functest_yaml.get("results").get("test_db_url"))
- self.masterusername = str(functest_yaml.get("ONOS").get("general").\
- get('onosbench_username'))
- self.masterpassword = str(functest_yaml.get("ONOS").get("general").\
- get("onosbench_password"))
- self.agentusername = str(functest_yaml.get("ONOS").get("general").\
- get("onoscli_username"))
- self.agentpassword = str(functest_yaml.get("ONOS").get("general").\
- get("onoscli_password"))
- self.runtimeout = functest_yaml.get("ONOS").get("general").get("runtimeout")
- self.OCT = str(functest_yaml.get("ONOS").get("environment").get("OCT"))
- self.OC1 = str(functest_yaml.get("ONOS").get("environment").get("OC1"))
- self.OC2 = str(functest_yaml.get("ONOS").get("environment").get("OC2"))
- self.OC3 = str(functest_yaml.get("ONOS").get("environment").get("OC3"))
- self.OCN = str(functest_yaml.get("ONOS").get("environment").get("OCN"))
- self.OCN2 = str(functest_yaml.get("ONOS").get("environment").get("OCN2"))
- self.localhost = self.OCT
- return True \ No newline at end of file