diff options
28 files changed, 238 insertions, 231 deletions
diff --git a/ci/config_functest.yaml b/ci/config_functest.yaml index e58fcea1a..2b3317a1b 100644 --- a/ci/config_functest.yaml +++ b/ci/config_functest.yaml @@ -170,7 +170,7 @@ promise: image_name: promise-img flavor_name: promise-flavor flavor_vcpus: 1 - flavor_ram: 512 + flavor_ram: 128 flavor_disk: 0 network_name: promise-net subnet_name: promise-subnet diff --git a/ci/prepare_env.py b/ci/prepare_env.py index 116b1a6e2..0b528cfb3 100755 --- a/ci/prepare_env.py +++ b/ci/prepare_env.py @@ -13,18 +13,18 @@ # -import argparse +import json import os import re import subprocess import sys -import json +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import yaml - +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO actions = ['start', 'check'] parser = argparse.ArgumentParser() @@ -44,14 +44,11 @@ CI_INSTALLER_TYPE = "" CI_INSTALLER_IP = "" CI_SCENARIO = "" CI_DEBUG = False -REPOS_DIR = os.getenv('repos_dir') -FUNCTEST_REPO = REPOS_DIR + '/functest/' CONFIG_FUNCTEST_PATH = os.environ["CONFIG_FUNCTEST_YAML"] CONFIG_PATCH_PATH = os.path.join(os.path.dirname( CONFIG_FUNCTEST_PATH), "config_patch.yaml") -with open(CONFIG_FUNCTEST_PATH) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() with open(CONFIG_PATCH_PATH) as f: functest_patch_yaml = yaml.safe_load(f) diff --git a/ci/run_tests.py b/ci/run_tests.py index d8f488388..194793838 100755 --- a/ci/run_tests.py +++ b/ci/run_tests.py @@ -8,21 +8,21 @@ # http://www.apache.org/licenses/LICENSE-2.0 # -import argparse import datetime import os import re import sys +import argparse import functest.ci.generate_report as generate_report import functest.ci.tier_builder as tb -from functest.testcases.Controllers.ODL.OpenDaylightTesting import ODLTestCases import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_clean as os_clean import functest.utils.openstack_snapshot as os_snapshot import functest.utils.openstack_utils as os_utils - +from functest.testcases.Controllers.ODL.OpenDaylightTesting import ODLTestCases +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO parser = argparse.ArgumentParser() parser.add_argument("-t", "--test", dest="test", action='store', @@ -41,9 +41,7 @@ logger = ft_logger.Logger("run_tests").getLogger() """ global variables """ -REPOS_DIR = os.getenv('repos_dir') -FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR) -EXEC_SCRIPT = ("%sci/exec_test.sh" % FUNCTEST_REPO) +EXEC_SCRIPT = ("%s/ci/exec_test.sh" % FUNCTEST_REPO) CLEAN_FLAG = True REPORT_FLAG = False EXECUTED_TEST_CASES = [] diff --git a/cli/commands/cli_env.py b/cli/commands/cli_env.py index 9e6372d4d..0f5ef2c60 100644 --- a/cli/commands/cli_env.py +++ b/cli/commands/cli_env.py @@ -12,9 +12,9 @@ import git import os import functest.utils.functest_utils as ft_utils +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO ENV_FILE = "/home/opnfv/functest/conf/env_active" -FUNCTEST_REPO = "/home/opnfv/repos/functest/" class CliEnv: @@ -35,7 +35,7 @@ class CliEnv: else: answer = raw_input("Invalid answer. Please type [y|n]\n") - cmd = ("python /home/opnfv/repos/functest/ci/prepare_env.py start") + cmd = ("python %s/ci/prepare_env.py start" % FUNCTEST_REPO) ft_utils.execute_command(cmd) def show(self): diff --git a/cli/commands/cli_os.py b/cli/commands/cli_os.py index 722c700cd..d38dc9e6a 100644 --- a/cli/commands/cli_os.py +++ b/cli/commands/cli_os.py @@ -9,18 +9,15 @@ import os + import click import functest.utils.functest_utils as ft_utils import functest.utils.openstack_clean as os_clean import functest.utils.openstack_snapshot as os_snapshot -import yaml - +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() -REPOS_DIR = os.getenv('repos_dir') -FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR) FUNCTEST_CONF_DIR = functest_yaml.get("general").get( "directories").get("dir_functest_conf") RC_FILE = os.getenv('creds') @@ -83,7 +80,7 @@ class CliOpenStack: def check(self): self.ping_endpoint() - cmd = FUNCTEST_REPO + "ci/check_os.sh" + cmd = FUNCTEST_REPO + "/ci/check_os.sh" ft_utils.execute_command(cmd, verbose=False) def snapshot_create(self): diff --git a/cli/commands/cli_testcase.py b/cli/commands/cli_testcase.py index d1b248297..68f9ed610 100644 --- a/cli/commands/cli_testcase.py +++ b/cli/commands/cli_testcase.py @@ -15,11 +15,9 @@ import click import functest.ci.tier_builder as tb import functest.utils.functest_utils as ft_utils import functest.utils.functest_vacation as vacation -import yaml +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() FUNCTEST_CONF_DIR = functest_yaml.get("general").get( "directories").get("dir_functest_conf") @@ -57,9 +55,9 @@ class CliTestcase: "Run first 'functest env prepare'") else: if noclean: - cmd = ("python /home/opnfv/repos/functest/ci/run_tests.py " - "-n -t %s" % testname) + cmd = ("python %s/ci/run_tests.py " + "-n -t %s" % (FUNCTEST_REPO, testname)) else: - cmd = ("python /home/opnfv/repos/functest/ci/run_tests.py " - "-t %s" % testname) + cmd = ("python %s/ci/run_tests.py " + "-t %s" % (FUNCTEST_REPO, testname)) ft_utils.execute_command(cmd) diff --git a/cli/commands/cli_tier.py b/cli/commands/cli_tier.py index 7797e9be6..314246890 100644 --- a/cli/commands/cli_tier.py +++ b/cli/commands/cli_tier.py @@ -14,11 +14,9 @@ import os import click import functest.ci.tier_builder as tb import functest.utils.functest_utils as ft_utils -import yaml +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() FUNCTEST_CONF_DIR = functest_yaml.get("general").get( "directories").get("dir_functest_conf") @@ -67,9 +65,9 @@ class CliTier: "Run first 'functest env prepare'") else: if noclean: - cmd = ("python /home/opnfv/repos/functest/ci/run_tests.py " - "-n -t %s" % tiername) + cmd = ("python %s/ci/run_tests.py " + "-n -t %s" % (FUNCTEST_REPO, tiername)) else: - cmd = ("python /home/opnfv/repos/functest/ci/run_tests.py " - "-t %s" % tiername) + cmd = ("python %s/ci/run_tests.py " + "-t %s" % (FUNCTEST_REPO, tiername)) ft_utils.execute_command(cmd) diff --git a/docs/release-notes/functest-release.rst b/docs/release-notes/functest-release.rst index 6ebab22a7..9623b43d4 100644 --- a/docs/release-notes/functest-release.rst +++ b/docs/release-notes/functest-release.rst @@ -242,6 +242,13 @@ Colorado known restrictions/issues | | | metadata service excluded from onos scenarios| | | | https://gerrit.opnfv.org/gerrit/#/c/18729/ | +-----------+-----------+----------------------------------------------+ +| any | odl_l3-* | Tempest cases related to using floating IP | +| | | addresses fail because of a known ODL bug. | +| | | vPing_ssh test case is excluded for the same | +| | | reason. | +| | | https://jira.opnfv.org/browse/APEX-112 | +| | | https://jira.opnfv.org/browse/FUNCTEST-445 | ++-----------+-----------+----------------------------------------------+ | apex/fuel | *-bgpvpn | vPing_ssh (floating ips not supported) and | | | | vIMS excluded. Some Tempest cases related to | | | | floating ips also excluded. | diff --git a/testcases/Controllers/ONOS/Teston/adapters/client.py b/testcases/Controllers/ONOS/Teston/adapters/client.py index 77de092e4..6b3285e5e 100644 --- a/testcases/Controllers/ONOS/Teston/adapters/client.py +++ b/testcases/Controllers/ONOS/Teston/adapters/client.py @@ -10,15 +10,19 @@ Description: # http://www.apache.org/licenses/LICENSE-2.0 # """ -from environment import environment -import time +import json import pexpect import requests -import json +import time + +from environment import environment +import functest.utils.functest_logger as ft_logger class client(environment): + logger = ft_logger.Logger("client").getLogger() + def __init__(self): environment.__init__(self) self.loginfo = environment() @@ -50,7 +54,7 @@ class client(environment): [len(lastshowscreeninfo)::]) lastshowscreeninfo = curshowscreeninfo if Result == 0: - print "Done!" + self.logger.info("Done!") return time.sleep(1) circletime += 1 @@ -61,7 +65,7 @@ class client(environment): def onosstart(self): # This is the compass run machine user&pass,you need to modify - print "Test Begin....." + self.logger.info("Test Begin.....") self.OnosConnectionSet() masterhandle = self.SSHlogin(self.localhost, self.masterusername, self.masterpassword) diff --git a/testcases/Controllers/ONOS/Teston/adapters/connection.py b/testcases/Controllers/ONOS/Teston/adapters/connection.py index 16f2ef32c..b2a2e3d88 100644 --- a/testcases/Controllers/ONOS/Teston/adapters/connection.py +++ b/testcases/Controllers/ONOS/Teston/adapters/connection.py @@ -16,11 +16,15 @@ Description: import os import pexpect import re + from foundation import foundation +import functest.utils.functest_logger as ft_logger class connection(foundation): + logger = ft_logger.Logger("connection").getLogger() + def __init__(self): foundation.__init__(self) self.loginfo = foundation() @@ -33,7 +37,7 @@ class connection(foundation): username: login user name password: login password """ - print("Now Adding an user to known hosts " + ipaddr) + self.logger.info("Now Adding an user to known hosts " + ipaddr) login = handle login.sendline("ssh -l %s -p 8101 %s" % (username, ipaddr)) index = 0 @@ -78,7 +82,7 @@ class connection(foundation): """ Generate ssh keys, used for some server have no sshkey. """ - print "Now Generating SSH keys..." + self.logger.info("Now Generating SSH keys...") # Here file name may be id_rsa or id_ecdsa or others # So here will have a judgement keysub = handle @@ -112,7 +116,7 @@ class connection(foundation): parameters: password: root login password """ - print("Now changing to user root") + self.logger.info("Now changing to user root") login = pexpect.spawn("su - root") index = 0 while index != 2: @@ -129,7 +133,7 @@ class connection(foundation): """ Exit root user. """ - print("Now Release user root") + self.logger.info("Now Release user root") login = pexpect.spawn("exit") index = login.expect(['logout', pexpect.EOF, pexpect.TIMEOUT]) if index == 0: @@ -145,7 +149,7 @@ class connection(foundation): parameters: envalue: environment value to add """ - print "Now Adding bash environment" + self.logger.info("Now Adding bash environment") fileopen = open("/etc/profile", 'r') findContext = 1 while findContext: @@ -165,7 +169,7 @@ class connection(foundation): Change ONOS root path in file:bash_profile onospath: path of onos root """ - print "Now Changing ONOS Root Path" + self.logger.info("Now Changing ONOS Root Path") filepath = onospath + 'onos/tools/dev/bash_profile' line = open(filepath, 'r').readlines() lenall = len(line) - 1 @@ -175,7 +179,7 @@ class connection(foundation): NewFile = open(filepath, 'w') NewFile.writelines(line) NewFile.close - print "Done!" + self.logger.info("Done!") def OnosConnectionSet(self): """ diff --git a/testcases/Controllers/ONOS/Teston/adapters/environment.py b/testcases/Controllers/ONOS/Teston/adapters/environment.py index 231677333..f2755b669 100644 --- a/testcases/Controllers/ONOS/Teston/adapters/environment.py +++ b/testcases/Controllers/ONOS/Teston/adapters/environment.py @@ -15,17 +15,21 @@ Description: # """ -import os -import time import pexpect +import pxssh import re +import os import sys -import pxssh +import time + from connection import connection +import functest.utils.functest_logger as ft_logger class environment(connection): + logger = ft_logger.Logger("environment").getLogger() + def __init__(self): connection.__init__(self) self.loginfo = connection() @@ -39,9 +43,9 @@ class environment(connection): handle: current working handle codeurl: clone code url """ - print "Now loading test codes! Please wait in patient..." + self.logger.info("Now loading test codes! Please wait in patient...") originalfolder = sys.path[0] - print originalfolder + self.logger.info(originalfolder) gitclone = handle gitclone.sendline("git clone " + codeurl) index = 0 @@ -82,7 +86,7 @@ class environment(connection): parameters: handle(input): current working handle """ - print "Now Cleaning test environment" + self.logger.info("Now Cleaning test environment") handle.sendline("sudo apt-get install -y mininet") handle.prompt() handle.sendline("sudo pip install configobj") @@ -102,7 +106,7 @@ class environment(connection): cmd(input): onos-push-keys xxx(xxx is device) password(input): login in password """ - print "Now Pushing Onos Keys:" + cmd + self.logger.info("Now Pushing Onos Keys:" + cmd) Pushkeys = handle Pushkeys.sendline(cmd) Result = 0 @@ -121,7 +125,7 @@ class environment(connection): break time.sleep(2) Pushkeys.prompt() - print "Done!" + self.logger.info("Done!") def SetOnosEnvVar(self, handle, masterpass, agentpass): """ @@ -131,13 +135,14 @@ class environment(connection): masterpass: scripts running server's password agentpass: onos cluster&compute node password """ - print "Now Setting test environment" + self.logger.info("Now Setting test environment") for host in self.hosts: - print "try to connect " + str(host) + self.logger.info("try to connect " + str(host)) result = self.CheckSshNoPasswd(host) if not result: - print ("ssh login failed,try to copy master publickey" + - "to agent " + str(host)) + self.logger.info( + "ssh login failed,try to copy master publickey" + + "to agent " + str(host)) self.CopyPublicKey(host) self.OnosPushKeys(handle, "onos-push-keys " + self.OCT, masterpass) self.OnosPushKeys(handle, "onos-push-keys " + self.OC1, agentpass) @@ -173,7 +178,7 @@ class environment(connection): user: onos&compute node user password: onos&compute node password """ - print "Now Changing ONOS name&password" + self.logger.info("Now Changing ONOS name&password") filepath = self.home + '/onos/tools/build/envDefaults' line = open(filepath, 'r').readlines() lenall = len(line) - 1 @@ -187,7 +192,7 @@ class environment(connection): NewFile = open(filepath, 'w') NewFile.writelines(line) NewFile.close - print "Done!" + self.logger.info("Done!") def ChangeTestCasePara(self, testcase, user, password): """ @@ -196,7 +201,7 @@ class environment(connection): user: onos&compute node user password: onos&compute node password """ - print "Now Changing " + testcase + " name&password" + self.logger.info("Now Changing " + testcase + " name&password") if self.masterusername == 'root': filepath = '/root/' else: @@ -232,7 +237,7 @@ class environment(connection): login.sendline('ls -l') # match prompt login.prompt() - print("SSH login " + ipaddr + " success!") + self.logger.info("SSH login " + ipaddr + " success!") return login def SSHRelease(self, handle): @@ -256,7 +261,7 @@ class environment(connection): str(publickey) + ">>/root/.ssh/authorized_keys\'") tmphandle.prompt() self.SSHRelease(tmphandle) - print "Add OCT PublicKey to " + host + " success" + self.logger.info("Add OCT PublicKey to " + host + " success") def OnosEnvSetup(self, handle): """ diff --git a/testcases/Controllers/ONOS/Teston/adapters/foundation.py b/testcases/Controllers/ONOS/Teston/adapters/foundation.py index 47605eb74..3fae2a5d2 100644 --- a/testcases/Controllers/ONOS/Teston/adapters/foundation.py +++ b/testcases/Controllers/ONOS/Teston/adapters/foundation.py @@ -11,12 +11,14 @@ Description: # """ +import datetime import logging import os +import re import time import yaml -import re -import datetime + +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO class foundation: @@ -24,7 +26,7 @@ class foundation: def __init__(self): # currentpath = os.getcwd() - REPO_PATH = os.environ['repos_dir'] + '/functest/' + REPO_PATH = FUNCTEST_REPO + '/' currentpath = REPO_PATH + 'testcases/Controllers/ONOS/Teston/CI' self.cipath = currentpath self.logdir = os.path.join(currentpath, 'log') @@ -47,7 +49,6 @@ class foundation: filemode='w') filelog = logging.FileHandler(self.logfilepath) logging.getLogger('Functest').addHandler(filelog) - print loginfo logging.info(loginfo) def getdefaultpara(self): diff --git a/testcases/Controllers/ONOS/Teston/onosfunctest.py b/testcases/Controllers/ONOS/Teston/onosfunctest.py index 2790e6941..6b922fba9 100755 --- a/testcases/Controllers/ONOS/Teston/onosfunctest.py +++ b/testcases/Controllers/ONOS/Teston/onosfunctest.py @@ -18,13 +18,13 @@ import datetime import os import re import time -import argparse - -from neutronclient.v2_0 import client as neutronclient +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils import functest.utils.openstack_utils as openstack_utils +from functest.utils.functest_utils import FUNCTEST_REPO as REPO_PATH +from neutronclient.v2_0 import client as neutronclient parser = argparse.ArgumentParser() parser.add_argument("-t", "--testcase", help="Testcase name") @@ -41,10 +41,6 @@ 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() @@ -59,7 +55,7 @@ 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( +SFC_PATH = REPO_PATH + "/" + functest_utils.get_parameter_from_yaml( "general.directories.dir_onos_sfc") diff --git a/testcases/OpenStack/examples/create_instance_and_ip.py b/testcases/OpenStack/examples/create_instance_and_ip.py index 92a3df6b5..3d41e5dde 100755 --- a/testcases/OpenStack/examples/create_instance_and_ip.py +++ b/testcases/OpenStack/examples/create_instance_and_ip.py @@ -28,7 +28,6 @@ args = parser.parse_args() """ logging configuration """ logger = ft_logger.Logger("create_instance_and_ip").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' HOME = os.environ['HOME'] + "/" VM_BOOT_TIMEOUT = 180 diff --git a/testcases/OpenStack/rally/run_rally-cert.py b/testcases/OpenStack/rally/run_rally-cert.py index f3eb79d26..b77cbdf54 100755 --- a/testcases/OpenStack/rally/run_rally-cert.py +++ b/testcases/OpenStack/rally/run_rally-cert.py @@ -15,18 +15,18 @@ # """ tests configuration """ -import argparse import json import os import re import subprocess import time + +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils import functest.utils.openstack_utils as os_utils import iniparse -import yaml - +from functest.utils.functest_utils import FUNCTEST_REPO as REPO_PATH tests = ['authenticate', 'glance', 'cinder', 'heat', 'keystone', 'neutron', 'nova', 'quotas', 'requests', 'vm', 'all'] @@ -70,18 +70,11 @@ else: """ logging configuration """ logger = ft_logger.Logger("run_rally").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' -if not os.path.exists(REPO_PATH): - logger.error("Functest repository directory not found '%s'" % REPO_PATH) - exit(-1) - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = functest_utils.get_functest_yaml() HOME = os.environ['HOME'] + "/" -RALLY_DIR = REPO_PATH + functest_yaml.get("general").get( +RALLY_DIR = REPO_PATH + '/' + functest_yaml.get("general").get( "directories").get("dir_rally") TEMPLATE_DIR = RALLY_DIR + "scenario/templates" SUPPORT_DIR = RALLY_DIR + "scenario/support" diff --git a/testcases/OpenStack/tempest/run_tempest.py b/testcases/OpenStack/tempest/run_tempest.py index 306664feb..390c8a65f 100755 --- a/testcases/OpenStack/tempest/run_tempest.py +++ b/testcases/OpenStack/tempest/run_tempest.py @@ -14,7 +14,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 # import ConfigParser -import argparse import os import re import shutil @@ -22,11 +21,12 @@ import subprocess import sys import time +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import yaml - +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO modes = ['full', 'smoke', 'baremetal', 'compute', 'data_processing', 'identity', 'image', 'network', 'object_storage', 'orchestration', @@ -58,11 +58,7 @@ args = parser.parse_args() """ logging configuration """ logger = ft_logger.Logger("run_tempest").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = ft_utils.get_functest_yaml() TEST_DB = functest_yaml.get("results").get("test_db_url") MODE = "smoke" @@ -94,6 +90,7 @@ RESULTS_DIR = functest_yaml.get("general").get("directories").get( TEMPEST_RESULTS_DIR = RESULTS_DIR + '/tempest' TEST_LIST_DIR = functest_yaml.get("general").get("directories").get( "dir_tempest_cases") +REPO_PATH = FUNCTEST_REPO + '/' TEMPEST_CUSTOM = REPO_PATH + TEST_LIST_DIR + 'test_list.txt' TEMPEST_BLACKLIST = REPO_PATH + TEST_LIST_DIR + 'blacklist.txt' TEMPEST_DEFCORE = REPO_PATH + TEST_LIST_DIR + 'defcore_req.txt' diff --git a/testcases/OpenStack/vPing/vping_util.py b/testcases/OpenStack/vPing/vping_util.py index 3f4adae73..d3ca44139 100644 --- a/testcases/OpenStack/vPing/vping_util.py +++ b/testcases/OpenStack/vPing/vping_util.py @@ -1,20 +1,16 @@ import os -import re import pprint +import re import sys import time import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import paramiko +from functest.utils.functest_utils import FUNCTEST_REPO as REPO_PATH from scp import SCPClient -import yaml - -REPO_PATH = os.environ['repos_dir'] + '/functest/' -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = ft_utils.get_functest_yaml() NAME_VM_1 = functest_yaml.get("vping").get("vm_name_1") NAME_VM_2 = functest_yaml.get("vping").get("vm_name_2") @@ -343,7 +339,7 @@ def transfer_ping_script(ssh, floatip): logger.info("Trying to transfer ping.sh to %s..." % floatip) scp = SCPClient(ssh.get_transport()) - ping_script = REPO_PATH + "testcases/OpenStack/vPing/ping.sh" + ping_script = REPO_PATH + '/' + "testcases/OpenStack/vPing/ping.sh" try: scp.put(ping_script, "~/") except: diff --git a/testcases/features/copper.py b/testcases/features/copper.py index c79754a1b..9be909427 100755 --- a/testcases/features/copper.py +++ b/testcases/features/copper.py @@ -15,12 +15,12 @@ # limitations under the License. # import argparse -import os import sys import time + import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils -import yaml + parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", @@ -28,11 +28,10 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) - -dirs = functest_yaml.get('general').get('directories') -COPPER_REPO = dirs.get('dir_repo_copper') +COPPER_REPO = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_repo_copper') +RESULTS_DIR = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_results') logger = ft_logger.Logger("copper").getLogger() @@ -42,7 +41,10 @@ def main(): start_time = time.time() - ret_val = functest_utils.execute_command(cmd, logger, exit_on_error=False) + log_file = RESULTS_DIR + "/copper.log" + ret_val = functest_utils.execute_command(cmd, + exit_on_error=False, + output_file=log_file) stop_time = time.time() duration = round(stop_time - start_time, 1) diff --git a/testcases/features/doctor.py b/testcases/features/doctor.py index 02edd25ca..68c80a9e4 100755 --- a/testcases/features/doctor.py +++ b/testcases/features/doctor.py @@ -16,42 +16,53 @@ import argparse import os import time -import yaml import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils + parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", help="Create json result file", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() -dirs = functest_yaml.get('general').get('directories') -DOCTOR_REPO = dirs.get('dir_repo_doctor') +DOCTOR_REPO = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_repo_doctor') +RESULTS_DIR = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_results') logger = ft_logger.Logger("doctor").getLogger() def main(): exit_code = -1 + + # if the image name is explicitly set for the doctor suite, set it as + # enviroment variable + if 'doctor' in functest_yaml and 'image_name' in functest_yaml['doctor']: + os.environ["IMAGE_NAME"] = functest_yaml['doctor']['image_name'] + cmd = 'cd %s/tests && ./run.sh' % DOCTOR_REPO + log_file = RESULTS_DIR + "/doctor.log" + start_time = time.time() - ret = functest_utils.execute_command(cmd, logger, info=True, - exit_on_error=False) + ret = functest_utils.execute_command(cmd, + info=True, + exit_on_error=False, + output_file=log_file) stop_time = time.time() duration = round(stop_time - start_time, 1) if ret == 0: - logger.info("doctor OK") + logger.info("Doctor test case OK") test_status = 'OK' exit_code = 0 else: - logger.info("doctor FAILED") + logger.info("Doctor test case FAILED") test_status = 'NOK' details = { diff --git a/testcases/features/domino.py b/testcases/features/domino.py index 291a3b49b..c717c060e 100755 --- a/testcases/features/domino.py +++ b/testcases/features/domino.py @@ -15,9 +15,7 @@ # import argparse -import os import time -import yaml import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils @@ -29,20 +27,24 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') DOMINO_REPO = dirs.get('dir_repo_domino') +RESULTS_DIR = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_results') logger = ft_logger.Logger("domino").getLogger() def main(): cmd = 'cd %s && ./tests/run_multinode.sh' % DOMINO_REPO + log_file = RESULTS_DIR + "/domino.log" start_time = time.time() - ret = functest_utils.execute_command(cmd, logger, exit_on_error=False) + ret = functest_utils.execute_command(cmd, + exit_on_error=False, + output_file=log_file) stop_time = time.time() duration = round(stop_time - start_time, 1) diff --git a/testcases/features/promise.py b/testcases/features/promise.py index 3728adfe5..3f58dcee8 100755 --- a/testcases/features/promise.py +++ b/testcases/features/promise.py @@ -9,20 +9,18 @@ # # Maintainer : jose.lausuch@ericsson.com # -import argparse import json import os import subprocess import time +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils import functest.utils.openstack_utils as openstack_utils import keystoneclient.v2_0.client as ksclient -from neutronclient.v2_0 import client as ntclient import novaclient.client as nvclient -import yaml - +from neutronclient.v2_0 import client as ntclient parser = argparse.ArgumentParser() @@ -32,8 +30,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') PROMISE_REPO = dirs.get('dir_repo_promise') diff --git a/testcases/features/sfc/sfc.py b/testcases/features/sfc/sfc.py index 3cf1052b6..27d80bc00 100755 --- a/testcases/features/sfc/sfc.py +++ b/testcases/features/sfc/sfc.py @@ -1,12 +1,14 @@ -import argparse import os import subprocess import sys import time + +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import paramiko +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO parser = argparse.ArgumentParser() @@ -19,7 +21,6 @@ args = parser.parse_args() """ logging configuration """ logger = ft_logger.Logger("ODL_SFC").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' HOME = os.environ['HOME'] + "/" VM_BOOT_TIMEOUT = 180 @@ -203,8 +204,8 @@ def main(): # CREATION OF THE 2 SF #### - tacker_script = "/home/opnfv/repos/functest/testcases/features/sfc/" + \ - TACKER_SCRIPT + tacker_script = "%s/testcases/features/sfc/%s" % \ + (FUNCTEST_REPO, TACKER_SCRIPT) logger.info("Executing tacker script: '%s'" % tacker_script) subprocess.call(tacker_script, shell=True) @@ -260,15 +261,16 @@ def main(): try: while 1: - (stdin, stdout, stderr) = ssh.exec_command("ps lax | grep python") - if "vxlan_tool.py" in stdout.readlines()[0]: + (stdin, stdout, stderr) = ssh.exec_command( + "ps aux | grep \"vxlan_tool.py\" | grep -v grep") + if len(stdout.readlines()) > 0: logger.debug("HTTP firewall started") break else: logger.debug("HTTP firewall not started") time.sleep(3) - except: - logger.error("vxlan_tool not started in SF1") + except Exception: + logger.exception("vxlan_tool not started in SF1") # SSH TO START THE VXLAN_TOOL ON SF2 try: @@ -284,15 +286,16 @@ def main(): try: while 1: - (stdin, stdout, stderr) = ssh.exec_command("ps lax | grep python") - if "vxlan_tool.py" in stdout.readlines()[0]: + (stdin, stdout, stderr) = ssh.exec_command( + "ps aux | grep \"vxlan_tool.py\" | grep -v grep") + if len(stdout.readlines()) > 0: logger.debug("SSH firewall started") break else: logger.debug("SSH firewall not started") time.sleep(3) - except: - logger.error("vxlan_tool not started in SF2") + except Exception: + logger.exception("vxlan_tool not started in SF2") # SSH to modify the classification flows in compute @@ -303,55 +306,59 @@ def main(): shell=True, stdout=subprocess.PIPE) - # SSH TO EXECUTE cmd_client + logger.info("Waiting for 60 seconds before TEST") + for j in range(0, 6): + logger.info("Test starting in {0} seconds".format(str((6 - j)*10))) + time.sleep(10) + + i = 0 + # SSH TO EXECUTE cmd_client logger.info("TEST STARTED") try: ssh.connect(floatip_client, username="root", password="opnfv", timeout=2) command = "nc -w 5 -zv " + instance_ip_2 + " 22 2>&1" (stdin, stdout, stderr) = ssh.exec_command(command) + + # WRITE THE CORRECT WAY TO DO LOGGING + if "timed out" in stdout.readlines()[0]: + logger.info('\033[92m' + "TEST 1 [PASSED] " + "==> SSH BLOCKED" + '\033[0m') + i = i + 1 + else: + logger.error('\033[91m' + "TEST 1 [FAILED] " + "==> SSH NOT BLOCKED" + '\033[0m') + return except: logger.debug("Waiting for %s..." % floatip_client) time.sleep(6) # timeout -= 1 - # WRITE THE CORRECT WAY TO DO LOGGING - i = 0 - if "timed out" in stdout.readlines()[0]: - logger.info('\033[92m' + "TEST 1 [PASSED] " - "==> SSH BLOCKED" + '\033[0m') - i = i + 1 - else: - logger.error('\033[91m' + "TEST 1 [FAILED] " - "==> SSH NOT BLOCKED" + '\033[0m') - return - # SSH TO EXECUTE cmd_client - try: ssh.connect(floatip_client, username="root", password="opnfv", timeout=2) command = "nc -w 5 -zv " + instance_ip_2 + " 80 2>&1" (stdin, stdout, stderr) = ssh.exec_command(command) + + if "succeeded" in stdout.readlines()[0]: + logger.info('\033[92m' + "TEST 2 [PASSED] " + "==> HTTP WORKS" + '\033[0m') + i = i + 1 + else: + logger.error('\033[91m' + "TEST 2 [FAILED] " + "==> HTTP BLOCKED" + '\033[0m') + return except: logger.debug("Waiting for %s..." % floatip_client) time.sleep(6) # timeout -= 1 - if "succeeded" in stdout.readlines()[0]: - logger.info('\033[92m' + "TEST 2 [PASSED] " - "==> HTTP WORKS" + '\033[0m') - i = i + 1 - else: - logger.error('\033[91m' + "TEST 2 [FAILED] " - "==> HTTP BLOCKED" + '\033[0m') - return - # CHANGE OF CLASSIFICATION # logger.info("Changing the classification") - tacker_classi = "/home/opnfv/repos/functest/testcases/features/sfc/" + \ - TACKER_CHANGECLASSI + tacker_classi = "%s/testcases/features/sfc/%s" % \ + (FUNCTEST_REPO, TACKER_CHANGECLASSI) subprocess.call(tacker_classi, shell=True) logger.info("Wait for ODL to update the classification rules in OVS") @@ -373,41 +380,40 @@ def main(): password="opnfv", timeout=2) command = "nc -w 5 -zv " + instance_ip_2 + " 80 2>&1" (stdin, stdout, stderr) = ssh.exec_command(command) + + if "timed out" in stdout.readlines()[0]: + logger.info('\033[92m' + "TEST 3 [WORKS] " + "==> HTTP BLOCKED" + '\033[0m') + i = i + 1 + else: + logger.error('\033[91m' + "TEST 3 [FAILED] " + "==> HTTP NOT BLOCKED" + '\033[0m') + return except: logger.debug("Waiting for %s..." % floatip_client) time.sleep(6) # timeout -= 1 - if "timed out" in stdout.readlines()[0]: - logger.info('\033[92m' + "TEST 3 [WORKS] " - "==> HTTP BLOCKED" + '\033[0m') - i = i + 1 - else: - logger.error('\033[91m' + "TEST 3 [FAILED] " - "==> HTTP NOT BLOCKED" + '\033[0m') - return - # SSH TO EXECUTE cmd_client - try: ssh.connect(floatip_client, username="root", password="opnfv", timeout=2) command = "nc -w 5 -zv " + instance_ip_2 + " 22 2>&1" (stdin, stdout, stderr) = ssh.exec_command(command) + + if "succeeded" in stdout.readlines()[0]: + logger.info('\033[92m' + "TEST 4 [WORKS] " + "==> SSH WORKS" + '\033[0m') + i = i + 1 + else: + logger.error('\033[91m' + "TEST 4 [FAILED] " + "==> SSH BLOCKED" + '\033[0m') + return except: logger.debug("Waiting for %s..." % floatip_client) time.sleep(6) # timeout -= 1 - if "succeeded" in stdout.readlines()[0]: - logger.info('\033[92m' + "TEST 4 [WORKS] " - "==> SSH WORKS" + '\033[0m') - i = i + 1 - else: - logger.error('\033[91m' + "TEST 4 [FAILED] " - "==> SSH BLOCKED" + '\033[0m') - return - if i == 4: for x in range(0, 5): logger.info('\033[92m' + "SFC TEST WORKED" diff --git a/testcases/security_scan/security_scan.py b/testcases/security_scan/security_scan.py index 36b795431..7b9250215 100755 --- a/testcases/security_scan/security_scan.py +++ b/testcases/security_scan/security_scan.py @@ -12,17 +12,19 @@ # nominated node. Post scan a report is downloaded and if '--clean' is passed # all trace of the scan is removed from the remote system. -import argparse -import connect import datetime import os import sys - from ConfigParser import SafeConfigParser -from keystoneclient.auth.identity import v2 + +import argparse +from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO from keystoneclient import session +from keystoneclient.auth.identity import v2 from novaclient import client +import connect + __version__ = 0.1 __author__ = 'Luke Hinds (lhinds@redhat.com)' __url__ = 'https://wiki.opnfv.org/display/functest/Functest+Security' @@ -30,7 +32,7 @@ __url__ = 'https://wiki.opnfv.org/display/functest/Functest+Security' # Global vars INSTALLER_IP = os.getenv('INSTALLER_IP') oscapbin = 'sudo /bin/oscap' -functest_dir = '/home/opnfv/repos/functest/testcases/security_scan/' +functest_dir = '%s/testcases/security_scan/' % FUNCTEST_REPO # Apex Spefic var needed to query Undercloud if os.getenv('OS_AUTH_URL') is None: diff --git a/testcases/vnf/vIMS/vIMS.py b/testcases/vnf/vIMS/vIMS.py index 66911c1d8..ffcd09b84 100755 --- a/testcases/vnf/vIMS/vIMS.py +++ b/testcases/vnf/vIMS/vIMS.py @@ -11,28 +11,26 @@ # http://www.apache.org/licenses/LICENSE-2.0 ######################################################################## -import argparse import datetime import json import os import pprint -import requests import subprocess import time -import yaml +import argparse +import functest.utils.functest_logger as ft_logger +import functest.utils.functest_utils as functest_utils +import functest.utils.openstack_utils as os_utils import keystoneclient.v2_0.client as ksclient import novaclient.client as nvclient +import requests +from functest.utils.functest_utils import FUNCTEST_REPO as REPO_PATH from neutronclient.v2_0 import client as ntclient from clearwater import clearwater from orchestrator import orchestrator -import functest.utils.functest_logger as ft_logger -import functest.utils.functest_utils as functest_utils -import functest.utils.openstack_utils as os_utils - - pp = pprint.PrettyPrinter(indent=4) @@ -49,17 +47,11 @@ args = parser.parse_args() """ logging configuration """ logger = ft_logger.Logger("vIMS").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' -if not os.path.exists(REPO_PATH): - logger.error("Functest repository directory not found '%s'" % REPO_PATH) - exit(-1) -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = functest_utils.get_functest_yaml() # Cloudify parameters -VIMS_DIR = (REPO_PATH + +VIMS_DIR = (REPO_PATH + '/' + functest_yaml.get("general").get("directories").get("dir_vIMS")) VIMS_DATA_DIR = functest_yaml.get("general").get( "directories").get("dir_vIMS_data") + "/" diff --git a/testcases/vnf/vRNC/parser.py b/testcases/vnf/vRNC/parser.py index 00593b0b0..d22ca8ea4 100755 --- a/testcases/vnf/vRNC/parser.py +++ b/testcases/vnf/vRNC/parser.py @@ -14,11 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os import time -import yaml -import argparse +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils @@ -28,8 +26,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') PARSER_REPO = dirs.get('dir_repo_parser') diff --git a/utils/functest_utils.py b/utils/functest_utils.py index b8bd403a1..041601e21 100644 --- a/utils/functest_utils.py +++ b/utils/functest_utils.py @@ -28,7 +28,7 @@ import yaml logger = ft_logger.Logger("functest_utils").getLogger() REPOS_DIR = os.getenv('repos_dir') -FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR) +FUNCTEST_REPO = ("%s/functest" % REPOS_DIR) # ---------------------------------------------------------- @@ -152,9 +152,7 @@ def get_db_url(logger=None): """ Returns DB URL """ - with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) - f.close() + functest_yaml = get_functest_yaml() db_url = functest_yaml.get("results").get("test_db_url") return db_url @@ -329,9 +327,7 @@ def get_deployment_dir(logger=None): """ Returns current Rally deployment directory """ - with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) - f.close() + functest_yaml = get_functest_yaml() deployment_name = functest_yaml.get("rally").get("deployment_name") rally_dir = functest_yaml.get("general").get("directories").get( "dir_rally_inst") @@ -437,3 +433,10 @@ def check_test_result(test_name, ret, start_time, stop_time): def get_testcases_file(): return FUNCTEST_REPO + "/ci/testcases.yaml" + + +def get_functest_yaml(): + with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: + functest_yaml = yaml.safe_load(f) + f.close() + return functest_yaml diff --git a/utils/openstack_clean.py b/utils/openstack_clean.py index 8aba763ce..ef26be1f3 100755 --- a/utils/openstack_clean.py +++ b/utils/openstack_clean.py @@ -202,9 +202,20 @@ def remove_networks(neutron_client, default_networks, default_routers): else: remove_routers(neutron_client, routers, default_routers) + # trozet: wait for Neutron to auto-cleanup HA networks when HA router is + # deleted + time.sleep(5) + # remove networks if network_ids is not None: for net_id in network_ids: + networks = os_utils.get_network_list(neutron_client) + if networks is None: + logger.debug("No networks left to remove") + break + elif not any(network['id'] == net_id for network in networks): + logger.debug("Network %s has already been removed" % net_id) + continue logger.debug("Removing network %s ..." % net_id) if os_utils.delete_neutron_net(neutron_client, net_id): logger.debug(" > Done!") @@ -222,7 +233,7 @@ def remove_ports(neutron_client, ports, network_ids): except: logger.debug(" > WARNING: Port %s does not contain fixed_ips" % port_id) - print port + logger.info(port) router_id = port['device_id'] if len(port['fixed_ips']) == 0 and router_id == '': logger.debug("Removing port %s ..." % port_id) diff --git a/utils/openstack_snapshot.py b/utils/openstack_snapshot.py index 058f9ded3..236cf74e5 100755 --- a/utils/openstack_snapshot.py +++ b/utils/openstack_snapshot.py @@ -20,7 +20,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 # -import os import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils @@ -29,11 +28,6 @@ import yaml logger = ft_logger.Logger("openstack_snapshot").getLogger() -REPO_PATH = os.environ['repos_dir'] + '/functest/' -if not os.path.exists(REPO_PATH): - logger.error("Functest repository directory not found '%s'" % REPO_PATH) - exit(-1) - OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml( "general.openstack.snapshot_file") |