summaryrefslogtreecommitdiffstats
path: root/framework/scripts/tests/Teston
diff options
context:
space:
mode:
authorAshlee Young <ashlee@wildernessvoice.com>2015-11-30 07:58:38 -0800
committerAshlee Young <ashlee@wildernessvoice.com>2015-11-30 07:58:38 -0800
commit671823e12bc13be9a8b87a5d7de33da1bb7a44e8 (patch)
treecbb8f0f184a1d66b34a82da161ac8fe2b8108177 /framework/scripts/tests/Teston
parentc5768287ef3bc0aa450d31caeb5762f66dd0dba2 (diff)
created broader test category under scripts
Change-Id: I3b8a39b7512594ae2c9aa7ab0e59cf6e2d31f7a2 Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
Diffstat (limited to 'framework/scripts/tests/Teston')
-rw-r--r--framework/scripts/tests/Teston/Readme.txt5
-rw-r--r--framework/scripts/tests/Teston/__init__.py0
-rw-r--r--framework/scripts/tests/Teston/adapters/__init__.py0
-rw-r--r--framework/scripts/tests/Teston/adapters/client.py69
-rw-r--r--framework/scripts/tests/Teston/adapters/connection.py191
-rw-r--r--framework/scripts/tests/Teston/adapters/environment.py226
-rw-r--r--framework/scripts/tests/Teston/adapters/foundation.py64
-rw-r--r--framework/scripts/tests/Teston/config.yaml16
-rw-r--r--framework/scripts/tests/Teston/dependencies/onos23
-rw-r--r--framework/scripts/tests/Teston/log/temp.log0
-rw-r--r--framework/scripts/tests/Teston/onosfunctest.py21
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.params48
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.py240
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/FUNCovsdbtest.topo60
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/__init__.py0
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/Nbdata.py212
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py0
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.params45
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.py795
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/FUNCvirNetNB.topo53
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/__init__.py0
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/Nbdata.py212
-rw-r--r--framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py0
23 files changed, 2280 insertions, 0 deletions
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/__init__.py
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/adapters/__init__.py
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/log/temp.log
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 @@
+<PARAMS>
+ # 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
+
+ <testcases>1,3,4,2,5,6,7,8</testcases>
+
+ <DEPENDENCY>
+ <path>/tests/FUNCovsdbtest/Dependency/</path>
+ </DEPENDENCY>
+
+ <ENV>
+ <cellName>singlenode</cellName>
+ <cellApps>drivers,openflow,proxyarp,mobility</cellApps>
+ </ENV>
+
+ <CTRL>
+ <ip1>OC1</ip1>
+ <port1>6653</port1>
+ <ovsdbport>6640</ovsdbport>
+ </CTRL>
+
+ <TIMER>
+ <delaytime>5</delaytime> #delaytime for ovsdb connection create and delete
+ </TIMER>
+
+ <HTTP>
+ <port>8181</port>
+ <path>/onos/vtn/</path>
+ </HTTP>
+
+ <GIT>
+ <pull>False</pull>
+ <branch>master</branch>
+ </GIT>
+
+ <OVSDB>
+ <ip1>OCN</ip1>
+ <ip2>OC1</ip2>
+ </OVSDB>
+
+</PARAMS>
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 <name>
+ 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 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>OCN</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli1>
+ <host>OCN</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli1>
+
+ <ONOS1>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOSrest>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password></password>
+ <type>OnosRestDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSrest>
+
+ <OVSDB1>
+ <host>OCN</host>
+ <user>admin</user>
+ <password></password>
+ <type>OvsdbDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </OVSDB1>
+
+ <OVSDB2>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password></password>
+ <type>OvsdbDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </OVSDB2>
+
+ </COMPONENT>
+</TOPOLOGY>
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/__init__.py
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/testcases/FUNCovsdbtest/dependencies/__init__.py
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 @@
+<PARAMS>
+ # 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
+
+ <testcases>1,2,3,4,5,6,7,8,9,10</testcases>
+
+ <SLEEP>
+ <startup>15</startup>
+ </SLEEP>
+
+ <ENV>
+ <cellName>singlenode</cellName>
+ <cellApps>drivers,openflow,proxyarp,mobility</cellApps>
+ </ENV>
+
+ <CTRL>
+ <ip1>OC1</ip1>
+ <port1>6653</port1>
+ </CTRL>
+
+ <HTTP>
+ <port>8181</port>
+ <path>/onos/vtn/</path>
+ </HTTP>
+
+ <GIT>
+ <pull>False</pull>
+ <branch>master</branch>
+ </GIT>
+
+ <MININET>
+ <switch>7</switch>
+ <links>20</links>
+ </MININET>
+
+</PARAMS>
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<name>
+ 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 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli1>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli1>
+
+ <ONOS1>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOSrest>
+ <host>OC1</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSrest>
+
+ <Mininet1>
+ <host>OCN</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ <controller> none </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ </COMPONENT>
+</TOPOLOGY>
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/__init__.py
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
--- /dev/null
+++ b/framework/scripts/tests/Teston/testcases/FUNCvirNetNB/dependencies/__init__.py