From 671823e12bc13be9a8b87a5d7de33da1bb7a44e8 Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Mon, 30 Nov 2015 07:58:38 -0800 Subject: created broader test category under scripts Change-Id: I3b8a39b7512594ae2c9aa7ab0e59cf6e2d31f7a2 Signed-off-by: Ashlee Young --- framework/scripts/function_test/Teston/Readme.txt | 5 - framework/scripts/function_test/Teston/__init__.py | 0 .../function_test/Teston/adapters/__init__.py | 0 .../function_test/Teston/adapters/client.py | 69 -- .../function_test/Teston/adapters/connection.py | 191 ----- .../function_test/Teston/adapters/environment.py | 226 ------ .../function_test/Teston/adapters/foundation.py | 64 -- framework/scripts/function_test/Teston/config.yaml | 16 - .../scripts/function_test/Teston/dependencies/onos | 23 - .../scripts/function_test/Teston/log/temp.log | 0 .../scripts/function_test/Teston/onosfunctest.py | 21 - .../testcases/FUNCovsdbtest/FUNCovsdbtest.params | 48 -- .../testcases/FUNCovsdbtest/FUNCovsdbtest.py | 240 ------- .../testcases/FUNCovsdbtest/FUNCovsdbtest.topo | 60 -- .../Teston/testcases/FUNCovsdbtest/__init__.py | 0 .../testcases/FUNCovsdbtest/dependencies/Nbdata.py | 212 ------ .../FUNCovsdbtest/dependencies/__init__.py | 0 .../testcases/FUNCvirNetNB/FUNCvirNetNB.params | 45 -- .../Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py | 795 --------------------- .../testcases/FUNCvirNetNB/FUNCvirNetNB.topo | 53 -- .../Teston/testcases/FUNCvirNetNB/__init__.py | 0 .../testcases/FUNCvirNetNB/dependencies/Nbdata.py | 212 ------ .../FUNCvirNetNB/dependencies/__init__.py | 0 framework/scripts/tests/Teston/Readme.txt | 5 + framework/scripts/tests/Teston/__init__.py | 0 .../scripts/tests/Teston/adapters/__init__.py | 0 framework/scripts/tests/Teston/adapters/client.py | 69 ++ .../scripts/tests/Teston/adapters/connection.py | 191 +++++ .../scripts/tests/Teston/adapters/environment.py | 226 ++++++ .../scripts/tests/Teston/adapters/foundation.py | 64 ++ framework/scripts/tests/Teston/config.yaml | 16 + framework/scripts/tests/Teston/dependencies/onos | 23 + framework/scripts/tests/Teston/log/temp.log | 0 framework/scripts/tests/Teston/onosfunctest.py | 21 + .../testcases/FUNCovsdbtest/FUNCovsdbtest.params | 48 ++ .../testcases/FUNCovsdbtest/FUNCovsdbtest.py | 240 +++++++ .../testcases/FUNCovsdbtest/FUNCovsdbtest.topo | 60 ++ .../Teston/testcases/FUNCovsdbtest/__init__.py | 0 .../testcases/FUNCovsdbtest/dependencies/Nbdata.py | 212 ++++++ .../FUNCovsdbtest/dependencies/__init__.py | 0 .../testcases/FUNCvirNetNB/FUNCvirNetNB.params | 45 ++ .../Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py | 795 +++++++++++++++++++++ .../testcases/FUNCvirNetNB/FUNCvirNetNB.topo | 53 ++ .../Teston/testcases/FUNCvirNetNB/__init__.py | 0 .../testcases/FUNCvirNetNB/dependencies/Nbdata.py | 212 ++++++ .../FUNCvirNetNB/dependencies/__init__.py | 0 46 files changed, 2280 insertions(+), 2280 deletions(-) delete mode 100644 framework/scripts/function_test/Teston/Readme.txt delete mode 100644 framework/scripts/function_test/Teston/__init__.py delete mode 100644 framework/scripts/function_test/Teston/adapters/__init__.py delete mode 100644 framework/scripts/function_test/Teston/adapters/client.py delete mode 100644 framework/scripts/function_test/Teston/adapters/connection.py delete mode 100644 framework/scripts/function_test/Teston/adapters/environment.py delete mode 100644 framework/scripts/function_test/Teston/adapters/foundation.py delete mode 100644 framework/scripts/function_test/Teston/config.yaml delete mode 100644 framework/scripts/function_test/Teston/dependencies/onos delete mode 100644 framework/scripts/function_test/Teston/log/temp.log delete mode 100644 framework/scripts/function_test/Teston/onosfunctest.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/__init__.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/__init__.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py delete mode 100644 framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py create mode 100644 framework/scripts/tests/Teston/Readme.txt create mode 100644 framework/scripts/tests/Teston/__init__.py create mode 100644 framework/scripts/tests/Teston/adapters/__init__.py create mode 100644 framework/scripts/tests/Teston/adapters/client.py create mode 100644 framework/scripts/tests/Teston/adapters/connection.py create mode 100644 framework/scripts/tests/Teston/adapters/environment.py create mode 100644 framework/scripts/tests/Teston/adapters/foundation.py create mode 100644 framework/scripts/tests/Teston/config.yaml create mode 100644 framework/scripts/tests/Teston/dependencies/onos create mode 100644 framework/scripts/tests/Teston/log/temp.log create mode 100644 framework/scripts/tests/Teston/onosfunctest.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/__init__.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/__init__.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py create mode 100644 framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py diff --git a/framework/scripts/function_test/Teston/Readme.txt b/framework/scripts/function_test/Teston/Readme.txt deleted file mode 100644 index 7393f59a..00000000 --- a/framework/scripts/function_test/Teston/Readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -1.This is a basic test run about onos,we will make them better and better -2.This test include two suites: -(1)Test northbound(network/subnet/ports create/update/delete) -(2)Ovsdb test,default configuration,openflow connection,vm go onlines. -3.Later we will make a framework to do this test \ No newline at end of file diff --git a/framework/scripts/function_test/Teston/__init__.py b/framework/scripts/function_test/Teston/__init__.py deleted file mode 100644 index e69de29b..00000000 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 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 diff --git a/framework/scripts/function_test/Teston/config.yaml b/framework/scripts/function_test/Teston/config.yaml deleted file mode 100644 index 78afb01b..00000000 --- a/framework/scripts/function_test/Teston/config.yaml +++ /dev/null @@ -1,16 +0,0 @@ -ONOS: - general: - onosbench_username: 'root' - onosbench_password: 'root' - onoscli_username: 'root' - onoscli_password: 'root' - runtimeout: 300 - environment: - OCT: '189.42.8.99' - OC1: '189.42.8.101' - OC2: '189.42.8.102' - OC3: '189.42.8.103' - OCN: '189.42.8.104' - OCN2: '189.42.8.105' -results: - test_db_url: http://213.77.62.197 \ No newline at end of file diff --git a/framework/scripts/function_test/Teston/dependencies/onos b/framework/scripts/function_test/Teston/dependencies/onos deleted file mode 100644 index d4d59e0f..00000000 --- a/framework/scripts/function_test/Teston/dependencies/onos +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# ----------------------------------------------------------------------------- -# ONOS remote command-line client. -# ----------------------------------------------------------------------------- - -[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 -. /root/.bashrc -. $ONOS_ROOT/tools/build/envDefaults -. $ONOS_ROOT/tools/test/bin/find-node.sh - -[ "$1" = "-w" ] && shift && onos-wait-for-start $1 - -[ -n "$1" ] && OCI=$(find_node $1) && shift - -if which client 1>/dev/null 2>&1 && [ -z "$ONOS_USE_SSH" ]; then - # Use Karaf client only if we can and are allowed to - unset KARAF_HOME - client -h $OCI -u karaf "$@" 2>/dev/null -else - # Otherwise use raw ssh; strict checking is off for dev environments only - #ssh -p 8101 -o StrictHostKeyChecking=no $OCI "$@" - sshpass -p karaf ssh -l karaf -p 8101 $OCI "$@" -fi diff --git a/framework/scripts/function_test/Teston/log/temp.log b/framework/scripts/function_test/Teston/log/temp.log deleted file mode 100644 index e69de29b..00000000 diff --git a/framework/scripts/function_test/Teston/onosfunctest.py b/framework/scripts/function_test/Teston/onosfunctest.py deleted file mode 100644 index e8524430..00000000 --- a/framework/scripts/function_test/Teston/onosfunctest.py +++ /dev/null @@ -1,21 +0,0 @@ -""" -Description: This test is to run onos Teston VTN scripts - -List of test cases: -CASE1 - Northbound NBI test network/subnet/ports -CASE2 - Ovsdb test&Default configuration&Vm go online - -lanqinglong@huawei.com -""" -from adapters.client import client - -if __name__=="__main__": - - main = client() - main.getdefaultpara() - - #scripts to run - runhandle = main.onosstart() - main.RunScript(runhandle, "FUNCvirNetNB") - main.RunScript(runhandle, "FUNCovsdbtest") - main.onosclean( runhandle ) diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params deleted file mode 100644 index e1128284..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params +++ /dev/null @@ -1,48 +0,0 @@ - - # CASE - Description - # 1 - Compile ONOS and push it to the test machines - # 2 - Test ovsdb connection and tearDown - # 3 - Test default br-int configuration and vxlan port - # 4 - Test default openflow configuration - # 5 - Test default flows - # 6 - Configure Network Subnet Port - # 7 - Test host go online and ping each other - # 8 - Clear ovs configuration and host configuration - - 1,3,4,2,5,6,7,8 - - - /tests/FUNCovsdbtest/Dependency/ - - - - singlenode - drivers,openflow,proxyarp,mobility - - - - OC1 - 6653 - 6640 - - - - 5 #delaytime for ovsdb connection create and delete - - - - 8181 - /onos/vtn/ - - - - False - master - - - - OCN - OC1 - - - diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py deleted file mode 100644 index 1cb0ab20..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py +++ /dev/null @@ -1,240 +0,0 @@ -""" -Description: This test is to check onos set configuration and flows with ovsdb connection. - -List of test cases: -CASE1: Compile ONOS and push it to the test machines -CASE2: Test ovsdb connection and tearDown -CASE3: Test default br-int configuration and vxlan port -CASE4: Test default openflow configuration -CASE5: Test default flows -CASE6: Configure Network Subnet Port -CASE7: Test host go online and ping each other -CASE8: Clear ovs configuration and host configuration -zhanghaoyu7@huawei.com -""" -import os - -class FUNCovsdbtest: - - def __init__( self ): - self.default = '' - - def CASE1( self, main ): - """ - CASE1 is to compile ONOS and push it to the test machines - - Startup sequence: - cell - onos-verify-cell - NOTE: temporary - onos-remove-raft-logs - onos-uninstall - start mininet - git pull - mvn clean install - onos-package - onos-install -f - onos-wait-for-start - start cli sessions - start ovsdb - start vtn apps - """ - import os - main.log.info( "ONOS Single node start " + - "ovsdb test - initialization" ) - main.case( "Setting up test environment" ) - main.caseExplanation = "Setup the test environment including " +\ - "installing ONOS, start ONOS." - - # load some variables from the params file - PULLCODE = False - if main.params[ 'GIT' ][ 'pull' ] == 'True': - PULLCODE = True - gitBranch = main.params[ 'GIT' ][ 'branch' ] - cellName = main.params[ 'ENV' ][ 'cellName' ] - ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] ) - OVSDB1Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip1' ] ) - OVSDB2Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip2' ] ) - - main.step( "Create cell file" ) - cellAppString = main.params[ 'ENV' ][ 'cellApps' ] - main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName, - main.OVSDB1.ip_address, - cellAppString, ipList ) - - main.step( "Applying cell variable to environment" ) - cellResult = main.ONOSbench.setCell( cellName ) - verifyResult = main.ONOSbench.verifyCell() - - main.log.info( "Removing raft logs" ) - main.ONOSbench.onosRemoveRaftLogs() - - main.CLIs = [] - main.nodes = [] - main.numCtrls= 1 - - for i in range( 1, main.numCtrls + 1 ): - try: - main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) ) - main.nodes.append( getattr( main, 'ONOS' + str( i ) ) ) - ipList.append( main.nodes[ -1 ].ip_address ) - except AttributeError: - break - - main.log.info( "Uninstalling ONOS" ) - for node in main.nodes: - main.ONOSbench.onosUninstall( node.ip_address ) - - # Make sure ONOS process is not running - main.log.info( "Killing any ONOS processes" ) - killResults = main.TRUE - for node in main.nodes: - killed = main.ONOSbench.onosKill( node.ip_address ) - killResults = killResults and killed - - cleanInstallResult = main.TRUE - gitPullResult = main.TRUE - main.step( "Git checkout and pull" + gitBranch ) - if PULLCODE: - main.ONOSbench.gitCheckout( gitBranch ) - gitPullResult = main.ONOSbench.gitPull() - # values of 1 or 3 are good - utilities.assert_lesser( expect=0, actual=gitPullResult, - onpass="Git pull successful", - onfail="Git pull failed" ) - - main.ONOSbench.getVersion( report=True ) - - main.step( "Using mvn clean install" ) - cleanInstallResult = main.TRUE - if PULLCODE and gitPullResult == main.TRUE: - cleanInstallResult = main.ONOSbench.cleanInstall() - else: - main.log.warn( "Did not pull new code so skipping mvn" + - "clean install" ) - utilities.assert_equals( expect=main.TRUE, - actual=cleanInstallResult, - onpass="MCI successful", - onfail="MCI failed" ) - - main.step( "Creating ONOS package" ) - packageResult = main.ONOSbench.onosPackage() - utilities.assert_equals( expect=main.TRUE, - actual=packageResult, - onpass="Successfully created ONOS package", - onfail="Failed to create ONOS package" ) - - main.step( "Installing ONOS package" ) - onosInstallResult = main.ONOSbench.onosInstall( - options="-f", node=main.nodes[0].ip_address ) - utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult, - onpass="ONOS install successful", - onfail="ONOS install failed" ) - - main.step( "Checking if ONOS is up yet" ) - print main.nodes[0].ip_address - for i in range( 2 ): - onos1Isup = main.ONOSbench.isup( main.nodes[0].ip_address ) - if onos1Isup: - break - utilities.assert_equals( expect=main.TRUE, actual=onos1Isup, - onpass="ONOS startup successful", - onfail="ONOS startup failed" ) - main.log.step( "Starting ONOS CLI sessions" ) - print main.nodes[0].ip_address - cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address ) - utilities.assert_equals( expect=main.TRUE, actual=cliResults, - onpass="ONOS cli startup successful", - onfail="ONOS cli startup failed" ) - - main.step( "App Ids check" ) - appCheck = main.ONOScli1.appToIDCheck() - - if appCheck !=main.TRUE: - main.log.warn( main.CLIs[0].apps() ) - main.log.warn( main.CLIs[0].appIDs() ) - utilities.assert_equals( expect=main.TRUE, actual=appCheck, - onpass="App Ids seem to be correct", - onfail="Something is wrong with app Ids" ) - if cliResults == main.FALSE: - main.log.error( "Failed to start ONOS,stopping test" ) - main.cleanup() - main.exit() - - main.step( "Install onos-ovsdatabase" ) - installResults = main.ONOScli1.activateApp( "org.onosproject.ovsdb" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-ovsdatabase successful", - onfail="Install onos-ovsdatabase failed" ) - - main.step( "Install onos-app-vtnrsc" ) - installResults = main.ONOScli1.activateApp( "org.onosproject.vtnrsc" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-app-vtnrsc successful", - onfail="Install onos-app-vtnrsc failed" ) - - main.step( "Install onos-app-vtn" ) - installResults = main.ONOScli1.activateApp( "org.onosproject.vtn" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-app-vtn successful", - onfail="Install onos-app-vtn failed" ) - - main.step( "Install onos-app-vtnweb" ) - installResults = main.ONOScli1.activateApp( "org.onosproject.vtnweb" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-app-vtnweb successful", - onfail="Install onos-app-vtnweb failed" ) - - def CASE2( self, main ): - - """ - Test ovsdb connection and teardown - """ - import os,sys - import re - import time - - main.case( "Test ovsdb connection and teardown" ) - main.caseExplanation = "Test ovsdb connection create and delete" +\ - " over ovsdb node and onos node " - - ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] ) - ovsdbport = main.params[ 'CTRL' ][ 'ovsdbport' ] - delaytime = main.params[ 'TIMER' ][ 'delaytime' ] - - main.step( "Set ovsdb node manager" ) - assignResult = main.OVSDB1.setManager( ip=ctrlip, port=ovsdbport, delaytime=delaytime ) - stepResult = assignResult - utilities.assert_equals( expect=main.TRUE, - actual=stepResult, - onpass="Set ovsdb node manager sucess", - onfail="Set ovsdb node manager failed" ) - - main.step( "Check ovsdb node manager is " + str( ctrlip ) ) - response = main.OVSDB1.getManager() - if re.search( ctrlip, response ): - stepResult = main.TRUE - else: - stepResult = main.FALSE - utilities.assert_equals( expect=main.TRUE, - actual=stepResult, - onpass="Check ovsdb node manager is " + str( response ) , - onfail="Check ovsdb node manager failed" ) - - main.step( "Delete ovsdb node manager" ) - deleteResult = main.OVSDB1.delManager( delaytime=delaytime ) - stepResult = deleteResult - utilities.assert_equals( expect=main.TRUE, - actual=stepResult, - onpass="ovsdb node delete manager sucess", - onfail="ovsdb node delete manager failed" ) - - main.step( "Check ovsdb node delete manager " + str( ctrlip ) ) - response = main.OVSDB1.getManager() - if not re.search( ctrlip, response ): - stepResult = main.TRUE - else: - stepResult = main.FALSE - utilities.assert_equals( expect=main.TRUE, - actual=stepResult, - onpass="Check ovsdb node delete manager sucess", - onfail="Check ovsdb node delete manager failed" ) diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo deleted file mode 100644 index ae748d2e..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo +++ /dev/null @@ -1,60 +0,0 @@ - - - - - OCN - admin - - OnosDriver - 1 - - - - - - OCN - admin - - OnosCliDriver - 2 - - - - - OC1 - sdn - - OnosDriver - 3 - - - - - OC1 - sdn - - OnosRestDriver - 4 - - - - - OCN - admin - - OvsdbDriver - 5 - - - - - OC1 - sdn - - OvsdbDriver - 6 - - - - - diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/__init__.py b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py deleted file mode 100644 index 3fde20db..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py +++ /dev/null @@ -1,212 +0,0 @@ -""" -This file provide the data -lanqinglong@huawei.com -""" -import json - -class NetworkData: - - def __init__(self): - self.id = '' - self.state = 'ACTIVE' - self.name = 'onosfw-1' - self.physicalNetwork = 'none' - self.admin_state_up = True - self.tenant_id = '' - self.routerExternal = False - self.type ='LOCAL' - self.segmentationID = '6' - self.shared = False - - def DictoJson(self): - - if self.id =='' or self.tenant_id == '': - print 'Id and tenant id is necessary!' - - Dicdata = {} - if self.id !='': - Dicdata['id'] = self.id - if self.state != '': - Dicdata['status'] = self.state - if self.name !='': - Dicdata['name'] = self.name - if self.physicalNetwork !='': - Dicdata['provider:physical_network'] = self.physicalNetwork - if self.admin_state_up !='': - Dicdata['admin_state_up'] = self.admin_state_up - if self.tenant_id !='': - Dicdata['tenant_id'] = self.tenant_id - if self.routerExternal !='': - Dicdata['router:external'] = self.routerExternal - if self.type !='': - Dicdata['provider:network_type'] = self.type - if self.segmentationID !='': - Dicdata['provider:segmentation_id'] = self.segmentationID - if self.shared !='': - Dicdata['shared'] = self.shared - - Dicdata = {'network': Dicdata} - - return json.dumps(Dicdata,indent=4) - - def Ordered(self,obj): - - if isinstance(obj, dict): - return sorted((k,self.Ordered(v)) for k, v in obj.items()) - if isinstance(obj, list): - return sorted(self.Ordered(x) for x in obj ) - else: - return obj - - def JsonCompare(self,SourceData,DestiData,FirstPara,SecondPara): - - try: - SourceCompareDataDic = json.loads(SourceData) - DestiCompareDataDic = json.loads(DestiData) - except ValueError: - print "SourceData or DestData is not JSON Type!" - return False - - try: - Socom = SourceCompareDataDic[FirstPara][SecondPara] - Decom = DestiCompareDataDic[FirstPara][SecondPara] - except KeyError,error: - print "Key error ,This key is not found:%s"%error - return False - - if str(Socom).lower()== str(Decom).lower(): - return True - else: - print "Source Compare data:"+FirstPara+"."+SecondPara+"="+str(Socom) - print "Dest Compare data: "+FirstPara+"."+SecondPara+"="+str(Decom) - return False - -class SubnetData(NetworkData): - - def __init__(self): - self.id = '' - self.tenant_id = '' - self.network_id = '' - self.nexthop = '192.168.1.1' - self.destination = '192.168.1.1/24' - self.start = '192.168.2.2' - self.end = '192.168.2.254' - self.ipv6_address_mode = 'DHCPV6_STATELESS' - self.ipv6_ra_mode = 'DHCPV6_STATELESS' - self.cidr = '192.168.1.1/24' - self.enable_dhcp = True - self.dns_nameservers = 'aaa' - self.gateway_ip = '192.168.2.1' - self.ip_version = '4' - self.shared = False - self.name = 'demo-subnet' - - def DictoJson(self): - if self.id =='' or self.tenant_id == '': - print 'Id and tenant id is necessary!' - - Dicdata = {} - host_routesdata = [] - host_routesdata.append({'nexthop': self.nexthop,'destination': self.destination}) - allocation_pools = [] - allocation_pools.append({'start': self.start,'end':self.end}) - - if self.id != '': - Dicdata['id'] = self.id - if self.network_id != '': - Dicdata['network_id'] = self.network_id - if self.name != '': - Dicdata['name'] = self.name - if self.nexthop != '': - Dicdata['host_routes'] = host_routesdata - if self.tenant_id != '': - Dicdata['tenant_id'] = self.tenant_id - if self.start != '': - Dicdata['allocation_pools'] = allocation_pools - if self.shared != '': - Dicdata['shared'] = self.shared - if self.ipv6_address_mode != '': - Dicdata['ipv6_address_mode'] = self.ipv6_address_mode - if self.ipv6_ra_mode != '': - Dicdata['ipv6_ra_mode'] = self.ipv6_ra_mode - if self.cidr != '': - Dicdata['cidr'] = self.cidr - if self.enable_dhcp != '': - Dicdata['enable_dhcp'] = self.enable_dhcp - if self.dns_nameservers != '': - Dicdata['dns_nameservers'] = self.dns_nameservers - if self.gateway_ip != '': - Dicdata['gateway_ip'] = self.gateway_ip - if self.ip_version != '': - Dicdata['ip_version'] = self.ip_version - - Dicdata = {'subnet': Dicdata} - - return json.dumps(Dicdata,indent=4) - -class VirtualPortData(NetworkData): - - def __init__(self): - self.id = '' - self.state = 'ACTIVE' - self.bindingHostId = 'fa:16:3e:76:8e:88' - self.allowedAddressPairs = [{'mac_address':'fa:16:3e:76:8e:88','ip_address':'192.168.1.1'}] - self.deviceOwner = 'none' - self.fixedIp = [] - self.securityGroups = [{'securityGroup':'asd'}] - self.adminStateUp = True - self.network_id = '' - self.tenant_id = '' - self.subnet_id = '' - self.bindingvifDetails = 'port_filter' - self.bindingvnicType = 'normal' - self.bindingvifType = 'ovs' - self.macAddress = 'fa:16:3e:76:8e:88' - self.deviceId = 'a08aa' - self.name = 'u' - - def DictoJson(self): - if self.id == '' or self.tenant_id == ' ' or \ - self.network_id == '' or self.subnet_id == '': - print 'Id/tenant id/networkid/subnetId is necessary!' - - Dicdata = {} - fixedIp =[] - fixedIp.append({'subnet_id':self.subnet_id,'ip_address':'192.168.1.4'}) - allocation_pools = [] - - if self.id != '': - Dicdata['id'] = self.id - if self.state != '': - Dicdata['status'] = self.state - if self.bindingHostId != '': - Dicdata['binding:host_id'] = self.bindingHostId - if self.allowedAddressPairs != '': - Dicdata['allowed_address_pairs'] = self.allowedAddressPairs - if self.deviceOwner != '': - Dicdata['device_owner'] = self.deviceOwner - if self.securityGroups != '': - Dicdata['security_groups'] = self.securityGroups - if self.adminStateUp != '': - Dicdata['admin_state_up'] = self.adminStateUp - if self.network_id != '': - Dicdata['network_id'] = self.network_id - if self.tenant_id != '': - Dicdata['tenant_id'] = self.tenant_id - if self.bindingvifDetails != '': - Dicdata['binding:vif_details'] = self.bindingvifDetails - if self.bindingvnicType != '': - Dicdata['binding:vnic_type'] = self.bindingvnicType - if self.bindingvifType != '': - Dicdata['binding:vif_type'] = self.bindingvifType - if self.macAddress != '': - Dicdata['mac_address'] = self.macAddress - if self.deviceId != '': - Dicdata['device_id'] = self.deviceId - if self.name != '': - Dicdata['name'] = self.name - - Dicdata['fixed_ips'] = fixedIp - Dicdata = {'port': Dicdata} - - return json.dumps(Dicdata,indent=4) diff --git a/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py b/framework/scripts/function_test/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params deleted file mode 100644 index a922e751..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params +++ /dev/null @@ -1,45 +0,0 @@ - - # CASE - Description - # 1 - Variable initialization and optional pull and build ONOS package - # 2 - Create Network northbound test - # 3 - Update Network northbound test - # 4 - Delete Network northbound test - # 5 - Create Subnet northbound test - # 6 - Update Subnet northbound test - # 7 - Delete Subnet northbound test - # 8 - Create Virtualport northbound test - # 9 - Update Virtualport northbound test - #10 - Delete Virtualport northbound test - - 1,2,3,4,5,6,7,8,9,10 - - - 15 - - - - singlenode - drivers,openflow,proxyarp,mobility - - - - OC1 - 6653 - - - - 8181 - /onos/vtn/ - - - - False - master - - - - 7 - 20 - - - diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py deleted file mode 100644 index 4ea8a359..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py +++ /dev/null @@ -1,795 +0,0 @@ -""" -Description: This test is to determine if North bound - can handle the request - -List of test cases: -CASE1 - Variable initialization and optional pull and build ONOS package -CASE2 - Create Network northbound test -CASE3 - Update Network northbound test -CASE4 - Delete Network northbound test -CASE5 - Create Subnet northbound test -CASE6 - Update Subnet northbound test -CASE7 - Delete Subnet northbound test -CASE8 - Create Virtualport northbound test -CASE9 - Update Virtualport northbound test -CASE10 - Delete Virtualport northbound test -CASE11 - Post Error Json Create Network test -CASE12 - Post Error Json Create Subnet test -CASE13 - Post Error Json Create Virtualport test - -lanqinglong@huawei.com -""" -import os - -class FUNCvirNetNB: - - def __init__( self ): - self.default = '' - - def CASE1( self, main ): - """ - CASE1 is to compile ONOS and push it to the test machines - - Startup sequence: - cell - onos-verify-cell - NOTE:temporary - onos-remove-raft-logs - onos-uninstall - git pull - mvn clean install - onos-package - onos-install -f - onos-wait-for-start - start cli sessions - start vtnrsc - """ - - import time - import os - main.log.info( "ONOS Single node Start "+ - "VirtualNet Northbound test - initialization" ) - main.case( "Setting up test environment" ) - main.caseExplanation = "Setup the test environment including "+\ - "installing ONOS,start ONOS." - - # load some variables from the params file - PULLCODE = False - if main.params['GIT']['pull'] =='True': - PULLCODE = True - gitBranch = main.params['GIT']['branch'] - cellName = main.params['ENV']['cellName'] - ipList = os.getenv( main.params['CTRL']['ip1'] ) - - main.step("Create cell file and apply to environment") - cellAppString = main.params['ENV']['cellApps'] - main.ONOSbench.createCellFile(main.ONOSbench.ip_address,cellName, - main.Mininet1.ip_address, - cellAppString,ipList ) - - cellResult = main.ONOSbench.setCell(cellName) - verifyResult = main.ONOSbench.verifyCell() - - stepResult = cellResult and verifyResult - utilities.assert_equals( expect=main.TRUE, - actual=stepResult, - onpass="Successfully applied cell to " + \ - "environment", - onfail="Failed to apply cell to environment " ) - - #FIXME:this is short term fix - main.log.info( "Removing raft logs" ) - main.ONOSbench.onosRemoveRaftLogs() - - main.CLIs = [] - main.nodes = [] - main.numCtrls=1 - main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] ) - - for i in range ( 1, main.numCtrls +1): - try: - main.CLIs.append( getattr( main, 'ONOScli' + str(i) ) ) - main.nodes.append( getattr( main, 'ONOS' + str(i) ) ) - ipList.append( main.nodes[ -1 ].ip_address ) - except AttributeError: - break - - main.log.info( "Uninstalling ONOS" ) - for node in main.nodes: - main.ONOSbench.onosUninstall( node.ip_address ) - - #Make sure ONOS is DEAD - main.log.info( "Killing any ONOS processes" ) - killResults = main.TRUE - for node in main.nodes: - killed = main.ONOSbench.onosKill( node.ip_address ) - killResults = killResults and killed - - cleanInstallResult = main.TRUE - gitPullResult = main.TRUE - main.log.info( "Git checkout and pull " + gitBranch ) - if PULLCODE: - main.ONOSbench.gitCheckout ( gitBranch ) - gitPullResult = main.ONOSbench.gitPull() - # values of 1 or 3 are good - utilities.assert_lesser ( expect=0, actual=gitPullResult, - onpass="Git pull successful", - onfail ="Git pull failed" ) - main.ONOSbench.getVersion( report =True ) - main.step( "Using mvn clean install" ) - cleanInstallResult= main.TRUE - if PULLCODE and gitPullResult == main.TRUE: - cleanInstallResult = main.ONOSbench.cleanInstall() - else: - main.log.warn("Did not pull new code so skipping mvn "+ - "clean install") - - utilities.assert_equals( expect=main.TRUE, - actual=cleanInstallResult, - onpass="MCI successful", - onfail="MCI failed" ) - - main.step( "Creating ONOS package" ) - packageResult = main.ONOSbench.onosPackage() - utilities.assert_equals( expect=main.TRUE, - actual=packageResult, - onpass="Successfully created ONOS package", - onfail="Failed to create ONOS package " ) - time.sleep( main.startUpSleep ) - - main.step( "Installing ONOS package" ) - onosInstallResult = main.ONOSbench.onosInstall( - options="-f",node=main.nodes[0].ip_address ) - utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult, - onpass="ONOS install successful", - onfail="ONOS install failed" ) - time.sleep( main.startUpSleep ) - - main.step( "Checking if ONOS is up yet" ) - - for i in range( 2 ): - onos1Isup = main.ONOSbench.isup( main.nodes[0].ip_address ) - if onos1Isup: - break - utilities.assert_equals( expect=main.TRUE, actual=onos1Isup, - onpass="ONOS startup successful", - onfail="ONOS startup failed" ) - time.sleep( main.startUpSleep ) - - main.log.step( "Starting ONOS CLI sessions" ) - - print main.nodes[0].ip_address - cliResults = main.ONOScli1.startOnosCli(main.nodes[0].ip_address) - utilities.assert_equals( expect=main.TRUE, actual=cliResults, - onpass="ONOS cli startup successful", - onfail="ONOS cli startup failed" ) - time.sleep( main.startUpSleep ) - - main.step( "App Ids check" ) - appCheck = main.ONOScli1.appToIDCheck() - if appCheck != main.TRUE: - main.log.warn( main.CLIs[0].apps() ) - main.log.warn( main.CLIs[0].appIDs() ) - utilities.assert_equals( expect=main.TRUE, actual=appCheck, - onpass="App Ids seem to be correct", - onfail="Something is wrong with app Ids" ) - - if cliResults == main.FALSE: - main.log.error( "Failed to start ONOS, stopping test" ) - main.cleanup() - main.exit() - - main.step( "Install onos-app-vtnrsc app" ) - installResults = main.ONOScli1.featureInstall( "onos-app-vtnrsc" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-app-vtnrsc successful", - onfail="Install onos-app-vtnrsc app failed" ) - - time.sleep( main.startUpSleep ) - - main.step( "Install onos-app-vtnweb app" ) - installResults = main.ONOScli1.featureInstall( "onos-app-vtnweb" ) - utilities.assert_equals( expect=main.TRUE, actual=installResults, - onpass="Install onos-app-vtnweb successful", - onfail="Install onos-app-vtnweb app failed" ) - - time.sleep( main.startUpSleep ) - - def CASE2 ( self,main ): - - """ - Test Post Network - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Network Post test Start" ) - main.case( "Virtual Network NBI Test - Network" ) - main.caseExplanation = "Test Network Post NBI " +\ - "Verify Post Data same with Stored Data" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - postdata = network.DictoJson() - - main.step( "Post Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path+'networks/', - 'POST', None, postdata) - - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Success", - onfail="Post Failed " + str( Poststatus ) + str( result ) ) - - main.step( "Get Data via HTTP" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'GET', None, None) - utilities.assert_equals( - expect='200', - actual=Getstatus, - onpass="Get Success", - onfail="Get Failed " + str( Getstatus ) + str( result ) ) - - main.log.info("Post Network Data is :%s\nGet Network Data is:%s"%(postdata,result)) - - main.step( "Compare Send Id and Get Id" ) - IDcmpresult = network.JsonCompare( postdata, result, 'network', 'id' ) - TanantIDcmpresult = network.JsonCompare( postdata, result, 'network', 'tenant_id' ) - Cmpresult = IDcmpresult and TanantIDcmpresult - - utilities.assert_equals( - expect=True, - actual=Cmpresult, - onpass="Compare Success", - onfail="Compare Failed:ID compare: " + str( IDcmpresult ) + \ - ",Tenant id compare :" + str( TanantIDcmpresult ) ) - - deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='200', - actual=deletestatus, - onpass="Delete Network Success", - onfail="Delete Network Failed") - - if Cmpresult != True: - main.log.error( "Post Network compare failed" ) - - def CASE3( self,main ): - - """ - Test Update Network - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Network Update test Start" ) - main.case( "Virtual Network NBI Test - Network" ) - main.caseExplanation = "Test Network Update NBI " +\ - "Verify Update Data same with Stored Data" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - network.shared = False - postdata = network.DictoJson() - - network.shared = True - postdatanew = network.DictoJson() - - main.step( "Post Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path+'networks', - 'POST', None, postdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Success", - onfail="Post Failed " + str( Poststatus ) + str( result ) ) - - main.step( "Update Data via HTTP" ) - Updatestatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'PUT', None, postdatanew) - utilities.assert_equals( - expect='200', - actual=Updatestatus, - onpass="Update Success", - onfail="Update Failed " + str( Updatestatus ) + str( result ) ) - - main.step( "Get Data via HTTP" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'GET', None, None ) - utilities.assert_equals( - expect='200', - actual=Getstatus, - onpass="Get Success", - onfail="Get Failed " + str( Getstatus ) + str( result ) ) - - main.step( "Compare Update data." ) - IDcmpresult = network.JsonCompare( postdatanew, result, 'network', 'id' ) - TanantIDcmpresult = network.JsonCompare( postdatanew, result, 'network', 'tenant_id' ) - Shareresult = network.JsonCompare( postdatanew, result, 'network', 'shared' ) - - Cmpresult = IDcmpresult and TanantIDcmpresult and Shareresult - utilities.assert_equals( - expect=True, - actual=Cmpresult, - onpass="Compare Success", - onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ - ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ - ",Name compare:" + str( Shareresult ) ) - - deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'DELETE', None, None ) - - utilities.assert_equals( - expect='200', - actual=deletestatus, - onpass="Delete Network Success", - onfail="Delete Network Failed" ) - - if Cmpresult != True: - main.log.error( "Update Network compare failed" ) - - def CASE4( self,main ): - - """ - Test Delete Network - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Network Delete test Start" ) - main.case( "Virtual Network NBI Test - Network" ) - main.caseExplanation = "Test Network Delete NBI " +\ - "Verify Stored Data is NULL after Delete" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - postdata = network.DictoJson() - - main.step( "Post Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', - 'POST', None, postdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Success", - onfail="Post Failed " + str( Poststatus ) + str( result ) ) - - main.step( "Delete Data via HTTP" ) - Deletestatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='200', - actual=Deletestatus, - onpass="Delete Success", - onfail="Delete Failed " + str( Deletestatus ) + str( result ) ) - - main.step( "Get Data is NULL" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'GET', None, None ) - utilities.assert_equals( - expect='Network is not found', - actual=result, - onpass="Get Success", - onfail="Get Failed " + str( Getstatus ) + str( result ) ) - - if result != 'Network is not found': - main.log.error( "Delete Network failed" ) - - def CASE5( self, main ): - - """ - Test Post Subnet - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Subnet Post test Start" ) - main.case( "Virtual Network NBI Test - Subnet" ) - main.caseExplanation = "Test Subnet Post NBI " +\ - "Verify Stored Data is same with Post Data" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - subnet = SubnetData() - subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" - subnet.tenant_id = network.tenant_id - subnet.network_id = network.id - - networkpostdata = network.DictoJson() - subnetpostdata = subnet.DictoJson() - - main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', - 'POST', None, networkpostdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Network Success", - onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Post Subnet Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', - 'POST', None, subnetpostdata ) - utilities.assert_equals( - expect='202', - actual=Poststatus, - onpass="Post Subnet Success", - onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Get Subnet Data via HTTP" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', - 'GET', None, None ) - utilities.assert_equals( - expect='200', - actual=Getstatus, - onpass="Get Subnet Success", - onfail="Get Subnet Failed " + str( Getstatus ) + "," + str( result ) ) - - IDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'id' ) - TanantIDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'tenant_id' ) - NetoworkIDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'network_id' ) - - main.step( "Compare Post Subnet Data via HTTP" ) - Cmpresult = IDcmpresult and TanantIDcmpresult and NetoworkIDcmpresult - utilities.assert_equals( - expect=True, - actual=Cmpresult, - onpass="Compare Success", - onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ - ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ - ",Network id compare:" + str( NetoworkIDcmpresult ) ) - - deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='200', - actual=deletestatus, - onpass="Delete Network Success", - onfail="Delete Network Failed" ) - - if Cmpresult != True: - main.log.error( "Post Subnet compare failed" ) - - def CASE6( self, main ): - - """ - Test Post Subnet - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Subnet Update test Start" ) - main.case( "Virtual Network NBI Test - Subnet" ) - main.caseExplanation = "Test Subnet Update NBI " +\ - "Verify Stored Data is same with Update Data" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - subnet = SubnetData() - subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" - subnet.tenant_id = network.tenant_id - subnet.network_id = network.id - subnet.start = "192.168.2.1" - subnet.end = "192.168.2.255" - networkpostdata = network.DictoJson() - subnetpostdata = subnet.DictoJson() - - #Change allocation_poolsdata scope - subnet.start = "192.168.102.1" - subnet.end = "192.168.102.255" - #end change - newsubnetpostdata = subnet.DictoJson() - - main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', - 'POST', None, networkpostdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Network Success", - onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Post Subnet Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', - 'POST', None, subnetpostdata ) - utilities.assert_equals( - expect='202', - actual=Poststatus, - onpass="Post Subnet Success", - onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Update Subnet Data via HTTP" ) - Putstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', - 'PUT', None, newsubnetpostdata ) - utilities.assert_equals( - expect='203', - actual=Putstatus, - onpass="Update Subnet Success", - onfail="Update Subnet Failed " + str( Putstatus ) + "," + str( result ) ) - - main.step( "Get Subnet Data via HTTP" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', - 'GET', None, None ) - utilities.assert_equals( - expect='200', - actual=Getstatus, - onpass="Get Subnet Success", - onfail="Get Subnet Failed " + str( Getstatus ) + "," + str( result ) ) - - IDcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'id' ) - TanantIDcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'tenant_id' ) - Poolcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'allocation_pools' ) - - main.step( "Compare Subnet Data" ) - Cmpresult = IDcmpresult and TanantIDcmpresult and Poolcmpresult - utilities.assert_equals( - expect=True, - actual=Cmpresult, - onpass="Compare Success", - onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ - ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ - ",Pool compare:" + str( Poolcmpresult ) ) - - main.step( "Delete Subnet via HTTP" ) - deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='200', - actual=deletestatus, - onpass="Delete Network Success", - onfail="Delete Network Failed" ) - - if Cmpresult != True: - main.log.error( "Update Subnet compare failed" ) - - def CASE7( self, main ): - - """ - Test Delete Subnet - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Subnet Delete test Start" ) - main.case( "Virtual Network NBI Test - Subnet" ) - main.caseExplanation = "Test Subnet Delete NBI " +\ - "Verify Stored Data is Null after Delete" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - port = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - subnet = SubnetData() - subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" - subnet.tenant_id = network.tenant_id - subnet.network_id = network.id - - networkpostdata = network.DictoJson() - subnetpostdata = subnet.DictoJson() - - main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', - 'POST', None, networkpostdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Network Success", - onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Post Subnet Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', - 'POST', None, subnetpostdata ) - utilities.assert_equals( - expect='202', - actual=Poststatus, - onpass="Post Subnet Success", - onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Delete Subnet Data via HTTP" ) - Deletestatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='201', - actual=Deletestatus, - onpass="Delete Subnet Success", - onfail="Delete Subnet Failed " + str( Deletestatus ) + "," + str( result ) ) - - main.step( "Get Subnet Data is NULL" ) - Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', - 'GET', None, None ) - utilities.assert_equals( - expect='Subnet is not found', - actual=result, - onpass="Get Subnet Success", - onfail="Get Subnet Failed " + str( Getstatus ) + str( result ) ) - - if result != 'Subnet is not found': - main.log.error( "Delete Subnet failed" ) - - def CASE8( self, main ): - - """ - Test Post Port - """ - import os - - try: - from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData - from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData - from tests.FUNCvirNetNB.dependencies.Nbdata import VirtualPortData - except ImportError: - main.log.exception( "Something wrong with import file or code error." ) - main.log.info( "Import Error, please check!" ) - main.cleanup() - main.exit() - - main.log.info( "ONOS Port Post test Start" ) - main.case( "Virtual Network NBI Test - Port" ) - main.caseExplanation = "Test Port Post NBI " +\ - "Verify Stored Data is same with Post Data" - - ctrlip = os.getenv( main.params['CTRL']['ip1'] ) - httpport = main.params['HTTP']['port'] - path = main.params['HTTP']['path'] - - main.log.info( "Generate Post Data" ) - network = NetworkData() - network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' - network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' - subnet = SubnetData() - subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" - subnet.tenant_id = network.tenant_id - subnet.network_id = network.id - port = VirtualPortData() - port.id = "9352e05c-58b8-4f2c-b4df-c20435ser56466" - port.subnet_id = subnet.id - port.tenant_id = network.tenant_id - port.network_id = network.id - - networkpostdata = network.DictoJson() - subnetpostdata = subnet.DictoJson() - portpostdata = port.DictoJson() - - main.step( "Post Network Data via HTTP(Post port need post network)" ) - Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'networks/', - 'POST', None, networkpostdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Network Success", - onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Post Subnet Data via HTTP(Post port need post subnet)" ) - Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'subnets/', - 'POST', None, subnetpostdata ) - utilities.assert_equals( - expect='202', - actual=Poststatus, - onpass="Post Subnet Success", - onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Post Port Data via HTTP" ) - Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'ports/', - 'POST', None, portpostdata ) - utilities.assert_equals( - expect='200', - actual=Poststatus, - onpass="Post Port Success", - onfail="Post Port Failed " + str( Poststatus ) + "," + str( result ) ) - - main.step( "Get Port Data via HTTP" ) - Getstatus, result = main.ONOSrest.send( ctrlip, httpport, port.id, path + 'ports/', - 'GET', None, None ) - utilities.assert_equals( - expect='200', - actual=Getstatus, - onpass="Get Port Success", - onfail="Get Port Failed " + str( Getstatus ) + "," + str( result ) ) - - main.step( "Compare Post Port Data" ) - IDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'id' ) - TanantIDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'tenant_id' ) - NetoworkIDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'network_id' ) - fixedIpresult = subnet.JsonCompare( portpostdata, result, 'port', 'fixed_ips' ) - - Cmpresult = IDcmpresult and TanantIDcmpresult and NetoworkIDcmpresult and fixedIpresult - utilities.assert_equals( - expect=True, - actual=Cmpresult, - onpass="Compare Success", - onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ - ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ - ",Network id compare:" + str( NetoworkIDcmpresult ) +\ - ",FixIp compare:" + str( fixedIpresult ) ) - - main.step( "Clean Data via HTTP" ) - deletestatus,result = main.ONOSrest.send( ctrlip, httpport, network.id, path + 'networks/', - 'DELETE', None, None ) - utilities.assert_equals( - expect='200', - actual=deletestatus, - onpass="Delete Network Success", - onfail="Delete Network Failed" ) - - if Cmpresult != True: - main.log.error( "Post port compare failed" ) \ No newline at end of file diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo deleted file mode 100644 index fbe743b8..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo +++ /dev/null @@ -1,53 +0,0 @@ - - - - - localhost - admin - onos_test - OnosDriver - 1 - - - - - - localhost - admin - onos_test - OnosCliDriver - 2 - - - - - OC1 - sdn - rocks - OnosDriver - 3 - - - - - OC1 - sdn - rocks - OnosRestDriver - 4 - - - - - OCN - admin - onos_test - MininetCliDriver - 5 - - none - - - - - diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/__init__.py b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py deleted file mode 100644 index 9b3b9782..00000000 --- a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py +++ /dev/null @@ -1,212 +0,0 @@ -""" -This file provide the data -lanqinglong@huawei.com -""" -import json - -class NetworkData: - - def __init__(self): - self.id = '' - self.state = 'ACTIVE' - self.name = 'onosfw-1' - self.physicalNetwork = 'none' - self.admin_state_up = True - self.tenant_id = '' - self.routerExternal = False - self.type ='LOCAL' - self.segmentationID = '6' - self.shared = False - - def DictoJson(self): - - if self.id =='' or self.tenant_id == '': - print 'Id and tenant id is necessary!' - - Dicdata = {} - if self.id !='': - Dicdata['id'] = self.id - if self.state != '': - Dicdata['status'] = self.state - if self.name !='': - Dicdata['name'] = self.name - if self.physicalNetwork !='': - Dicdata['provider:physical_network'] = self.physicalNetwork - if self.admin_state_up !='': - Dicdata['admin_state_up'] = self.admin_state_up - if self.tenant_id !='': - Dicdata['tenant_id'] = self.tenant_id - if self.routerExternal !='': - Dicdata['router:external'] = self.routerExternal - if self.type !='': - Dicdata['provider:network_type'] = self.type - if self.segmentationID !='': - Dicdata['provider:segmentation_id'] = self.segmentationID - if self.shared !='': - Dicdata['shared'] = self.shared - - Dicdata = {'network': Dicdata} - - return json.dumps(Dicdata,indent=4) - - def Ordered(self,obj): - - if isinstance(obj, dict): - return sorted((k,self.Ordered(v)) for k, v in obj.items()) - if isinstance(obj, list): - return sorted(self.Ordered(x) for x in obj ) - else: - return obj - - def JsonCompare(self,SourceData,DestiData,FirstPara,SecondPara): - - try: - SourceCompareDataDic = json.loads(SourceData) - DestiCompareDataDic = json.loads(DestiData) - except ValueError: - print "SourceData or DestData is not JSON Type!" - return False - - try: - Socom = SourceCompareDataDic[FirstPara][SecondPara] - Decom = DestiCompareDataDic[FirstPara][SecondPara] - except KeyError,error: - print "Key error ,This key is not found:%s"%error - return False - - if str(Socom).lower()== str(Decom).lower(): - return True - else: - print "Source Compare data:"+FirstPara+"."+SecondPara+"="+str(Socom) - print "Dest Compare data: "+FirstPara+"."+SecondPara+"="+str(Decom) - return False - -class SubnetData(NetworkData): - - def __init__(self): - self.id = '' - self.tenant_id = '' - self.network_id = '' - self.nexthop = '192.168.1.1' - self.destination = '192.168.1.1/24' - self.start = '192.168.2.2' - self.end = '192.168.2.254' - self.ipv6_address_mode = 'DHCPV6_STATELESS' - self.ipv6_ra_mode = 'DHCPV6_STATELESS' - self.cidr = '192.168.1.1/24' - self.enable_dhcp = True - self.dns_nameservers = 'aaa' - self.gateway_ip = '192.168.2.1' - self.ip_version = '4' - self.shared = False - self.name = 'demo-subnet' - - def DictoJson(self): - if self.id =='' or self.tenant_id == '': - print 'Id and tenant id is necessary!' - - Dicdata = {} - host_routesdata = [] - host_routesdata.append({'nexthop': self.nexthop,'destination': self.destination}) - allocation_pools = [] - allocation_pools.append({'start': self.start,'end':self.end}) - - if self.id != '': - Dicdata['id'] = self.id - if self.network_id != '': - Dicdata['network_id'] = self.network_id - if self.name != '': - Dicdata['name'] = self.name - if self.nexthop != '': - Dicdata['host_routes'] = host_routesdata - if self.tenant_id != '': - Dicdata['tenant_id'] = self.tenant_id - if self.start != '': - Dicdata['allocation_pools'] = allocation_pools - if self.shared != '': - Dicdata['shared'] = self.shared - if self.ipv6_address_mode != '': - Dicdata['ipv6_address_mode'] = self.ipv6_address_mode - if self.ipv6_ra_mode != '': - Dicdata['ipv6_ra_mode'] = self.ipv6_ra_mode - if self.cidr != '': - Dicdata['cidr'] = self.cidr - if self.enable_dhcp != '': - Dicdata['enable_dhcp'] = self.enable_dhcp - if self.dns_nameservers != '': - Dicdata['dns_nameservers'] = self.dns_nameservers - if self.gateway_ip != '': - Dicdata['gateway_ip'] = self.gateway_ip - if self.ip_version != '': - Dicdata['ip_version'] = self.ip_version - - Dicdata = {'subnet': Dicdata} - - return json.dumps(Dicdata,indent=4) - -class VirtualPortData(NetworkData): - - def __init__(self): - self.id = '' - self.state = 'ACTIVE' - self.bindingHostId = 'fa:16:3e:76:8e:88' - self.allowedAddressPairs = [{'mac_address':'fa:16:3e:76:8e:88','ip_address':'192.168.1.1'}] - self.deviceOwner = 'none' - self.fixedIp = [] - self.securityGroups = [{'securityGroup':'asd'}] - self.adminStateUp = True - self.network_id = '' - self.tenant_id = '' - self.subnet_id = '' - self.bindingvifDetails = 'port_filter' - self.bindingvnicType = 'normal' - self.bindingvifType = 'ovs' - self.macAddress = 'fa:16:3e:76:8e:88' - self.deviceId = 'a08aa' - self.name = 'u' - - def DictoJson(self): - if self.id == '' or self.tenant_id == ' ' or \ - self.network_id == '' or self.subnet_id == '': - print 'Id/tenant id/networkid/subnetId is necessary!' - - Dicdata = {} - fixedIp =[] - fixedIp.append({'subnet_id':self.subnet_id,'ip_address':'192.168.1.4'}) - allocation_pools = [] - - if self.id != '': - Dicdata['id'] = self.id - if self.state != '': - Dicdata['status'] = self.state - if self.bindingHostId != '': - Dicdata['binding:host_id'] = self.bindingHostId - if self.allowedAddressPairs != '': - Dicdata['allowed_address_pairs'] = self.allowedAddressPairs - if self.deviceOwner != '': - Dicdata['device_owner'] = self.deviceOwner - if self.securityGroups != '': - Dicdata['security_groups'] = self.securityGroups - if self.adminStateUp != '': - Dicdata['admin_state_up'] = self.adminStateUp - if self.network_id != '': - Dicdata['network_id'] = self.network_id - if self.tenant_id != '': - Dicdata['tenant_id'] = self.tenant_id - if self.bindingvifDetails != '': - Dicdata['binding:vif_details'] = self.bindingvifDetails - if self.bindingvnicType != '': - Dicdata['binding:vnic_type'] = self.bindingvnicType - if self.bindingvifType != '': - Dicdata['binding:vif_type'] = self.bindingvifType - if self.macAddress != '': - Dicdata['mac_address'] = self.macAddress - if self.deviceId != '': - Dicdata['device_id'] = self.deviceId - if self.name != '': - Dicdata['name'] = self.name - - Dicdata['fixed_ips'] = fixedIp - Dicdata = {'port': Dicdata} - - return json.dumps(Dicdata,indent=4) \ No newline at end of file diff --git a/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py b/framework/scripts/function_test/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/framework/scripts/tests/Teston/Readme.txt b/framework/scripts/tests/Teston/Readme.txt new file mode 100644 index 00000000..7393f59a --- /dev/null +++ b/framework/scripts/tests/Teston/Readme.txt @@ -0,0 +1,5 @@ +1.This is a basic test run about onos,we will make them better and better +2.This test include two suites: +(1)Test northbound(network/subnet/ports create/update/delete) +(2)Ovsdb test,default configuration,openflow connection,vm go onlines. +3.Later we will make a framework to do this test \ No newline at end of file diff --git a/framework/scripts/tests/Teston/__init__.py b/framework/scripts/tests/Teston/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/adapters/__init__.py b/framework/scripts/tests/Teston/adapters/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/adapters/client.py b/framework/scripts/tests/Teston/adapters/client.py new file mode 100644 index 00000000..32e3749f --- /dev/null +++ b/framework/scripts/tests/Teston/adapters/client.py @@ -0,0 +1,69 @@ +""" +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/tests/Teston/adapters/connection.py b/framework/scripts/tests/Teston/adapters/connection.py new file mode 100644 index 00000000..f7f283ed --- /dev/null +++ b/framework/scripts/tests/Teston/adapters/connection.py @@ -0,0 +1,191 @@ +""" +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/tests/Teston/adapters/environment.py b/framework/scripts/tests/Teston/adapters/environment.py new file mode 100644 index 00000000..bdd0e122 --- /dev/null +++ b/framework/scripts/tests/Teston/adapters/environment.py @@ -0,0 +1,226 @@ +""" +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/tests/Teston/adapters/foundation.py b/framework/scripts/tests/Teston/adapters/foundation.py new file mode 100644 index 00000000..c909d36b --- /dev/null +++ b/framework/scripts/tests/Teston/adapters/foundation.py @@ -0,0 +1,64 @@ +""" +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 diff --git a/framework/scripts/tests/Teston/config.yaml b/framework/scripts/tests/Teston/config.yaml new file mode 100644 index 00000000..78afb01b --- /dev/null +++ b/framework/scripts/tests/Teston/config.yaml @@ -0,0 +1,16 @@ +ONOS: + general: + onosbench_username: 'root' + onosbench_password: 'root' + onoscli_username: 'root' + onoscli_password: 'root' + runtimeout: 300 + environment: + OCT: '189.42.8.99' + OC1: '189.42.8.101' + OC2: '189.42.8.102' + OC3: '189.42.8.103' + OCN: '189.42.8.104' + OCN2: '189.42.8.105' +results: + test_db_url: http://213.77.62.197 \ No newline at end of file diff --git a/framework/scripts/tests/Teston/dependencies/onos b/framework/scripts/tests/Teston/dependencies/onos new file mode 100644 index 00000000..d4d59e0f --- /dev/null +++ b/framework/scripts/tests/Teston/dependencies/onos @@ -0,0 +1,23 @@ +#!/bin/bash +# ----------------------------------------------------------------------------- +# ONOS remote command-line client. +# ----------------------------------------------------------------------------- + +[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 +. /root/.bashrc +. $ONOS_ROOT/tools/build/envDefaults +. $ONOS_ROOT/tools/test/bin/find-node.sh + +[ "$1" = "-w" ] && shift && onos-wait-for-start $1 + +[ -n "$1" ] && OCI=$(find_node $1) && shift + +if which client 1>/dev/null 2>&1 && [ -z "$ONOS_USE_SSH" ]; then + # Use Karaf client only if we can and are allowed to + unset KARAF_HOME + client -h $OCI -u karaf "$@" 2>/dev/null +else + # Otherwise use raw ssh; strict checking is off for dev environments only + #ssh -p 8101 -o StrictHostKeyChecking=no $OCI "$@" + sshpass -p karaf ssh -l karaf -p 8101 $OCI "$@" +fi diff --git a/framework/scripts/tests/Teston/log/temp.log b/framework/scripts/tests/Teston/log/temp.log new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/onosfunctest.py b/framework/scripts/tests/Teston/onosfunctest.py new file mode 100644 index 00000000..e8524430 --- /dev/null +++ b/framework/scripts/tests/Teston/onosfunctest.py @@ -0,0 +1,21 @@ +""" +Description: This test is to run onos Teston VTN scripts + +List of test cases: +CASE1 - Northbound NBI test network/subnet/ports +CASE2 - Ovsdb test&Default configuration&Vm go online + +lanqinglong@huawei.com +""" +from adapters.client import client + +if __name__=="__main__": + + main = client() + main.getdefaultpara() + + #scripts to run + runhandle = main.onosstart() + main.RunScript(runhandle, "FUNCvirNetNB") + main.RunScript(runhandle, "FUNCovsdbtest") + main.onosclean( runhandle ) diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params new file mode 100644 index 00000000..e1128284 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params @@ -0,0 +1,48 @@ + + # CASE - Description + # 1 - Compile ONOS and push it to the test machines + # 2 - Test ovsdb connection and tearDown + # 3 - Test default br-int configuration and vxlan port + # 4 - Test default openflow configuration + # 5 - Test default flows + # 6 - Configure Network Subnet Port + # 7 - Test host go online and ping each other + # 8 - Clear ovs configuration and host configuration + + 1,3,4,2,5,6,7,8 + + + /tests/FUNCovsdbtest/Dependency/ + + + + singlenode + drivers,openflow,proxyarp,mobility + + + + OC1 + 6653 + 6640 + + + + 5 #delaytime for ovsdb connection create and delete + + + + 8181 + /onos/vtn/ + + + + False + master + + + + OCN + OC1 + + + diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py new file mode 100644 index 00000000..1cb0ab20 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py @@ -0,0 +1,240 @@ +""" +Description: This test is to check onos set configuration and flows with ovsdb connection. + +List of test cases: +CASE1: Compile ONOS and push it to the test machines +CASE2: Test ovsdb connection and tearDown +CASE3: Test default br-int configuration and vxlan port +CASE4: Test default openflow configuration +CASE5: Test default flows +CASE6: Configure Network Subnet Port +CASE7: Test host go online and ping each other +CASE8: Clear ovs configuration and host configuration +zhanghaoyu7@huawei.com +""" +import os + +class FUNCovsdbtest: + + def __init__( self ): + self.default = '' + + def CASE1( self, main ): + """ + CASE1 is to compile ONOS and push it to the test machines + + Startup sequence: + cell + onos-verify-cell + NOTE: temporary - onos-remove-raft-logs + onos-uninstall + start mininet + git pull + mvn clean install + onos-package + onos-install -f + onos-wait-for-start + start cli sessions + start ovsdb + start vtn apps + """ + import os + main.log.info( "ONOS Single node start " + + "ovsdb test - initialization" ) + main.case( "Setting up test environment" ) + main.caseExplanation = "Setup the test environment including " +\ + "installing ONOS, start ONOS." + + # load some variables from the params file + PULLCODE = False + if main.params[ 'GIT' ][ 'pull' ] == 'True': + PULLCODE = True + gitBranch = main.params[ 'GIT' ][ 'branch' ] + cellName = main.params[ 'ENV' ][ 'cellName' ] + ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] ) + OVSDB1Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip1' ] ) + OVSDB2Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip2' ] ) + + main.step( "Create cell file" ) + cellAppString = main.params[ 'ENV' ][ 'cellApps' ] + main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName, + main.OVSDB1.ip_address, + cellAppString, ipList ) + + main.step( "Applying cell variable to environment" ) + cellResult = main.ONOSbench.setCell( cellName ) + verifyResult = main.ONOSbench.verifyCell() + + main.log.info( "Removing raft logs" ) + main.ONOSbench.onosRemoveRaftLogs() + + main.CLIs = [] + main.nodes = [] + main.numCtrls= 1 + + for i in range( 1, main.numCtrls + 1 ): + try: + main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) ) + main.nodes.append( getattr( main, 'ONOS' + str( i ) ) ) + ipList.append( main.nodes[ -1 ].ip_address ) + except AttributeError: + break + + main.log.info( "Uninstalling ONOS" ) + for node in main.nodes: + main.ONOSbench.onosUninstall( node.ip_address ) + + # Make sure ONOS process is not running + main.log.info( "Killing any ONOS processes" ) + killResults = main.TRUE + for node in main.nodes: + killed = main.ONOSbench.onosKill( node.ip_address ) + killResults = killResults and killed + + cleanInstallResult = main.TRUE + gitPullResult = main.TRUE + main.step( "Git checkout and pull" + gitBranch ) + if PULLCODE: + main.ONOSbench.gitCheckout( gitBranch ) + gitPullResult = main.ONOSbench.gitPull() + # values of 1 or 3 are good + utilities.assert_lesser( expect=0, actual=gitPullResult, + onpass="Git pull successful", + onfail="Git pull failed" ) + + main.ONOSbench.getVersion( report=True ) + + main.step( "Using mvn clean install" ) + cleanInstallResult = main.TRUE + if PULLCODE and gitPullResult == main.TRUE: + cleanInstallResult = main.ONOSbench.cleanInstall() + else: + main.log.warn( "Did not pull new code so skipping mvn" + + "clean install" ) + utilities.assert_equals( expect=main.TRUE, + actual=cleanInstallResult, + onpass="MCI successful", + onfail="MCI failed" ) + + main.step( "Creating ONOS package" ) + packageResult = main.ONOSbench.onosPackage() + utilities.assert_equals( expect=main.TRUE, + actual=packageResult, + onpass="Successfully created ONOS package", + onfail="Failed to create ONOS package" ) + + main.step( "Installing ONOS package" ) + onosInstallResult = main.ONOSbench.onosInstall( + options="-f", node=main.nodes[0].ip_address ) + utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult, + onpass="ONOS install successful", + onfail="ONOS install failed" ) + + main.step( "Checking if ONOS is up yet" ) + print main.nodes[0].ip_address + for i in range( 2 ): + onos1Isup = main.ONOSbench.isup( main.nodes[0].ip_address ) + if onos1Isup: + break + utilities.assert_equals( expect=main.TRUE, actual=onos1Isup, + onpass="ONOS startup successful", + onfail="ONOS startup failed" ) + main.log.step( "Starting ONOS CLI sessions" ) + print main.nodes[0].ip_address + cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address ) + utilities.assert_equals( expect=main.TRUE, actual=cliResults, + onpass="ONOS cli startup successful", + onfail="ONOS cli startup failed" ) + + main.step( "App Ids check" ) + appCheck = main.ONOScli1.appToIDCheck() + + if appCheck !=main.TRUE: + main.log.warn( main.CLIs[0].apps() ) + main.log.warn( main.CLIs[0].appIDs() ) + utilities.assert_equals( expect=main.TRUE, actual=appCheck, + onpass="App Ids seem to be correct", + onfail="Something is wrong with app Ids" ) + if cliResults == main.FALSE: + main.log.error( "Failed to start ONOS,stopping test" ) + main.cleanup() + main.exit() + + main.step( "Install onos-ovsdatabase" ) + installResults = main.ONOScli1.activateApp( "org.onosproject.ovsdb" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-ovsdatabase successful", + onfail="Install onos-ovsdatabase failed" ) + + main.step( "Install onos-app-vtnrsc" ) + installResults = main.ONOScli1.activateApp( "org.onosproject.vtnrsc" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-app-vtnrsc successful", + onfail="Install onos-app-vtnrsc failed" ) + + main.step( "Install onos-app-vtn" ) + installResults = main.ONOScli1.activateApp( "org.onosproject.vtn" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-app-vtn successful", + onfail="Install onos-app-vtn failed" ) + + main.step( "Install onos-app-vtnweb" ) + installResults = main.ONOScli1.activateApp( "org.onosproject.vtnweb" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-app-vtnweb successful", + onfail="Install onos-app-vtnweb failed" ) + + def CASE2( self, main ): + + """ + Test ovsdb connection and teardown + """ + import os,sys + import re + import time + + main.case( "Test ovsdb connection and teardown" ) + main.caseExplanation = "Test ovsdb connection create and delete" +\ + " over ovsdb node and onos node " + + ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] ) + ovsdbport = main.params[ 'CTRL' ][ 'ovsdbport' ] + delaytime = main.params[ 'TIMER' ][ 'delaytime' ] + + main.step( "Set ovsdb node manager" ) + assignResult = main.OVSDB1.setManager( ip=ctrlip, port=ovsdbport, delaytime=delaytime ) + stepResult = assignResult + utilities.assert_equals( expect=main.TRUE, + actual=stepResult, + onpass="Set ovsdb node manager sucess", + onfail="Set ovsdb node manager failed" ) + + main.step( "Check ovsdb node manager is " + str( ctrlip ) ) + response = main.OVSDB1.getManager() + if re.search( ctrlip, response ): + stepResult = main.TRUE + else: + stepResult = main.FALSE + utilities.assert_equals( expect=main.TRUE, + actual=stepResult, + onpass="Check ovsdb node manager is " + str( response ) , + onfail="Check ovsdb node manager failed" ) + + main.step( "Delete ovsdb node manager" ) + deleteResult = main.OVSDB1.delManager( delaytime=delaytime ) + stepResult = deleteResult + utilities.assert_equals( expect=main.TRUE, + actual=stepResult, + onpass="ovsdb node delete manager sucess", + onfail="ovsdb node delete manager failed" ) + + main.step( "Check ovsdb node delete manager " + str( ctrlip ) ) + response = main.OVSDB1.getManager() + if not re.search( ctrlip, response ): + stepResult = main.TRUE + else: + stepResult = main.FALSE + utilities.assert_equals( expect=main.TRUE, + actual=stepResult, + onpass="Check ovsdb node delete manager sucess", + onfail="Check ovsdb node delete manager failed" ) diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo new file mode 100644 index 00000000..ae748d2e --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo @@ -0,0 +1,60 @@ + + + + + OCN + admin + + OnosDriver + 1 + + + + + + OCN + admin + + OnosCliDriver + 2 + + + + + OC1 + sdn + + OnosDriver + 3 + + + + + OC1 + sdn + + OnosRestDriver + 4 + + + + + OCN + admin + + OvsdbDriver + 5 + + + + + OC1 + sdn + + OvsdbDriver + 6 + + + + + diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/__init__.py b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py new file mode 100644 index 00000000..3fde20db --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py @@ -0,0 +1,212 @@ +""" +This file provide the data +lanqinglong@huawei.com +""" +import json + +class NetworkData: + + def __init__(self): + self.id = '' + self.state = 'ACTIVE' + self.name = 'onosfw-1' + self.physicalNetwork = 'none' + self.admin_state_up = True + self.tenant_id = '' + self.routerExternal = False + self.type ='LOCAL' + self.segmentationID = '6' + self.shared = False + + def DictoJson(self): + + if self.id =='' or self.tenant_id == '': + print 'Id and tenant id is necessary!' + + Dicdata = {} + if self.id !='': + Dicdata['id'] = self.id + if self.state != '': + Dicdata['status'] = self.state + if self.name !='': + Dicdata['name'] = self.name + if self.physicalNetwork !='': + Dicdata['provider:physical_network'] = self.physicalNetwork + if self.admin_state_up !='': + Dicdata['admin_state_up'] = self.admin_state_up + if self.tenant_id !='': + Dicdata['tenant_id'] = self.tenant_id + if self.routerExternal !='': + Dicdata['router:external'] = self.routerExternal + if self.type !='': + Dicdata['provider:network_type'] = self.type + if self.segmentationID !='': + Dicdata['provider:segmentation_id'] = self.segmentationID + if self.shared !='': + Dicdata['shared'] = self.shared + + Dicdata = {'network': Dicdata} + + return json.dumps(Dicdata,indent=4) + + def Ordered(self,obj): + + if isinstance(obj, dict): + return sorted((k,self.Ordered(v)) for k, v in obj.items()) + if isinstance(obj, list): + return sorted(self.Ordered(x) for x in obj ) + else: + return obj + + def JsonCompare(self,SourceData,DestiData,FirstPara,SecondPara): + + try: + SourceCompareDataDic = json.loads(SourceData) + DestiCompareDataDic = json.loads(DestiData) + except ValueError: + print "SourceData or DestData is not JSON Type!" + return False + + try: + Socom = SourceCompareDataDic[FirstPara][SecondPara] + Decom = DestiCompareDataDic[FirstPara][SecondPara] + except KeyError,error: + print "Key error ,This key is not found:%s"%error + return False + + if str(Socom).lower()== str(Decom).lower(): + return True + else: + print "Source Compare data:"+FirstPara+"."+SecondPara+"="+str(Socom) + print "Dest Compare data: "+FirstPara+"."+SecondPara+"="+str(Decom) + return False + +class SubnetData(NetworkData): + + def __init__(self): + self.id = '' + self.tenant_id = '' + self.network_id = '' + self.nexthop = '192.168.1.1' + self.destination = '192.168.1.1/24' + self.start = '192.168.2.2' + self.end = '192.168.2.254' + self.ipv6_address_mode = 'DHCPV6_STATELESS' + self.ipv6_ra_mode = 'DHCPV6_STATELESS' + self.cidr = '192.168.1.1/24' + self.enable_dhcp = True + self.dns_nameservers = 'aaa' + self.gateway_ip = '192.168.2.1' + self.ip_version = '4' + self.shared = False + self.name = 'demo-subnet' + + def DictoJson(self): + if self.id =='' or self.tenant_id == '': + print 'Id and tenant id is necessary!' + + Dicdata = {} + host_routesdata = [] + host_routesdata.append({'nexthop': self.nexthop,'destination': self.destination}) + allocation_pools = [] + allocation_pools.append({'start': self.start,'end':self.end}) + + if self.id != '': + Dicdata['id'] = self.id + if self.network_id != '': + Dicdata['network_id'] = self.network_id + if self.name != '': + Dicdata['name'] = self.name + if self.nexthop != '': + Dicdata['host_routes'] = host_routesdata + if self.tenant_id != '': + Dicdata['tenant_id'] = self.tenant_id + if self.start != '': + Dicdata['allocation_pools'] = allocation_pools + if self.shared != '': + Dicdata['shared'] = self.shared + if self.ipv6_address_mode != '': + Dicdata['ipv6_address_mode'] = self.ipv6_address_mode + if self.ipv6_ra_mode != '': + Dicdata['ipv6_ra_mode'] = self.ipv6_ra_mode + if self.cidr != '': + Dicdata['cidr'] = self.cidr + if self.enable_dhcp != '': + Dicdata['enable_dhcp'] = self.enable_dhcp + if self.dns_nameservers != '': + Dicdata['dns_nameservers'] = self.dns_nameservers + if self.gateway_ip != '': + Dicdata['gateway_ip'] = self.gateway_ip + if self.ip_version != '': + Dicdata['ip_version'] = self.ip_version + + Dicdata = {'subnet': Dicdata} + + return json.dumps(Dicdata,indent=4) + +class VirtualPortData(NetworkData): + + def __init__(self): + self.id = '' + self.state = 'ACTIVE' + self.bindingHostId = 'fa:16:3e:76:8e:88' + self.allowedAddressPairs = [{'mac_address':'fa:16:3e:76:8e:88','ip_address':'192.168.1.1'}] + self.deviceOwner = 'none' + self.fixedIp = [] + self.securityGroups = [{'securityGroup':'asd'}] + self.adminStateUp = True + self.network_id = '' + self.tenant_id = '' + self.subnet_id = '' + self.bindingvifDetails = 'port_filter' + self.bindingvnicType = 'normal' + self.bindingvifType = 'ovs' + self.macAddress = 'fa:16:3e:76:8e:88' + self.deviceId = 'a08aa' + self.name = 'u' + + def DictoJson(self): + if self.id == '' or self.tenant_id == ' ' or \ + self.network_id == '' or self.subnet_id == '': + print 'Id/tenant id/networkid/subnetId is necessary!' + + Dicdata = {} + fixedIp =[] + fixedIp.append({'subnet_id':self.subnet_id,'ip_address':'192.168.1.4'}) + allocation_pools = [] + + if self.id != '': + Dicdata['id'] = self.id + if self.state != '': + Dicdata['status'] = self.state + if self.bindingHostId != '': + Dicdata['binding:host_id'] = self.bindingHostId + if self.allowedAddressPairs != '': + Dicdata['allowed_address_pairs'] = self.allowedAddressPairs + if self.deviceOwner != '': + Dicdata['device_owner'] = self.deviceOwner + if self.securityGroups != '': + Dicdata['security_groups'] = self.securityGroups + if self.adminStateUp != '': + Dicdata['admin_state_up'] = self.adminStateUp + if self.network_id != '': + Dicdata['network_id'] = self.network_id + if self.tenant_id != '': + Dicdata['tenant_id'] = self.tenant_id + if self.bindingvifDetails != '': + Dicdata['binding:vif_details'] = self.bindingvifDetails + if self.bindingvnicType != '': + Dicdata['binding:vnic_type'] = self.bindingvnicType + if self.bindingvifType != '': + Dicdata['binding:vif_type'] = self.bindingvifType + if self.macAddress != '': + Dicdata['mac_address'] = self.macAddress + if self.deviceId != '': + Dicdata['device_id'] = self.deviceId + if self.name != '': + Dicdata['name'] = self.name + + Dicdata['fixed_ips'] = fixedIp + Dicdata = {'port': Dicdata} + + return json.dumps(Dicdata,indent=4) diff --git a/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params new file mode 100644 index 00000000..a922e751 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params @@ -0,0 +1,45 @@ + + # CASE - Description + # 1 - Variable initialization and optional pull and build ONOS package + # 2 - Create Network northbound test + # 3 - Update Network northbound test + # 4 - Delete Network northbound test + # 5 - Create Subnet northbound test + # 6 - Update Subnet northbound test + # 7 - Delete Subnet northbound test + # 8 - Create Virtualport northbound test + # 9 - Update Virtualport northbound test + #10 - Delete Virtualport northbound test + + 1,2,3,4,5,6,7,8,9,10 + + + 15 + + + + singlenode + drivers,openflow,proxyarp,mobility + + + + OC1 + 6653 + + + + 8181 + /onos/vtn/ + + + + False + master + + + + 7 + 20 + + + diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py new file mode 100644 index 00000000..4ea8a359 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py @@ -0,0 +1,795 @@ +""" +Description: This test is to determine if North bound + can handle the request + +List of test cases: +CASE1 - Variable initialization and optional pull and build ONOS package +CASE2 - Create Network northbound test +CASE3 - Update Network northbound test +CASE4 - Delete Network northbound test +CASE5 - Create Subnet northbound test +CASE6 - Update Subnet northbound test +CASE7 - Delete Subnet northbound test +CASE8 - Create Virtualport northbound test +CASE9 - Update Virtualport northbound test +CASE10 - Delete Virtualport northbound test +CASE11 - Post Error Json Create Network test +CASE12 - Post Error Json Create Subnet test +CASE13 - Post Error Json Create Virtualport test + +lanqinglong@huawei.com +""" +import os + +class FUNCvirNetNB: + + def __init__( self ): + self.default = '' + + def CASE1( self, main ): + """ + CASE1 is to compile ONOS and push it to the test machines + + Startup sequence: + cell + onos-verify-cell + NOTE:temporary - onos-remove-raft-logs + onos-uninstall + git pull + mvn clean install + onos-package + onos-install -f + onos-wait-for-start + start cli sessions + start vtnrsc + """ + + import time + import os + main.log.info( "ONOS Single node Start "+ + "VirtualNet Northbound test - initialization" ) + main.case( "Setting up test environment" ) + main.caseExplanation = "Setup the test environment including "+\ + "installing ONOS,start ONOS." + + # load some variables from the params file + PULLCODE = False + if main.params['GIT']['pull'] =='True': + PULLCODE = True + gitBranch = main.params['GIT']['branch'] + cellName = main.params['ENV']['cellName'] + ipList = os.getenv( main.params['CTRL']['ip1'] ) + + main.step("Create cell file and apply to environment") + cellAppString = main.params['ENV']['cellApps'] + main.ONOSbench.createCellFile(main.ONOSbench.ip_address,cellName, + main.Mininet1.ip_address, + cellAppString,ipList ) + + cellResult = main.ONOSbench.setCell(cellName) + verifyResult = main.ONOSbench.verifyCell() + + stepResult = cellResult and verifyResult + utilities.assert_equals( expect=main.TRUE, + actual=stepResult, + onpass="Successfully applied cell to " + \ + "environment", + onfail="Failed to apply cell to environment " ) + + #FIXME:this is short term fix + main.log.info( "Removing raft logs" ) + main.ONOSbench.onosRemoveRaftLogs() + + main.CLIs = [] + main.nodes = [] + main.numCtrls=1 + main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] ) + + for i in range ( 1, main.numCtrls +1): + try: + main.CLIs.append( getattr( main, 'ONOScli' + str(i) ) ) + main.nodes.append( getattr( main, 'ONOS' + str(i) ) ) + ipList.append( main.nodes[ -1 ].ip_address ) + except AttributeError: + break + + main.log.info( "Uninstalling ONOS" ) + for node in main.nodes: + main.ONOSbench.onosUninstall( node.ip_address ) + + #Make sure ONOS is DEAD + main.log.info( "Killing any ONOS processes" ) + killResults = main.TRUE + for node in main.nodes: + killed = main.ONOSbench.onosKill( node.ip_address ) + killResults = killResults and killed + + cleanInstallResult = main.TRUE + gitPullResult = main.TRUE + main.log.info( "Git checkout and pull " + gitBranch ) + if PULLCODE: + main.ONOSbench.gitCheckout ( gitBranch ) + gitPullResult = main.ONOSbench.gitPull() + # values of 1 or 3 are good + utilities.assert_lesser ( expect=0, actual=gitPullResult, + onpass="Git pull successful", + onfail ="Git pull failed" ) + main.ONOSbench.getVersion( report =True ) + main.step( "Using mvn clean install" ) + cleanInstallResult= main.TRUE + if PULLCODE and gitPullResult == main.TRUE: + cleanInstallResult = main.ONOSbench.cleanInstall() + else: + main.log.warn("Did not pull new code so skipping mvn "+ + "clean install") + + utilities.assert_equals( expect=main.TRUE, + actual=cleanInstallResult, + onpass="MCI successful", + onfail="MCI failed" ) + + main.step( "Creating ONOS package" ) + packageResult = main.ONOSbench.onosPackage() + utilities.assert_equals( expect=main.TRUE, + actual=packageResult, + onpass="Successfully created ONOS package", + onfail="Failed to create ONOS package " ) + time.sleep( main.startUpSleep ) + + main.step( "Installing ONOS package" ) + onosInstallResult = main.ONOSbench.onosInstall( + options="-f",node=main.nodes[0].ip_address ) + utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult, + onpass="ONOS install successful", + onfail="ONOS install failed" ) + time.sleep( main.startUpSleep ) + + main.step( "Checking if ONOS is up yet" ) + + for i in range( 2 ): + onos1Isup = main.ONOSbench.isup( main.nodes[0].ip_address ) + if onos1Isup: + break + utilities.assert_equals( expect=main.TRUE, actual=onos1Isup, + onpass="ONOS startup successful", + onfail="ONOS startup failed" ) + time.sleep( main.startUpSleep ) + + main.log.step( "Starting ONOS CLI sessions" ) + + print main.nodes[0].ip_address + cliResults = main.ONOScli1.startOnosCli(main.nodes[0].ip_address) + utilities.assert_equals( expect=main.TRUE, actual=cliResults, + onpass="ONOS cli startup successful", + onfail="ONOS cli startup failed" ) + time.sleep( main.startUpSleep ) + + main.step( "App Ids check" ) + appCheck = main.ONOScli1.appToIDCheck() + if appCheck != main.TRUE: + main.log.warn( main.CLIs[0].apps() ) + main.log.warn( main.CLIs[0].appIDs() ) + utilities.assert_equals( expect=main.TRUE, actual=appCheck, + onpass="App Ids seem to be correct", + onfail="Something is wrong with app Ids" ) + + if cliResults == main.FALSE: + main.log.error( "Failed to start ONOS, stopping test" ) + main.cleanup() + main.exit() + + main.step( "Install onos-app-vtnrsc app" ) + installResults = main.ONOScli1.featureInstall( "onos-app-vtnrsc" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-app-vtnrsc successful", + onfail="Install onos-app-vtnrsc app failed" ) + + time.sleep( main.startUpSleep ) + + main.step( "Install onos-app-vtnweb app" ) + installResults = main.ONOScli1.featureInstall( "onos-app-vtnweb" ) + utilities.assert_equals( expect=main.TRUE, actual=installResults, + onpass="Install onos-app-vtnweb successful", + onfail="Install onos-app-vtnweb app failed" ) + + time.sleep( main.startUpSleep ) + + def CASE2 ( self,main ): + + """ + Test Post Network + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Network Post test Start" ) + main.case( "Virtual Network NBI Test - Network" ) + main.caseExplanation = "Test Network Post NBI " +\ + "Verify Post Data same with Stored Data" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + postdata = network.DictoJson() + + main.step( "Post Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path+'networks/', + 'POST', None, postdata) + + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Success", + onfail="Post Failed " + str( Poststatus ) + str( result ) ) + + main.step( "Get Data via HTTP" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'GET', None, None) + utilities.assert_equals( + expect='200', + actual=Getstatus, + onpass="Get Success", + onfail="Get Failed " + str( Getstatus ) + str( result ) ) + + main.log.info("Post Network Data is :%s\nGet Network Data is:%s"%(postdata,result)) + + main.step( "Compare Send Id and Get Id" ) + IDcmpresult = network.JsonCompare( postdata, result, 'network', 'id' ) + TanantIDcmpresult = network.JsonCompare( postdata, result, 'network', 'tenant_id' ) + Cmpresult = IDcmpresult and TanantIDcmpresult + + utilities.assert_equals( + expect=True, + actual=Cmpresult, + onpass="Compare Success", + onfail="Compare Failed:ID compare: " + str( IDcmpresult ) + \ + ",Tenant id compare :" + str( TanantIDcmpresult ) ) + + deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='200', + actual=deletestatus, + onpass="Delete Network Success", + onfail="Delete Network Failed") + + if Cmpresult != True: + main.log.error( "Post Network compare failed" ) + + def CASE3( self,main ): + + """ + Test Update Network + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Network Update test Start" ) + main.case( "Virtual Network NBI Test - Network" ) + main.caseExplanation = "Test Network Update NBI " +\ + "Verify Update Data same with Stored Data" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + network.shared = False + postdata = network.DictoJson() + + network.shared = True + postdatanew = network.DictoJson() + + main.step( "Post Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path+'networks', + 'POST', None, postdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Success", + onfail="Post Failed " + str( Poststatus ) + str( result ) ) + + main.step( "Update Data via HTTP" ) + Updatestatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'PUT', None, postdatanew) + utilities.assert_equals( + expect='200', + actual=Updatestatus, + onpass="Update Success", + onfail="Update Failed " + str( Updatestatus ) + str( result ) ) + + main.step( "Get Data via HTTP" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'GET', None, None ) + utilities.assert_equals( + expect='200', + actual=Getstatus, + onpass="Get Success", + onfail="Get Failed " + str( Getstatus ) + str( result ) ) + + main.step( "Compare Update data." ) + IDcmpresult = network.JsonCompare( postdatanew, result, 'network', 'id' ) + TanantIDcmpresult = network.JsonCompare( postdatanew, result, 'network', 'tenant_id' ) + Shareresult = network.JsonCompare( postdatanew, result, 'network', 'shared' ) + + Cmpresult = IDcmpresult and TanantIDcmpresult and Shareresult + utilities.assert_equals( + expect=True, + actual=Cmpresult, + onpass="Compare Success", + onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ + ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ + ",Name compare:" + str( Shareresult ) ) + + deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'DELETE', None, None ) + + utilities.assert_equals( + expect='200', + actual=deletestatus, + onpass="Delete Network Success", + onfail="Delete Network Failed" ) + + if Cmpresult != True: + main.log.error( "Update Network compare failed" ) + + def CASE4( self,main ): + + """ + Test Delete Network + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Network Delete test Start" ) + main.case( "Virtual Network NBI Test - Network" ) + main.caseExplanation = "Test Network Delete NBI " +\ + "Verify Stored Data is NULL after Delete" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + postdata = network.DictoJson() + + main.step( "Post Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', + 'POST', None, postdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Success", + onfail="Post Failed " + str( Poststatus ) + str( result ) ) + + main.step( "Delete Data via HTTP" ) + Deletestatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='200', + actual=Deletestatus, + onpass="Delete Success", + onfail="Delete Failed " + str( Deletestatus ) + str( result ) ) + + main.step( "Get Data is NULL" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'GET', None, None ) + utilities.assert_equals( + expect='Network is not found', + actual=result, + onpass="Get Success", + onfail="Get Failed " + str( Getstatus ) + str( result ) ) + + if result != 'Network is not found': + main.log.error( "Delete Network failed" ) + + def CASE5( self, main ): + + """ + Test Post Subnet + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Subnet Post test Start" ) + main.case( "Virtual Network NBI Test - Subnet" ) + main.caseExplanation = "Test Subnet Post NBI " +\ + "Verify Stored Data is same with Post Data" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + subnet = SubnetData() + subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" + subnet.tenant_id = network.tenant_id + subnet.network_id = network.id + + networkpostdata = network.DictoJson() + subnetpostdata = subnet.DictoJson() + + main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', + 'POST', None, networkpostdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Network Success", + onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Post Subnet Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', + 'POST', None, subnetpostdata ) + utilities.assert_equals( + expect='202', + actual=Poststatus, + onpass="Post Subnet Success", + onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Get Subnet Data via HTTP" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', + 'GET', None, None ) + utilities.assert_equals( + expect='200', + actual=Getstatus, + onpass="Get Subnet Success", + onfail="Get Subnet Failed " + str( Getstatus ) + "," + str( result ) ) + + IDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'id' ) + TanantIDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'tenant_id' ) + NetoworkIDcmpresult = subnet.JsonCompare( subnetpostdata, result, 'subnet', 'network_id' ) + + main.step( "Compare Post Subnet Data via HTTP" ) + Cmpresult = IDcmpresult and TanantIDcmpresult and NetoworkIDcmpresult + utilities.assert_equals( + expect=True, + actual=Cmpresult, + onpass="Compare Success", + onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ + ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ + ",Network id compare:" + str( NetoworkIDcmpresult ) ) + + deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='200', + actual=deletestatus, + onpass="Delete Network Success", + onfail="Delete Network Failed" ) + + if Cmpresult != True: + main.log.error( "Post Subnet compare failed" ) + + def CASE6( self, main ): + + """ + Test Post Subnet + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Subnet Update test Start" ) + main.case( "Virtual Network NBI Test - Subnet" ) + main.caseExplanation = "Test Subnet Update NBI " +\ + "Verify Stored Data is same with Update Data" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + subnet = SubnetData() + subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" + subnet.tenant_id = network.tenant_id + subnet.network_id = network.id + subnet.start = "192.168.2.1" + subnet.end = "192.168.2.255" + networkpostdata = network.DictoJson() + subnetpostdata = subnet.DictoJson() + + #Change allocation_poolsdata scope + subnet.start = "192.168.102.1" + subnet.end = "192.168.102.255" + #end change + newsubnetpostdata = subnet.DictoJson() + + main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', + 'POST', None, networkpostdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Network Success", + onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Post Subnet Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', + 'POST', None, subnetpostdata ) + utilities.assert_equals( + expect='202', + actual=Poststatus, + onpass="Post Subnet Success", + onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Update Subnet Data via HTTP" ) + Putstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', + 'PUT', None, newsubnetpostdata ) + utilities.assert_equals( + expect='203', + actual=Putstatus, + onpass="Update Subnet Success", + onfail="Update Subnet Failed " + str( Putstatus ) + "," + str( result ) ) + + main.step( "Get Subnet Data via HTTP" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', + 'GET', None, None ) + utilities.assert_equals( + expect='200', + actual=Getstatus, + onpass="Get Subnet Success", + onfail="Get Subnet Failed " + str( Getstatus ) + "," + str( result ) ) + + IDcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'id' ) + TanantIDcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'tenant_id' ) + Poolcmpresult = subnet.JsonCompare( newsubnetpostdata, result, 'subnet', 'allocation_pools' ) + + main.step( "Compare Subnet Data" ) + Cmpresult = IDcmpresult and TanantIDcmpresult and Poolcmpresult + utilities.assert_equals( + expect=True, + actual=Cmpresult, + onpass="Compare Success", + onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ + ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ + ",Pool compare:" + str( Poolcmpresult ) ) + + main.step( "Delete Subnet via HTTP" ) + deletestatus,result = main.ONOSrest.send( ctrlip, port, network.id, path+'networks/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='200', + actual=deletestatus, + onpass="Delete Network Success", + onfail="Delete Network Failed" ) + + if Cmpresult != True: + main.log.error( "Update Subnet compare failed" ) + + def CASE7( self, main ): + + """ + Test Delete Subnet + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Subnet Delete test Start" ) + main.case( "Virtual Network NBI Test - Subnet" ) + main.caseExplanation = "Test Subnet Delete NBI " +\ + "Verify Stored Data is Null after Delete" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + port = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + subnet = SubnetData() + subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" + subnet.tenant_id = network.tenant_id + subnet.network_id = network.id + + networkpostdata = network.DictoJson() + subnetpostdata = subnet.DictoJson() + + main.step( "Post Network Data via HTTP(Post Subnet need post network)" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'networks/', + 'POST', None, networkpostdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Network Success", + onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Post Subnet Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, port, '', path + 'subnets/', + 'POST', None, subnetpostdata ) + utilities.assert_equals( + expect='202', + actual=Poststatus, + onpass="Post Subnet Success", + onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Delete Subnet Data via HTTP" ) + Deletestatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='201', + actual=Deletestatus, + onpass="Delete Subnet Success", + onfail="Delete Subnet Failed " + str( Deletestatus ) + "," + str( result ) ) + + main.step( "Get Subnet Data is NULL" ) + Getstatus, result = main.ONOSrest.send( ctrlip, port, subnet.id, path + 'subnets/', + 'GET', None, None ) + utilities.assert_equals( + expect='Subnet is not found', + actual=result, + onpass="Get Subnet Success", + onfail="Get Subnet Failed " + str( Getstatus ) + str( result ) ) + + if result != 'Subnet is not found': + main.log.error( "Delete Subnet failed" ) + + def CASE8( self, main ): + + """ + Test Post Port + """ + import os + + try: + from tests.FUNCvirNetNB.dependencies.Nbdata import NetworkData + from tests.FUNCvirNetNB.dependencies.Nbdata import SubnetData + from tests.FUNCvirNetNB.dependencies.Nbdata import VirtualPortData + except ImportError: + main.log.exception( "Something wrong with import file or code error." ) + main.log.info( "Import Error, please check!" ) + main.cleanup() + main.exit() + + main.log.info( "ONOS Port Post test Start" ) + main.case( "Virtual Network NBI Test - Port" ) + main.caseExplanation = "Test Port Post NBI " +\ + "Verify Stored Data is same with Post Data" + + ctrlip = os.getenv( main.params['CTRL']['ip1'] ) + httpport = main.params['HTTP']['port'] + path = main.params['HTTP']['path'] + + main.log.info( "Generate Post Data" ) + network = NetworkData() + network.id = '030d6d3d-fa36-45bf-ae2b-4f4bc43a54dc' + network.tenant_id = '26cd996094344a0598b0a1af1d525cdc' + subnet = SubnetData() + subnet.id = "e44bd655-e22c-4aeb-b1e9-ea1606875178" + subnet.tenant_id = network.tenant_id + subnet.network_id = network.id + port = VirtualPortData() + port.id = "9352e05c-58b8-4f2c-b4df-c20435ser56466" + port.subnet_id = subnet.id + port.tenant_id = network.tenant_id + port.network_id = network.id + + networkpostdata = network.DictoJson() + subnetpostdata = subnet.DictoJson() + portpostdata = port.DictoJson() + + main.step( "Post Network Data via HTTP(Post port need post network)" ) + Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'networks/', + 'POST', None, networkpostdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Network Success", + onfail="Post Network Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Post Subnet Data via HTTP(Post port need post subnet)" ) + Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'subnets/', + 'POST', None, subnetpostdata ) + utilities.assert_equals( + expect='202', + actual=Poststatus, + onpass="Post Subnet Success", + onfail="Post Subnet Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Post Port Data via HTTP" ) + Poststatus, result = main.ONOSrest.send( ctrlip, httpport, '', path + 'ports/', + 'POST', None, portpostdata ) + utilities.assert_equals( + expect='200', + actual=Poststatus, + onpass="Post Port Success", + onfail="Post Port Failed " + str( Poststatus ) + "," + str( result ) ) + + main.step( "Get Port Data via HTTP" ) + Getstatus, result = main.ONOSrest.send( ctrlip, httpport, port.id, path + 'ports/', + 'GET', None, None ) + utilities.assert_equals( + expect='200', + actual=Getstatus, + onpass="Get Port Success", + onfail="Get Port Failed " + str( Getstatus ) + "," + str( result ) ) + + main.step( "Compare Post Port Data" ) + IDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'id' ) + TanantIDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'tenant_id' ) + NetoworkIDcmpresult = subnet.JsonCompare( portpostdata, result, 'port', 'network_id' ) + fixedIpresult = subnet.JsonCompare( portpostdata, result, 'port', 'fixed_ips' ) + + Cmpresult = IDcmpresult and TanantIDcmpresult and NetoworkIDcmpresult and fixedIpresult + utilities.assert_equals( + expect=True, + actual=Cmpresult, + onpass="Compare Success", + onfail="Compare Failed:ID compare:" + str( IDcmpresult ) + \ + ",Tenant id compare:"+ str( TanantIDcmpresult ) + \ + ",Network id compare:" + str( NetoworkIDcmpresult ) +\ + ",FixIp compare:" + str( fixedIpresult ) ) + + main.step( "Clean Data via HTTP" ) + deletestatus,result = main.ONOSrest.send( ctrlip, httpport, network.id, path + 'networks/', + 'DELETE', None, None ) + utilities.assert_equals( + expect='200', + actual=deletestatus, + onpass="Delete Network Success", + onfail="Delete Network Failed" ) + + if Cmpresult != True: + main.log.error( "Post port compare failed" ) \ No newline at end of file diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo new file mode 100644 index 00000000..fbe743b8 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo @@ -0,0 +1,53 @@ + + + + + localhost + admin + onos_test + OnosDriver + 1 + + + + + + localhost + admin + onos_test + OnosCliDriver + 2 + + + + + OC1 + sdn + rocks + OnosDriver + 3 + + + + + OC1 + sdn + rocks + OnosRestDriver + 4 + + + + + OCN + admin + onos_test + MininetCliDriver + 5 + + none + + + + + diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/__init__.py b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py new file mode 100644 index 00000000..9b3b9782 --- /dev/null +++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py @@ -0,0 +1,212 @@ +""" +This file provide the data +lanqinglong@huawei.com +""" +import json + +class NetworkData: + + def __init__(self): + self.id = '' + self.state = 'ACTIVE' + self.name = 'onosfw-1' + self.physicalNetwork = 'none' + self.admin_state_up = True + self.tenant_id = '' + self.routerExternal = False + self.type ='LOCAL' + self.segmentationID = '6' + self.shared = False + + def DictoJson(self): + + if self.id =='' or self.tenant_id == '': + print 'Id and tenant id is necessary!' + + Dicdata = {} + if self.id !='': + Dicdata['id'] = self.id + if self.state != '': + Dicdata['status'] = self.state + if self.name !='': + Dicdata['name'] = self.name + if self.physicalNetwork !='': + Dicdata['provider:physical_network'] = self.physicalNetwork + if self.admin_state_up !='': + Dicdata['admin_state_up'] = self.admin_state_up + if self.tenant_id !='': + Dicdata['tenant_id'] = self.tenant_id + if self.routerExternal !='': + Dicdata['router:external'] = self.routerExternal + if self.type !='': + Dicdata['provider:network_type'] = self.type + if self.segmentationID !='': + Dicdata['provider:segmentation_id'] = self.segmentationID + if self.shared !='': + Dicdata['shared'] = self.shared + + Dicdata = {'network': Dicdata} + + return json.dumps(Dicdata,indent=4) + + def Ordered(self,obj): + + if isinstance(obj, dict): + return sorted((k,self.Ordered(v)) for k, v in obj.items()) + if isinstance(obj, list): + return sorted(self.Ordered(x) for x in obj ) + else: + return obj + + def JsonCompare(self,SourceData,DestiData,FirstPara,SecondPara): + + try: + SourceCompareDataDic = json.loads(SourceData) + DestiCompareDataDic = json.loads(DestiData) + except ValueError: + print "SourceData or DestData is not JSON Type!" + return False + + try: + Socom = SourceCompareDataDic[FirstPara][SecondPara] + Decom = DestiCompareDataDic[FirstPara][SecondPara] + except KeyError,error: + print "Key error ,This key is not found:%s"%error + return False + + if str(Socom).lower()== str(Decom).lower(): + return True + else: + print "Source Compare data:"+FirstPara+"."+SecondPara+"="+str(Socom) + print "Dest Compare data: "+FirstPara+"."+SecondPara+"="+str(Decom) + return False + +class SubnetData(NetworkData): + + def __init__(self): + self.id = '' + self.tenant_id = '' + self.network_id = '' + self.nexthop = '192.168.1.1' + self.destination = '192.168.1.1/24' + self.start = '192.168.2.2' + self.end = '192.168.2.254' + self.ipv6_address_mode = 'DHCPV6_STATELESS' + self.ipv6_ra_mode = 'DHCPV6_STATELESS' + self.cidr = '192.168.1.1/24' + self.enable_dhcp = True + self.dns_nameservers = 'aaa' + self.gateway_ip = '192.168.2.1' + self.ip_version = '4' + self.shared = False + self.name = 'demo-subnet' + + def DictoJson(self): + if self.id =='' or self.tenant_id == '': + print 'Id and tenant id is necessary!' + + Dicdata = {} + host_routesdata = [] + host_routesdata.append({'nexthop': self.nexthop,'destination': self.destination}) + allocation_pools = [] + allocation_pools.append({'start': self.start,'end':self.end}) + + if self.id != '': + Dicdata['id'] = self.id + if self.network_id != '': + Dicdata['network_id'] = self.network_id + if self.name != '': + Dicdata['name'] = self.name + if self.nexthop != '': + Dicdata['host_routes'] = host_routesdata + if self.tenant_id != '': + Dicdata['tenant_id'] = self.tenant_id + if self.start != '': + Dicdata['allocation_pools'] = allocation_pools + if self.shared != '': + Dicdata['shared'] = self.shared + if self.ipv6_address_mode != '': + Dicdata['ipv6_address_mode'] = self.ipv6_address_mode + if self.ipv6_ra_mode != '': + Dicdata['ipv6_ra_mode'] = self.ipv6_ra_mode + if self.cidr != '': + Dicdata['cidr'] = self.cidr + if self.enable_dhcp != '': + Dicdata['enable_dhcp'] = self.enable_dhcp + if self.dns_nameservers != '': + Dicdata['dns_nameservers'] = self.dns_nameservers + if self.gateway_ip != '': + Dicdata['gateway_ip'] = self.gateway_ip + if self.ip_version != '': + Dicdata['ip_version'] = self.ip_version + + Dicdata = {'subnet': Dicdata} + + return json.dumps(Dicdata,indent=4) + +class VirtualPortData(NetworkData): + + def __init__(self): + self.id = '' + self.state = 'ACTIVE' + self.bindingHostId = 'fa:16:3e:76:8e:88' + self.allowedAddressPairs = [{'mac_address':'fa:16:3e:76:8e:88','ip_address':'192.168.1.1'}] + self.deviceOwner = 'none' + self.fixedIp = [] + self.securityGroups = [{'securityGroup':'asd'}] + self.adminStateUp = True + self.network_id = '' + self.tenant_id = '' + self.subnet_id = '' + self.bindingvifDetails = 'port_filter' + self.bindingvnicType = 'normal' + self.bindingvifType = 'ovs' + self.macAddress = 'fa:16:3e:76:8e:88' + self.deviceId = 'a08aa' + self.name = 'u' + + def DictoJson(self): + if self.id == '' or self.tenant_id == ' ' or \ + self.network_id == '' or self.subnet_id == '': + print 'Id/tenant id/networkid/subnetId is necessary!' + + Dicdata = {} + fixedIp =[] + fixedIp.append({'subnet_id':self.subnet_id,'ip_address':'192.168.1.4'}) + allocation_pools = [] + + if self.id != '': + Dicdata['id'] = self.id + if self.state != '': + Dicdata['status'] = self.state + if self.bindingHostId != '': + Dicdata['binding:host_id'] = self.bindingHostId + if self.allowedAddressPairs != '': + Dicdata['allowed_address_pairs'] = self.allowedAddressPairs + if self.deviceOwner != '': + Dicdata['device_owner'] = self.deviceOwner + if self.securityGroups != '': + Dicdata['security_groups'] = self.securityGroups + if self.adminStateUp != '': + Dicdata['admin_state_up'] = self.adminStateUp + if self.network_id != '': + Dicdata['network_id'] = self.network_id + if self.tenant_id != '': + Dicdata['tenant_id'] = self.tenant_id + if self.bindingvifDetails != '': + Dicdata['binding:vif_details'] = self.bindingvifDetails + if self.bindingvnicType != '': + Dicdata['binding:vnic_type'] = self.bindingvnicType + if self.bindingvifType != '': + Dicdata['binding:vif_type'] = self.bindingvifType + if self.macAddress != '': + Dicdata['mac_address'] = self.macAddress + if self.deviceId != '': + Dicdata['device_id'] = self.deviceId + if self.name != '': + Dicdata['name'] = self.name + + Dicdata['fixed_ips'] = fixedIp + Dicdata = {'port': Dicdata} + + return json.dumps(Dicdata,indent=4) \ No newline at end of file diff --git a/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py new file mode 100644 index 00000000..e69de29b -- cgit 1.2.3-korg