aboutsummaryrefslogtreecommitdiffstats
path: root/install.sh
AgeCommit message (Expand)AuthorFilesLines
2017-11-20fix docker client don't have trex_clientAce Lee1-0/+7
2017-11-17update docker version to 16.04Ace Lee1-1/+3
2017-10-17Added required ubuntu packages to run IxLoad clientMaciej Skrocki1-1/+3
2017-08-11Merge "New storage test case: Bonnie++"Jing Lu1-0/+1
2017-08-03New storage test case: Bonnie++JingLu51-0/+1
2017-08-02Merge "Fix adding right deb repo based on the distro we are running on"Ross Brattain1-6/+14
2017-08-01Add yardstick logo in GUIchenjiankun1-0/+1
2017-07-27Yardstick GUI & GUI deploymentchenjiankun1-1/+4
2017-07-17Fix adding right deb repo based on the distro we are running onDeepak S1-6/+14
2017-07-03Yardstick: Aarch64 jenkins slave supportAlexandru Nemes1-12/+32
2017-05-25Added arm condition in install.sh to avoid installation error on ubuntu.Maciej Skrocki1-2/+9
2017-04-20Yardstick virtualenv supportchenjiankun1-3/+1
2017-04-06pip install yardstick failed in ApexJingLu51-1/+1
2017-04-01Yardstick virtualenv supportchenjiankun1-17/+28
2017-02-23Merge "Update missing license headers"Rex Lee1-0/+10
2017-02-18Add python-pip & flake8 package to install.shDeepak S1-0/+2
2017-02-17Update missing license headersDeepak S1-0/+10
2016-12-03Making nginx and uwsgi service start when run docker by using supervisorchenjiankun1-0/+1
2016-11-30Create API and command to create a influxDB containerchenjiankun1-1/+1
2016-11-23Deployment for APIchenjiankun1-0/+3
2016-11-15Yardstick installation unified (pip/setup)chenjiankun1-0/+40
#f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
"""
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 functest_utils
import functest.utils.openstack_utils as openstack_utils

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
TEST_DB = functest_utils.get_parameter_from_yaml(
    "results.test_db_url")
ONOS_REPO_PATH = functest_utils.get_parameter_from_yaml(
    "general.directories.dir_repos")
ONOS_CONF_DIR = functest_utils.get_parameter_from_yaml(
    "general.directories.dir_functest_conf")
REPO_PATH = ONOS_REPO_PATH + '/functest/'
if not os.path.exists(REPO_PATH):
    logger.error("Functest repository directory not found '%s'" % REPO_PATH)
    exit(-1)

ONOSCI_PATH = ONOS_REPO_PATH + "/"
starttime = datetime.datetime.now()

HOME = os.environ['HOME'] + "/"
INSTALLER_TYPE = os.environ['INSTALLER_TYPE']
DEPLOY_SCENARIO = os.environ['DEPLOY_SCENARIO']
ONOSCI_PATH = ONOS_REPO_PATH + "/"
GLANCE_IMAGE_NAME = functest_utils.get_parameter_from_yaml(
    "onos_sfc.image_name")
GLANCE_IMAGE_FILENAME = functest_utils.get_parameter_from_yaml(
    "onos_sfc.image_file_name")
GLANCE_IMAGE_PATH = functest_utils.get_parameter_from_yaml(
    "general.directories.dir_functest_data") + "/" + GLANCE_IMAGE_FILENAME
SFC_PATH = REPO_PATH + functest_utils.get_parameter_from_yaml(
    "general.directories.dir_onos_sfc")


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,
                                                   GLANCE_IMAGE_NAME,
                                                   GLANCE_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."
                 % (GLANCE_IMAGE_NAME, image_id))


def SfcTest():
    cmd = "python " + 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' " + 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 = os.environ['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")

        functest_utils.push_results_to_db("functest",
                                          "onos",
                                          logger,
                                          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()