aboutsummaryrefslogtreecommitdiffstats
path: root/functest/opnfv_tests/sdn/onos/teston/onos.py
diff options
context:
space:
mode:
Diffstat (limited to 'functest/opnfv_tests/sdn/onos/teston/onos.py')
-rwxr-xr-xfunctest/opnfv_tests/sdn/onos/teston/onos.py261
1 files changed, 261 insertions, 0 deletions
diff --git a/functest/opnfv_tests/sdn/onos/teston/onos.py b/functest/opnfv_tests/sdn/onos/teston/onos.py
new file mode 100755
index 000000000..300f56d18
--- /dev/null
+++ b/functest/opnfv_tests/sdn/onos/teston/onos.py
@@ -0,0 +1,261 @@
+"""
+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
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+"""
+
+import datetime
+import os
+import re
+import time
+
+import argparse
+from neutronclient.v2_0 import client as neutronclient
+
+import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_utils as openstack_utils
+import functest.utils.functest_constants as ft_constants
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-t", "--testcase", help="Testcase name")
+args = parser.parse_args()
+
+
+""" logging configuration """
+logger = ft_logger.Logger("onos").getLogger()
+
+# onos parameters
+ONOSCI_PATH = ft_constants.REPOS_DIR + "/"
+starttime = datetime.datetime.now()
+
+INSTALLER_TYPE = ft_constants.CI_INSTALLER_TYPE
+ONOS_SFC_IMAGE_NAME = ft_constants.ONOS_SFC_IMAGE_NAME
+ONOS_SFC_IMAGE_PATH = os.path.join(ft_constants.FUNCTEST_DATA_DIR,
+ ft_constants.ONOS_SFC_IMAGE_FILENAME)
+ONOS_SFC_PATH = os.path.join(ft_constants.FUNCTEST_REPO_DIR,
+ ft_constants.ONOS_SFC_RELATIVE_PATH)
+
+
+def RunScript(testname):
+ """
+ Run ONOS Test Script
+ Parameters:
+ testname: ONOS Testcase Name
+ """
+ runtest = ONOSCI_PATH + "onos/TestON/bin/cli.py run " + testname
+ logger.debug("Run script " + testname)
+ os.system(runtest)
+
+
+def DownloadCodes(url="https://github.com/wuwenbin2/OnosSystemTest.git"):
+ """
+ Download Onos Teston codes
+ Parameters:
+ url: github url
+ """
+ downloadcode = "git clone " + url + " " + ONOSCI_PATH + "OnosSystemTest"
+ logger.debug("Download Onos Teston codes " + url)
+ os.system(downloadcode)
+
+
+def GetResult():
+ LOGPATH = ONOSCI_PATH + "onos/TestON/logs"
+ cmd = "grep -rnh " + "Fail" + " " + LOGPATH
+ Resultbuffer = os.popen(cmd).read()
+ # duration = datetime.datetime.now() - starttime
+ time.sleep(2)
+
+ if re.search("\s+[1-9]+\s+", Resultbuffer):
+ logger.debug("Testcase Fails\n" + Resultbuffer)
+ # Result = "Failed"
+ else:
+ logger.debug("Testcases Success")
+ # Result = "Success"
+ # payload={'timestart': str(starttime),
+ # 'duration': str(duration),
+ # 'status': Result}
+ cmd = "grep -rnh 'Execution Time' " + LOGPATH
+ Resultbuffer = os.popen(cmd).read()
+ time1 = Resultbuffer[114:128]
+ time2 = Resultbuffer[28:42]
+ cmd = "grep -rnh 'Success Percentage' " + LOGPATH + "/FUNCvirNetNB_*"
+ Resultbuffer = os.popen(cmd).read()
+ if Resultbuffer.find('100%') >= 0:
+ result1 = 'Success'
+ else:
+ result1 = 'Failed'
+ cmd = "grep -rnh 'Success Percentage' " + LOGPATH + "/FUNCvirNetNBL3*"
+ Resultbuffer = os.popen(cmd).read()
+ if Resultbuffer.find('100%') >= 0:
+ result2 = 'Success'
+ else:
+ result2 = 'Failed'
+ status1 = []
+ status2 = []
+ cmd = "grep -rnh 'h3' " + LOGPATH + "/FUNCvirNetNB_*"
+ Resultbuffer = os.popen(cmd).read()
+ pattern = re.compile("<h3>([^-]+) - ([^-]+) - (\S*)</h3>")
+ # res = pattern.search(Resultbuffer).groups()
+ res = pattern.findall(Resultbuffer)
+ i = 0
+ for index in range(len(res)):
+ status1.append({'Case name:': res[i][0] + res[i][1],
+ 'Case result': res[i][2]})
+ i = i + 1
+ cmd = "grep -rnh 'h3' " + LOGPATH + "/FUNCvirNetNBL3*"
+ Resultbuffer = os.popen(cmd).read()
+ pattern = re.compile("<h3>([^-]+) - ([^-]+) - (\S*)</h3>")
+ # res = pattern.search(Resultbuffer).groups()
+ res = pattern.findall(Resultbuffer)
+ i = 0
+ for index in range(len(res)):
+ status2.append({'Case name:': res[i][0] + res[i][1],
+ 'Case result': res[i][2]})
+ i = i + 1
+ payload = {'timestart': str(starttime),
+ 'FUNCvirNet': {'duration': time1,
+ 'result': result1,
+ 'status': status1},
+ 'FUNCvirNetL3': {'duration': time2,
+ 'result': result2,
+ 'status': status2}}
+ return payload
+
+
+def SetOnosIp():
+ cmd = "openstack catalog show network | grep publicURL"
+ cmd_output = os.popen(cmd).read()
+ OC1 = re.search(r"\d+\.\d+\.\d+\.\d+", cmd_output).group()
+ os.environ['OC1'] = OC1
+ time.sleep(2)
+ logger.debug("ONOS IP is " + OC1)
+
+
+def SetOnosIpForJoid():
+ cmd = "env | grep SDN_CONTROLLER"
+ cmd_output = os.popen(cmd).read()
+ OC1 = re.search(r"\d+\.\d+\.\d+\.\d+", cmd_output).group()
+ os.environ['OC1'] = OC1
+ time.sleep(2)
+ logger.debug("ONOS IP is " + OC1)
+
+
+def CleanOnosTest():
+ TESTONPATH = ONOSCI_PATH + "onos/"
+ cmd = "rm -rf " + TESTONPATH
+ os.system(cmd)
+ time.sleep(2)
+ logger.debug("Clean ONOS Teston")
+
+
+def CreateImage():
+ glance_client = openstack_utils.get_glance_client()
+ image_id = openstack_utils.create_glance_image(glance_client,
+ ONOS_SFC_IMAGE_NAME,
+ ONOS_SFC_IMAGE_PATH)
+ EXIT_CODE = -1
+ if not image_id:
+ logger.error("Failed to create a Glance image...")
+ return(EXIT_CODE)
+ logger.debug("Image '%s' with ID=%s created successfully."
+ % (ONOS_SFC_IMAGE_NAME, image_id))
+
+
+def SfcTest():
+ cmd = "python " + ONOS_SFC_PATH + "/Sfc.py"
+ logger.debug("Run sfc tests")
+ os.system(cmd)
+
+
+def GetIp(type):
+ cmd = "openstack catalog show " + type + " | grep publicURL"
+ cmd_output = os.popen(cmd).read()
+ ip = re.search(r"\d+\.\d+\.\d+\.\d+", cmd_output).group()
+ return ip
+
+
+def Replace(before, after):
+ file = "/Sfc_fun.py"
+ cmd = "sed -i 's/" + before + "/" + after + "/g' " + ONOS_SFC_PATH + file
+ os.system(cmd)
+
+
+def SetSfcConf():
+ Replace("keystone_ip", GetIp("keystone"))
+ Replace("neutron_ip", GetIp("neutron"))
+ Replace("nova_ip", GetIp("nova"))
+ Replace("glance_ip", GetIp("glance"))
+ pwd = ft_constants.OS_PASSWORD
+ Replace("console", pwd)
+ creds_neutron = openstack_utils.get_credentials("neutron")
+ neutron_client = neutronclient.Client(**creds_neutron)
+ ext_net = openstack_utils.get_external_net(neutron_client)
+ Replace("admin_floating_net", ext_net)
+ logger.info("Modify configuration for SFC")
+
+
+def OnosTest():
+ start_time = time.time()
+ stop_time = start_time
+ if INSTALLER_TYPE == "joid":
+ logger.debug("Installer is Joid")
+ SetOnosIpForJoid()
+ else:
+ SetOnosIp()
+ RunScript("FUNCvirNetNB")
+ RunScript("FUNCvirNetNBL3")
+ try:
+ logger.debug("Push ONOS results into DB")
+ # TODO check path result for the file
+ result = GetResult()
+ stop_time = time.time()
+
+ # ONOS success criteria = all tests OK
+ # i.e. FUNCvirNet & FUNCvirNetL3
+ status = "FAIL"
+ try:
+ if (result['FUNCvirNet']['result'] == "Success" and
+ result['FUNCvirNetL3']['result'] == "Success"):
+ status = "PASS"
+ except:
+ logger.error("Unable to set ONOS criteria")
+
+ ft_utils.push_results_to_db("functest",
+ "onos",
+ start_time,
+ stop_time,
+ status,
+ result)
+
+ except:
+ logger.error("Error pushing results into Database")
+
+ if status == "FAIL":
+ EXIT_CODE = -1
+ exit(EXIT_CODE)
+
+
+def main():
+
+ if args.testcase == "sfc":
+ CreateImage()
+ SetSfcConf()
+ SfcTest()
+ else:
+ OnosTest()
+
+
+if __name__ == '__main__':
+ main()