Merge "Doc for Xreview by other test projects"
authorMorgan Richomme <morgan.richomme@orange.com>
Tue, 13 Sep 2016 16:33:13 +0000 (16:33 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Tue, 13 Sep 2016 16:33:14 +0000 (16:33 +0000)
56 files changed:
ci/config_functest.yaml
ci/config_patch.yaml
ci/exec_test.sh
ci/prepare_env.py
ci/run_tests.py
ci/testcases.yaml
cli/commands/cli_env.py
cli/commands/cli_os.py
cli/commands/cli_testcase.py
cli/commands/cli_tier.py
docker/Dockerfile
docs/com/lib/font/source-sans-pro/LICENSE [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-italic.eot [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-italic.ttf [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-italic.woff [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-regular.eot [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-regular.ttf [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-regular.woff [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.eot [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.ttf [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.woff [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff [deleted file]
docs/com/lib/font/source-sans-pro/source-sans-pro.css [deleted file]
docs/com/pres/summit-Berlin.html
docs/release-notes/functest-release.rst
testcases/Controllers/ONOS/Sfc/Sfc.py
testcases/Controllers/ONOS/Sfc/Sfc_fun.py
testcases/Controllers/ONOS/Teston/adapters/client.py
testcases/Controllers/ONOS/Teston/adapters/connection.py
testcases/Controllers/ONOS/Teston/adapters/environment.py
testcases/Controllers/ONOS/Teston/adapters/foundation.py
testcases/Controllers/ONOS/Teston/onosfunctest.py
testcases/OpenStack/examples/create_instance_and_ip.py
testcases/OpenStack/rally/blacklist.txt [new file with mode: 0644]
testcases/OpenStack/rally/run_rally-cert.py
testcases/OpenStack/rally/scenario/opnfv-glance.yaml
testcases/OpenStack/rally/task.yaml
testcases/OpenStack/tempest/custom_tests/blacklist.txt
testcases/OpenStack/tempest/gen_tempest_conf.py
testcases/OpenStack/tempest/run_tempest.py
testcases/OpenStack/vPing/vping_util.py
testcases/features/copper.py
testcases/features/doctor.py
testcases/features/domino.py
testcases/features/promise.py
testcases/features/sfc/prepare_odl_sfc.bash [new file with mode: 0755]
testcases/features/sfc/sfc.py
testcases/security_scan/security_scan.py
testcases/vnf/vIMS/vIMS.py
testcases/vnf/vRNC/parser.py
utils/functest_utils.py
utils/openstack_clean.py
utils/openstack_snapshot.py
utils/openstack_utils.py

index 2b3317a..12e78d6 100644 (file)
@@ -162,20 +162,19 @@ multisite:
         installer_password: 'root'
         multisite_controller_ip: '10.1.0.50'
 promise:
-    general:
-        tenant_name: promise
-        tenant_description: promise Functionality Testing
-        user_name: promiser
-        user_pwd: test
-        image_name: promise-img
-        flavor_name: promise-flavor
-        flavor_vcpus: 1
-        flavor_ram: 128
-        flavor_disk: 0
-        network_name: promise-net
-        subnet_name: promise-subnet
-        subnet_cidr: 192.168.121.0/24
-        router_name: promise-router
+    tenant_name: promise
+    tenant_description: promise Functionality Testing
+    user_name: promiser
+    user_pwd: test
+    image_name: promise-img
+    flavor_name: promise-flavor
+    flavor_vcpus: 1
+    flavor_ram: 128
+    flavor_disk: 0
+    network_name: promise-net
+    subnet_name: promise-subnet
+    subnet_cidr: 192.168.121.0/24
+    router_name: promise-router
 
 example:
     example_vm_name: example-vm
index 4994d49..251ab1c 100644 (file)
@@ -7,4 +7,8 @@ lxd:
 
     healthcheck:
         disk_image: /home/opnfv/functest/data/cirros-0.3.4-x86_64-lxc.tar.gz
-        disk_format: raw
\ No newline at end of file
+        disk_format: raw
+fdio:
+    general:
+        flavor_extra_specs: {'hw:mem_page_size':'large'}
+        image_properties: {'hw_mem_page_size':'large'}
\ No newline at end of file
index deb505d..e402e0c 100755 (executable)
@@ -147,18 +147,11 @@ function run_test(){
             python ${FUNCTEST_REPO_DIR}/testcases/features/domino.py $report
         ;;
         "odl-sfc")
-            bash ${FUNCTEST_REPO_DIR}/testcases/features/sfc/server_presetup_CI.bash
-            ret_val=$?
-            if [ $ret_val != 0 ]; then
-                exit $ret_val
-            fi
-            bash ${FUNCTEST_REPO_DIR}/testcases/features/sfc/compute_presetup_CI.bash
-            ret_val=$?
-            if [ $ret_val != 0 ]; then
-                exit $ret_val
-            fi
-            source ${FUNCTEST_REPO_DIR}/testcases/features/sfc/tackerc
-            python ${FUNCTEST_REPO_DIR}/testcases/features/sfc/sfc.py $report
+            ODL_SFC_DIR=${FUNCTEST_REPO_DIR}/testcases/features/sfc
+            # pass FUNCTEST_REPO_DIR inside prepare_odl_sfc.bash
+            FUNCTEST_REPO_DIR=${FUNCTEST_REPO_DIR} bash ${ODL_SFC_DIR}/prepare_odl_sfc.bash || exit $?
+            source ${ODL_SFC_DIR}/tackerc
+            python ${ODL_SFC_DIR}/sfc.py $report
         ;;
         "parser")
             python ${FUNCTEST_REPO_DIR}/testcases/vnf/vRNC/parser.py $report
index 49dcdd5..63a0ad4 100755 (executable)
@@ -20,11 +20,11 @@ import subprocess
 import sys
 
 import argparse
+import yaml
+
 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()
@@ -48,21 +48,21 @@ CONFIG_FUNCTEST_PATH = os.environ["CONFIG_FUNCTEST_YAML"]
 CONFIG_PATCH_PATH = os.path.join(os.path.dirname(
     CONFIG_FUNCTEST_PATH), "config_patch.yaml")
 
-functest_yaml = ft_utils.get_functest_yaml()
-
 with open(CONFIG_PATCH_PATH) as f:
     functest_patch_yaml = yaml.safe_load(f)
 
-FUNCTEST_CONF_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_functest_conf")
+FUNCTEST_CONF_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_functest_conf')
+
 
-FUNCTEST_DATA_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_functest_data")
-FUNCTEST_RESULTS_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_results")
-DEPLOYMENT_MAME = functest_yaml.get("rally").get("deployment_name")
-TEMPEST_REPO_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_repo_tempest")
+FUNCTEST_DATA_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_functest_data')
+FUNCTEST_RESULTS_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_results')
+DEPLOYMENT_MAME = \
+    ft_utils.get_functest_config('rally.deployment_name')
+TEMPEST_REPO_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_repo_tempest')
 
 ENV_FILE = FUNCTEST_CONF_DIR + "/env_active"
 
@@ -191,7 +191,7 @@ def patch_config_file():
     for key in functest_patch_yaml:
         if key in CI_SCENARIO:
             new_functest_yaml = dict(ft_utils.merge_dicts(
-                functest_yaml, functest_patch_yaml[key]))
+                ft_utils.get_functest_yaml(), functest_patch_yaml[key]))
             updated = True
 
     if updated:
@@ -204,7 +204,7 @@ def patch_config_file():
 def verify_deployment():
     print_separator()
     logger.info("Verifying OpenStack services...")
-    cmd = ("%s/ci/check_os.sh" % FUNCTEST_REPO)
+    cmd = ("%s/ci/check_os.sh" % ft_utils.FUNCTEST_REPO)
 
     logger.debug("Executing command: %s" % cmd)
     p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
index 1947938..af8f51d 100755 (executable)
@@ -14,6 +14,7 @@ import re
 import sys
 
 import argparse
+
 import functest.ci.generate_report as generate_report
 import functest.ci.tier_builder as tb
 import functest.utils.functest_logger as ft_logger
@@ -22,7 +23,6 @@ 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,7 +41,7 @@ logger = ft_logger.Logger("run_tests").getLogger()
 
 
 """ global variables """
-EXEC_SCRIPT = ("%s/ci/exec_test.sh" % FUNCTEST_REPO)
+EXEC_SCRIPT = ("%s/ci/exec_test.sh" % ft_utils.FUNCTEST_REPO)
 CLEAN_FLAG = True
 REPORT_FLAG = False
 EXECUTED_TEST_CASES = []
index 4fcdd1b..3b76e13 100644 (file)
@@ -71,7 +71,7 @@ tiers:
                     Rally suite in smoke mode.
                 dependencies:
                     installer: ''
-                    scenario: ''
+                    scenario: '^((?!bgpvpn).)*$'
 
     -
         name: sdn_suites
index 0f5ef2c..5720126 100644 (file)
@@ -7,14 +7,15 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 #
 
+import os
+
 import click
 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 = ft_utils.FUNCTEST_REPO
 
 
 class CliEnv:
index d38dc9e..4324ae4 100644 (file)
 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
-from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO
 
-functest_yaml = ft_utils.get_functest_yaml()
 
-FUNCTEST_CONF_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_functest_conf")
+FUNCTEST_CONF_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_functest_conf')
 RC_FILE = os.getenv('creds')
-OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
-    "general.openstack.snapshot_file")
+OS_SNAPSHOT_FILE = \
+    ft_utils.get_functest_config("general.openstack.snapshot_file")
 
 
 class CliOpenStack:
@@ -80,7 +79,7 @@ class CliOpenStack:
 
     def check(self):
         self.ping_endpoint()
-        cmd = FUNCTEST_REPO + "/ci/check_os.sh"
+        cmd = ft_utils.FUNCTEST_REPO + "/ci/check_os.sh"
         ft_utils.execute_command(cmd, verbose=False)
 
     def snapshot_create(self):
index 68f9ed6..510d740 100644 (file)
 import os
 
 import click
+
 import functest.ci.tier_builder as tb
 import functest.utils.functest_utils as ft_utils
 import functest.utils.functest_vacation as vacation
-from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO
 
-functest_yaml = ft_utils.get_functest_yaml()
 
-FUNCTEST_CONF_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_functest_conf")
+FUNCTEST_CONF_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_functest_conf')
 ENV_FILE = FUNCTEST_CONF_DIR + "/env_active"
+FUNCTEST_REPO = ft_utils.FUNCTEST_REPO
 
 
 class CliTestcase:
index 3142468..aa05419 100644 (file)
 import os
 
 import click
+
 import functest.ci.tier_builder as tb
 import functest.utils.functest_utils as ft_utils
-from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO
 
-functest_yaml = ft_utils.get_functest_yaml()
 
-FUNCTEST_CONF_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_functest_conf")
+FUNCTEST_CONF_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_functest_conf')
 ENV_FILE = FUNCTEST_CONF_DIR + "/env_active"
+FUNCTEST_REPO = ft_utils.FUNCTEST_REPO
 
 
 class CliTier:
index b27b881..3d99404 100644 (file)
@@ -28,6 +28,13 @@ FROM ubuntu:14.04
 MAINTAINER Jose Lausuch <jose.lausuch@ericsson.com>
 LABEL version="0.1" description="OPNFV Functest Docker container"
 
+ARG BRANCH=master
+ARG TEMPEST_TAG=12.2.0
+ARG RALLY_TAG=0.5.0
+ARG ODL_TAG=release/beryllium-sr3
+ARG OPENSTACK_TAG=stable/mitaka
+ARG KINGBIRD_TAG=0.2.1
+ARG VIMS_TAG=stable
 ENV HOME /home/opnfv
 ENV repos_dir /home/opnfv/repos
 ENV creds /home/opnfv/functest/conf/openstack.creds
@@ -69,24 +76,31 @@ RUN mkdir -p /root/.ssh
 RUN chmod 700 /root/.ssh
 
 RUN git config --global http.sslVerify false
-RUN git clone https://gerrit.opnfv.org/gerrit/functest ${repos_dir}/functest
-RUN git clone https://gerrit.opnfv.org/gerrit/releng ${repos_dir}/releng
-RUN git clone https://gerrit.opnfv.org/gerrit/doctor ${repos_dir}/doctor
-RUN git clone -b 0.5.0 https://github.com/openstack/rally.git ${repos_dir}/rally
-RUN git clone -b 12.1.0 https://github.com/openstack/tempest.git ${repos_dir}/tempest
-RUN git clone https://git.opendaylight.org/gerrit/p/integration/test.git ${repos_dir}/odl_test
-RUN git clone -b stable https://github.com/boucherv-orange/clearwater-live-test ${repos_dir}/vims-test
-RUN git clone https://github.com/openstack/networking-bgpvpn ${repos_dir}/bgpvpn
-RUN git clone https://github.com/wuwenbin2/OnosSystemTest.git ${repos_dir}/onos
+
+# OPNFV repositories
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/functest ${repos_dir}/functest
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/copper ${repos_dir}/copper
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/moon ${repos_dir}/moon
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/sdnvpn ${repos_dir}/sdnvpn
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/domino ${repos_dir}/domino
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/parser ${repos_dir}/parser
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/doctor ${repos_dir}/doctor
+RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/ovno ${repos_dir}/ovno
 RUN git clone https://github.com/opnfv/promise ${repos_dir}/promise
-RUN git clone https://gerrit.opnfv.org/gerrit/ovno ${repos_dir}/ovno
-RUN git clone https://gerrit.opnfv.org/gerrit/copper ${repos_dir}/copper
-RUN git clone https://gerrit.opnfv.org/gerrit/moon ${repos_dir}/moon
-RUN git clone https://gerrit.opnfv.org/gerrit/sdnvpn ${repos_dir}/sdnvpn
-RUN git clone https://github.com/openstack/kingbird.git ${repos_dir}/kingbird
-RUN git clone https://gerrit.opnfv.org/gerrit/domino ${repos_dir}/domino
-RUN git clone https://gerrit.opnfv.org/gerrit/parser ${repos_dir}/parser
 RUN git clone https://gerrit.opnfv.org/gerrit/securityscanning ${repos_dir}/securityscanning
+RUN git clone https://gerrit.opnfv.org/gerrit/releng ${repos_dir}/releng
+
+
+# OpenStack repositories
+RUN git clone -b $OPENSTACK_TAG https://github.com/openstack/networking-bgpvpn ${repos_dir}/bgpvpn
+RUN git clone -b $KINGBIRD_TAG https://github.com/openstack/kingbird.git ${repos_dir}/kingbird
+RUN git clone -b $RALLY_TAG https://github.com/openstack/rally.git ${repos_dir}/rally
+RUN git clone -b $TEMPEST_TAG https://github.com/openstack/tempest.git ${repos_dir}/tempest
+
+# other repositories
+RUN git clone -b $ODL_TAG https://git.opendaylight.org/gerrit/p/integration/test.git ${repos_dir}/odl_test
+RUN git clone -b $VIMS_TAG https://github.com/boucherv-orange/clearwater-live-test ${repos_dir}/vims-test
+RUN git clone https://github.com/wuwenbin2/OnosSystemTest.git ${repos_dir}/onos
 
 RUN pip install -r ${repos_dir}/functest/docker/requirements.pip
 RUN pip install -r ${repos_dir}/rally/requirements.txt
diff --git a/docs/com/lib/font/source-sans-pro/LICENSE b/docs/com/lib/font/source-sans-pro/LICENSE
deleted file mode 100755 (executable)
index 71b7a02..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-SIL Open Font License
-
-Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
-
-—————————————————————————————-
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-—————————————————————————————-
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
-
-“Reserved Font Name” refers to any names specified as such after the copyright statement(s).
-
-“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).
-
-“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
-
-“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
-
-5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.eot b/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.eot
deleted file mode 100755 (executable)
index 32fe466..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.eot and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.ttf b/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.ttf
deleted file mode 100755 (executable)
index f9ac13f..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.ttf and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.woff b/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.woff
deleted file mode 100755 (executable)
index ceecbf1..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-italic.woff and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.eot b/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.eot
deleted file mode 100755 (executable)
index 4d29dda..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.eot and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.ttf b/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.ttf
deleted file mode 100755 (executable)
index 00c833c..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.ttf and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.woff b/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.woff
deleted file mode 100755 (executable)
index 630754a..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-regular.woff and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.eot b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.eot
deleted file mode 100755 (executable)
index 1104e07..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.eot and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.ttf b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.ttf
deleted file mode 100755 (executable)
index 6d0253d..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.ttf and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.woff b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.woff
deleted file mode 100755 (executable)
index 8888cf8..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibold.woff and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot
deleted file mode 100755 (executable)
index cdf7334..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf
deleted file mode 100755 (executable)
index 5644299..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff b/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff
deleted file mode 100755 (executable)
index 7c2d3c7..0000000
Binary files a/docs/com/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff and /dev/null differ
diff --git a/docs/com/lib/font/source-sans-pro/source-sans-pro.css b/docs/com/lib/font/source-sans-pro/source-sans-pro.css
deleted file mode 100755 (executable)
index 0707a4f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-@font-face {
-    font-family: 'Source Sans Pro';
-    src: url('source-sans-pro-regular.eot');
-    src: url('source-sans-pro-regular.eot?#iefix') format('embedded-opentype'),
-         url('source-sans-pro-regular.woff') format('woff'),
-         url('source-sans-pro-regular.ttf') format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Source Sans Pro';
-    src: url('source-sans-pro-italic.eot');
-    src: url('source-sans-pro-italic.eot?#iefix') format('embedded-opentype'),
-         url('source-sans-pro-italic.woff') format('woff'),
-         url('source-sans-pro-italic.ttf') format('truetype');
-    font-weight: normal;
-    font-style: italic;
-}
-
-@font-face {
-    font-family: 'Source Sans Pro';
-    src: url('source-sans-pro-semibold.eot');
-    src: url('source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'),
-         url('source-sans-pro-semibold.woff') format('woff'),
-         url('source-sans-pro-semibold.ttf') format('truetype');
-    font-weight: 600;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Source Sans Pro';
-    src: url('source-sans-pro-semibolditalic.eot');
-    src: url('source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'),
-         url('source-sans-pro-semibolditalic.woff') format('woff'),
-         url('source-sans-pro-semibolditalic.ttf') format('truetype');
-    font-weight: 600;
-    font-style: italic;
-}
\ No newline at end of file
index 62e86c5..3d1f125 100755 (executable)
                                                * New internal test cases: healthcheck, security
                                                * New controler: OpenContrail?
                                                * New feature projects (domino, multisites, movie, parser, moon, copper, models, onos-sfc...)                                           
-                                               * ARM Support (congratulations to ANEA team!)
+                                               * ARM Support (congratulations to ENEA team!)
                                                * Simplified feature project integration journey
                                        </section>
 
index d026b78..47efa91 100644 (file)
@@ -242,14 +242,24 @@ Colorado known restrictions/issues
 |           |           | metadata service excluded from onos scenarios|
 |           |           | https://gerrit.opnfv.org/gerrit/#/c/18729/   |
 +-----------+-----------+----------------------------------------------+
-| any       | odl_l3-*  | vPing_ssh and Tempest cases related to using |
-|           |           | floating IP addresses are excluded (ODL bug) |
+| 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.                  |
+|           |           | floating ips also excluded. Some performance |
+|           |           | issues have been detected in this scenario   |
+|           |           | (i.e. BGPVPN extension enabled) when running |
+|           |           | commands against the OpenStack APIs, thus    |
+|           |           | Rally sanity test case has been disabled.    |
+|           |           | Performance issues seem to be connected to   |
+|           |           | the ODL version. It is planned to reintroduce|
+|           |           | Rally sanity in Colorado 2.0 with the        |
+|           |           | adoption of ODL Boron release.               |
 +-----------+-----------+----------------------------------------------+
 | compass   | moon      | First ODL test FAILS because ODL/Openstack   |
 |           |           | federation done in moon is partial. Only     |
@@ -299,6 +309,8 @@ Test results are available in:
 
  - jenkins logs on CI: https://build.opnfv.org/ci/view/functest/
 
+ - jenkins logs on ARM CI: https://build.opnfv.org/ci/view/armband/
+
 
 
 Open JIRA tickets
index 99d07aa..2861198 100644 (file)
@@ -1,7 +1,7 @@
 """Script to Test the SFC scenarios in ONOS."""
 # !/usr/bin/python
 #
-# Copyright (c) 2015 All rights reserved
+# Copyright (c) CREATED5 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
 
 # Testcase 1 : Prerequisites configuration for SFC
 # Testcase 2 : Creation of 3 VNF Nodes and Attaching Ports
-# TestCase 3 : Configure  SFC [Port pair,Port Group ,Flow classifer
-# TestCase 4 : Configure Port Chain and verify the flows are added.
-# TestCase 5 : Verify  traffic with VNF node.
-# TestCase 6 : Remove the Port Chain and Verify the traffic.
+# Testcase 3 : Configure  SFC [Port pair,Port Group ,Flow classifer
+# Testcase 4 : Configure Port Chain and verify the flows are added.
+# Testcase 5 : Verify  traffic with VNF node.
+# Testcase 6 : Remove the Port Chain and Verify the traffic.
 # Testcase 7 : Cleanup
 # ###########################################################################
 #
 
+import time
 import functest.utils.functest_logger as ft_logger
 import functest.utils.functest_utils as functest_utils
-import time
 from Sfc_fun import Sfc_fun
 
+logger = ft_logger.Logger("sfc").getLogger()
+Sfc_obj = Sfc_fun()
 
-class Sfc:
-    """Script to Test the SFC scenarios in ONOS."""
-    logger = ft_logger.Logger("sfc").getLogger()
-    Sfc_obj = Sfc_fun()
-    start_time = time.time()
-    status = "PASS"
-    print("################################################################")
-    print("                    OPNFV SFC Script             ")
-    print("################################################################")
+OK = 200
+CREATED = 201
+ACCEPTED = 202
+NO_CONTENT = 204
+
+
+def PreConfig():
     logger.info("Testcase 1 : Prerequisites configuration for SFC")
-    #########################################################################
-    logger.info("\t1.1 Creation of Auth-Token")
-    if (Sfc_obj.getToken() == 200):
-        logger.info("\t\tCreation of Token is successfull")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of Token is NOT successfull")
-    #########################################################################
-    logger.info("\t1.2 Creation of Network")
-    if (Sfc_obj.createNetworks() == 201):
-        logger.info("\t\tCreation of network is successfull")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of network is NOT successfull")
-    #########################################################################
-    logger.info("\t1.3 Creation of Subnetwork")
-    if (Sfc_obj.createSubnets() == 201):
-        logger.info("\t\tCreation of Subnetwork is successfull")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of Subnetwork is NOT successfull")
-    print ("\n###########################################################\n")
-    ########################################################################
-    logger.info("Testcase 2 : Creation of 3 VNF Nodes and Attaching Ports")
-    #########################################################################
-    logger.info("\t2.1 Creation of Ports")
-    if (Sfc_obj.createPorts() == 201):
-        logger.info("\t\tCreation of Port is successfull")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of Port is NOT successfull")
-    #########################################################################
-    logger.info("\t2.2 Creation of VM-Compute-Node")
-    if (Sfc_obj.createVm() == 202):
-        logger.info("\t\tCreation of VM is successfull")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of VM is NOT successfull")
-    #########################################################################
-    logger.info("\t2.3 Check VM Status")
-    if (Sfc_obj.checkVmState() == 200):
-        logger.info("\t\tVM are in active state")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :   VM is NOT Active")
-    #########################################################################
-    logger.info("\t\t2.4 Router Creation")
-    if (Sfc_obj.createRouter() == 201):
-        logger.info("\t\t Router Creation is Successful")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :   Router Creation is NOT Successful")
-    #########################################################################
-    logger.info("\t\t2.5 Attachement of Interface to VM")
-    if (Sfc_obj.attachInterface() == 200):
-        logger.info("\t\t Interface attached to VM")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :   Interface NOT attached to VM")
-    #########################################################################
-    logger.info("\t\t2.6 Attachement of FLoating Ip to VM")
-    if (Sfc_obj.addFloatingIp() == 202):
-        logger.info("\t\t Floating Ip attached to VM SUccessful")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :   Floating Ip NOT attached to VM ")
-    print ("\n###########################################################\n")
-    ########################################################################
-    logger.info(
-        "TestCase 3 : Configure SFC [Portair,PortGroup,Flow classifer]")
-    #########################################################################
-    logger.info("\t3.1 Creation of Port Pair")
-    if (Sfc_obj.createPortPair() == 201):
-        logger.info("\t\tCreation of Port pair is successful")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Creation of Port pair is NOT successful")
+    logger.info("1.1 Creation of Auth-Token")
+    if (Sfc_obj.getToken() == OK):
+        logger.info("Creation of Token is successfull")
+    else:
+        logger.error("  :  Creation of Token is NOT successfull")
+        fail()
+    logger.info("1.2 Creation of Network")
+    if (Sfc_obj.createNetworks() == CREATED):
+        logger.info("Creation of network is successfull")
+    else:
+        logger.error("  :  Creation of network is NOT successfull")
+        fail()
+    logger.info("1.3 Creation of Subnetwork")
 
-    #########################################################################
-    logger.info("\t3.2 Getting the  Port Pair ID")
-    if (Sfc_obj.getPortPair() == 200):
-        logger.info("\t\tSuccessfully got Port Pair ID")
+    if (Sfc_obj.createSubnets() == CREATED):
+        logger.info("Creation of Subnetwork is successfull")
     else:
-        status = "FAIL"
-        logger.error("\t\t  :  UnSuccessfully got Port Pair ID")
+        logger.error("  :  Creation of Subnetwork is NOT successfull")
+        fail()
 
-    #########################################################################
-    logger.info("\t3.3 Creation of Port Pair Group")
-    if (Sfc_obj.createPortGroup() == 201):
-        logger.info("\t\tPort Pair Group successfully Created")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Port Pair Group NOT successfully Created")
 
-    #########################################################################
-    logger.info("\t3.4 Getting Port Pair Group ID ")
+def CreateNodes():
+    logger.info("Testcase 2 : Creation of 3 VNF Nodes and Attaching Ports")
+    logger.info("2.1 Creation of Ports")
+    if (Sfc_obj.createPorts() == CREATED):
+        logger.info("Creation of Port is successfull")
+    else:
+        logger.error("  :  Creation of Port is NOT successfull")
+        fail()
+    logger.info("2.2 Creation of VM-Compute-Node")
+    if (Sfc_obj.createVm() == ACCEPTED):
+        logger.info("Creation of VM is successfull")
+    else:
+        logger.error("  :  Creation of VM is NOT successfull")
+        fail()
+    logger.info("2.3 Check VM Status")
+    if (Sfc_obj.checkVmState() == OK):
+        logger.info("VM are in active state")
+    else:
+        logger.error("  :   VM is NOT Active")
+        fail()
+    logger.info("2.4 Router Creation")
+    if (Sfc_obj.createRouter() == CREATED):
+        logger.info("Creation of Router is Successful")
+    else:
+        logger.error("  :   Router Creation is NOT Successful")
+        fail()
+    logger.info("2.5 Attachement of Interface to VM")
+    if (Sfc_obj.attachInterface() == OK):
+        logger.info("Interface attached to VM")
+    else:
+        logger.error("  :   Interface NOT attached to VM")
+        fail()
+    logger.info("2.6 Attachement of FLoating Ip to VM")
+    if (Sfc_obj.addFloatingIp() == ACCEPTED):
+        logger.info("Floating Ip attached to VM SUccessful")
+    else:
+        logger.error("  :   Floating Ip NOT attached to VM ")
+        fail()
 
-    if (Sfc_obj.getPortGroup() == 200):
-        logger.info("\t\tPort Pair Group ID successfully received")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Port Pair Group ID NOT successfully received")
 
-    #########################################################################
-    logger.info("\t3.5 Creation of Flow Classifier")
-    if (Sfc_obj.createFlowClassifier() == 201):
-        logger.info("\t\tFlow Classifier successfully Created")
-    else:
-        status = "FAIL"
-        logger.error("\t\t  :  Flow Classifier NOT successfully Created")
-    print ("\n###########################################################\n")
-    ########################################################################
+def ConfigSfc():
     logger.info(
-        "TestCase 4 : Configure Port Chain and verify flows are added")
-    #########################################################################
-    logger.info("\t4.1 Creation of PortChain")
-    if (Sfc_obj.createPortChain() == 201):
-        logger.info("\t\tPortChain successfully Created")
+        "Testcase 3 : Configure SFC [Portair,PortGroup,Flow classifer]")
+    logger.info("3.1 Creation of Port Pair")
+    if (Sfc_obj.createPortPair() == CREATED):
+        logger.info("Creation of Port pair is successful")
+    else:
+        logger.error("  :  Creation of Port pair is NOT successful")
+        fail()
+    logger.info("3.2 Getting the  Port Pair ID")
+    if (Sfc_obj.getPortPair() == OK):
+        logger.info("Port Pair ID is successfully got")
+    else:
+        logger.error("  :  UnSuccessfully got Port Pair ID")
+        fail()
+    logger.info("3.3 Creation of Port Pair Group")
+    if (Sfc_obj.createPortGroup() == CREATED):
+        logger.info("Creation of Port Pair Group is successful")
+    else:
+        logger.error("  :  Creation of Port Pair Group is NOT successful")
+        fail()
+    logger.info("3.4 Getting Port Pair Group ID ")
+    if (Sfc_obj.getPortGroup() == OK):
+        logger.info("Port Pair Group ID is successfully received")
+    else:
+        logger.error("  :  Port Pair Group ID is NOT successfully got")
+        fail()
+    logger.info("3.5 Creation of Flow Classifier")
+    if (Sfc_obj.createFlowClassifier() == CREATED):
+        logger.info("Creation of Flow Classifier is successful")
+    else:
+        logger.error("  :  Creation of Flow Classifier is NOT successful")
+        fail()
+    logger.info(
+        "Testcase 4 : Configure Port Chain and verify flows are added")
+    logger.info("4.1 Creation of Port Chain")
+    if (Sfc_obj.createPortChain() == CREATED):
+        logger.info("Creation of Port Chain is successful")
     else:
-        status = "FAIL"
-        logger.error("\t\tPortChain NOT successfully Created")
-    print ("\n###########################################################\n")
-    #########################################################################
-    logger.info("\tTestCase 5 : Verify  traffic with VNF node.")
+        logger.error("Creation of Port Chain is NOT successful")
+
+
+def VerifySfcTraffic():
+    status = "PASS"
+    logger.info("Testcase 5 : Verify  traffic with VNF node.")
     if (Sfc_obj.loginToVM() == "1"):
-        logger.info("\t\tSFC function Working")
+        logger.info("SFC function Working")
     else:
+        logger.error("  :  SFC function not working")
         status = "FAIL"
-        logger.error("\t\t  :  SFC function not working")
-    print ("\n###########################################################\n")
-    #########################################################################
-    logger.info("TestCase 6 : Remove the Port Chain and Verify the traffic")
-    if (Sfc_obj.deletePortChain() == 204):
+
+    logger.info("Testcase 6 : Remove the Port Chain and Verify the traffic")
+    if (Sfc_obj.deletePortChain() == NO_CONTENT):
         if (Sfc_obj.loginToVM() == "0"):
-            logger.info("\t\tSFC function is removed Successfully")
+            logger.info("SFC function is removed Successfully")
         else:
+            logger.error(":SFC function not Removed. Have some problem")
             status = "FAIL"
-            logger.error("\t\t:SFC function not Removed.Have some problem")
-        if (Sfc_obj.deleteFlowClassifier() == 204):
-            if (Sfc_obj.deletePortGroup() == 204):
-                if (Sfc_obj.deletePortPair() == 204):
+        if (Sfc_obj.deleteFlowClassifier() == NO_CONTENT):
+            if (Sfc_obj.deletePortGroup() == NO_CONTENT):
+                if (Sfc_obj.deletePortPair() == NO_CONTENT):
                     logger.info(
-                        "\t\tSFC configuration is deleted successfully")
+                        "SFC configuration is deleted successfully")
                 else:
-                    status = "FAIL"
-                    logger.error("\t\t  :  Port pair configuration is NOT\
+                    logger.error("  :  Port pair configuration is NOT\
                                   deleted successfully")
+                    status = "FAIL"
             else:
-                status = "FAIL"
-                logger.error("\t\t  :  Port Group configuration is NOT \
+                logger.error("  :  Port Group configuration is NOT \
                              deleted successfully")
-        else:
                 status = "FAIL"
-                logger.error("\t\t  :  Flow classifier configuration is NOT \
+        else:
+                logger.error("  :  Flow classifier configuration is NOT \
                              deleted successfully")
+                status = "FAIL"
     else:
-        status = "FAIL"
-        logger.error("\t\t:PortChain configuration is NOT deleted \
+        logger.error(":PortChain configuration is NOT deleted \
                      successfully")
-    print ("\n###########################################################n")
-    #######################################################################
+        status = "FAIL"
+    if (status == "FAIL"):
+        fail()
+
+
+def CleanUp():
     logger.info("Testcase 7 : Cleanup")
-    if (Sfc_obj.cleanup() == 204):
-        logger.info("\t\tCleanUp is successfull")
+    if (Sfc_obj.cleanup() == NO_CONTENT):
+        logger.info("CleanUp is successfull")
     else:
-        status = "FAIL"
-        logger.error("\t\t  :  CleanUp is NOT successfull")
-    print ("###############################################################")
+        logger.error("  :  CleanUp is NOT successfull")
+
+
+def fail():
+    CleanUp()
+    exit(-1)
+
+
+def main():
+    """Script to Test the SFC scenarios in ONOS."""
+    start_time = time.time()
+    PreConfig()
+    CreateNodes()
+    ConfigSfc()
+    VerifySfcTraffic()
+    CleanUp()
+    status = "PASS"
     logger.info("Summary :")
     try:
         logger.debug("Push ONOS SFC results into DB")
@@ -226,8 +224,5 @@ class Sfc:
     except:
         logger.error("Error pushing results into Database")
 
-    if status == "FAIL":
-        EXIT_CODE = -1
-        exit(EXIT_CODE)
-
-    print("############################END OF SCRIPT ######################")
+if __name__ == '__main__':
+    main()
index 0d9eaf8..69e076d 100644 (file)
@@ -1,14 +1,19 @@
-"""SFC functions."""
+import os
+import re
+import time
 import json
+import requests
+
 from multiprocessing import Process
 from multiprocessing import Queue
-import os
-import re
-import time
+from pexpect import pxssh
 
 import functest.utils.functest_logger as ft_logger
-from pexpect import pxssh
-import requests
+
+OK = 200
+CREATED = 201
+ACCEPTED = 202
+NO_CONTENT = 204
 
 
 class Sfc_fun:
@@ -105,10 +110,10 @@ class Sfc_fun:
         url = 'http://' + self.keystone_hostname + \
             ':5000/' + self.osver + '/tokens'
         data = '{"auth": {"tenantName": "admin",  "passwordCredentials":\
-                { "username": "admin", "password": "console"}}}'
+               { "username": "admin", "password": "console"}}}'
         headers = {"Accept": "application/json"}
         response = requests.post(url, headers=headers,  data=data)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             json1_data = json.loads(response.content)
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
@@ -133,7 +138,7 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.post(url, headers=headers,  data=data)
-        if (response.status_code == 201):
+        if (response.status_code == CREATED):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
 
@@ -164,7 +169,7 @@ class Sfc_fun:
                    "X-Auth-Token": self.token_id}
         response = requests.post(url, headers=headers,  data=data)
 
-        if (response.status_code == 201):
+        if (response.status_code == CREATED):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
             json1_data = json.loads(response.content)
@@ -197,7 +202,7 @@ class Sfc_fun:
                        "X-Auth-Token": self.token_id}
             response = requests.post(url, headers=headers,  data=data)
 
-            if (response.status_code == 201):
+            if (response.status_code == CREATED):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
 
@@ -217,10 +222,10 @@ class Sfc_fun:
         headers = {"Accept": "application/json", "Content-Type": "application/\
                     octet-stream",  "X-Auth-Token": self.token_id}
         response = requests.get(url, headers=headers)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            self.logger.info("\tFireWall Image is available")
+            self.logger.info("FireWall Image is available")
             json1_data = json.loads(response.content)
             self.logger.debug(json1_data)
             self.image_id = json1_data['images'][0]['id']
@@ -233,10 +238,10 @@ class Sfc_fun:
                    "application/json", "X-Auth-Token": self.token_id}
         response = requests.get(url, headers=headers)
 
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            self.logger.info("\tFlavor is available")
+            self.logger.info("Flavor is available")
             json1_data = json.loads(response.content)
             self.logger.debug(json1_data)
             self.flavorRef = json1_data['flavors'][0]['id']
@@ -267,10 +272,11 @@ class Sfc_fun:
             headers = {"Accept": "application/json", "Content-Type":
                        "application/json", "X-Auth-Token": self.token_id}
             response = requests.post(url, headers=headers,  data=data)
-            if (response.status_code == 202):
+            if (response.status_code == ACCEPTED):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                self.logger.info("\tCreation of VM is successfull")
+                info = "Creation of VM" + str(y) + " is successfull"
+                self.logger.debug(info)
 
                 json1_data = json.loads(response.content)
                 self.logger.debug(json1_data)
@@ -291,18 +297,19 @@ class Sfc_fun:
             headers = {"Accept": "application/json",  "X-Auth-Token":
                        self.token_id}
             response = requests.get(url, headers=headers)
-            if (response.status_code == 200):
+            if (response.status_code == OK):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
                 json1_data = json.loads(response.content)
                 self.logger.debug(json1_data)
                 self.vm_active = json1_data['servers'][0]['status']
                 if (self.vm_active == "ACTIVE"):
-                    print ("\t\t\t\t\t\tVM" + str(y) + " is Active : " +
-                           self.vm_active)
+                    info = "VM" + str(y) + \
+                        " is Active : " + self.vm_active
                 else:
-                    print ("\t\t\t\t\t\tVM" + str(y) + " is NOT Active : " +
-                           self.vm_active)
+                    info = "VM" + str(y) + " is NOT Active : " + \
+                        self.vm_active
+                self.logger.debug(info)
             else:
                 return(response.status_code)
         return(response.status_code)
@@ -328,9 +335,10 @@ class Sfc_fun:
             headers = {"Accept": "application/json", "X-Auth-Token":
                        self.token_id}
             response = requests.post(url, headers=headers,  data=data)
-            if (response.status_code == 201):
-                print ("\t\t\t\tCreation of Port Pair PP" + str(p) +
-                       " is successful")
+            if (response.status_code == CREATED):
+                info = "Creation of Port Pair PP" + str(p) + \
+                       " is successful"
+                self.logger.debug(info)
             else:
                 return(response.status_code)
 
@@ -345,7 +353,7 @@ class Sfc_fun:
                        self.token_id}
             response = requests.get(url, headers=headers)
 
-            if (response.status_code == 200):
+            if (response.status_code == OK):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
                 json1_data = json.loads(response.content)
@@ -373,9 +381,10 @@ class Sfc_fun:
             headers = {"Accept": "application/json", "X-Auth-Token":
                        self.token_id}
             response = requests.post(url, headers=headers,  data=data)
-            if (response.status_code == 201):
-                print ("\t\t\t\tCreation of Port Group PG" + str(p) +
-                       "is successful")
+            if (response.status_code == CREATED):
+                info = "Creation of Port Group PG" + str(p) + \
+                    "is successful"
+                self.logger.debug(info)
             else:
                 return(response.status_code)
 
@@ -390,7 +399,7 @@ class Sfc_fun:
                        self.token_id}
             response = requests.get(url, headers=headers)
 
-            if (response.status_code == 200):
+            if (response.status_code == OK):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
                 json1_data = json.loads(response.content)
@@ -421,10 +430,10 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.post(url, headers=headers,  data=data)
-        if (response.status_code == 201):
+        if (response.status_code == CREATED):
             json1_data = json.loads(response.content)
             self.flow_class_if = json1_data['flow_classifier']['id']
-            self.logger.info("\tCreation of Flow Classifier is successful")
+            self.logger.debug("Creation of Flow Classifier is successful")
             return(response.status_code)
         else:
             return(response.status_code)
@@ -452,8 +461,8 @@ class Sfc_fun:
                    "Content-Type": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.post(url, headers=headers,  data=data)
-        if (response.status_code == 201):
-            self.logger.info("\tCreation of PORT CHAIN is successful")
+        if (response.status_code == CREATED):
+            self.logger.debug("Creation of PORT CHAIN is successful")
             json1_data = json.loads(response.content)
             self.PC_id = json1_data['port_chain']['id']
             return(response.status_code)
@@ -466,13 +475,13 @@ class Sfc_fun:
         response = requests.get('http://' + self.onos_hostname +
                                 ':8181/onos/v1/flows',
                                 auth=("karaf",  "karaf"))
-        if (response.status_code == 200):
-            self.logger.info("\tFlow is successfully Queries")
+        if (response.status_code == OK):
+            self.logger.debug("Flow is successfully Queries")
             json1_data = json.loads(response.content)
             self.flowadd = json1_data['flows'][0]['state']
 
             if (self.flowadd == "ADDED"):
-                self.logger.info("\tFlow is successfully added to OVS")
+                self.logger.info("Flow is successfully added to OVS")
                 return(response.status_code)
             else:
                 return(404)
@@ -495,10 +504,10 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.post(url, headers=headers,  data=data)
-        if (response.status_code == 201):
+        if (response.status_code == CREATED):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            self.logger.info("\tCreation of Router is successfull")
+            self.logger.debug("Creation of Router is successfull")
             json1_data = json.loads(response.content)
             self.logger.debug(json1_data)
             self.router_id = json1_data['router']['id']
@@ -513,7 +522,7 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.get(url, headers=headers)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
             json1_data = json.loads(response.content)
@@ -525,7 +534,7 @@ class Sfc_fun:
                 return(response.status_code)
         ############################################################
 
-        self.logger.info("\tAttachment of Instance interface to Router")
+        self.logger.info("Attachment of Instance interface to Router")
         Dicdata = {}
         if self.subnetId != '':
             Dicdata['subnet_id'] = self.subnetId
@@ -536,14 +545,14 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.put(url, headers=headers,  data=data)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            self.logger.info("\tInterface attached successfull")
+            self.logger.info("Interface attached successfull")
         else:
             return(response.status_code)
         ############################################################
-        self.logger.info("\tAttachment of Gateway to Router")
+        self.logger.info("Attachment of Gateway to Router")
 
         Dicdata1 = {}
         if self.pub_net_id != 0:
@@ -557,10 +566,10 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.put(url, headers=headers,  data=data)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            self.logger.info("\tGateway Interface attached successfull")
+            self.logger.info("Gateway Interface attached successfull")
             return(response.status_code)
         else:
             return(response.status_code)
@@ -576,16 +585,16 @@ class Sfc_fun:
             headers = {"Accept": "application/json",
                        "X-Auth-Token": self.token_id}
             response = requests.post(url, headers=headers,  data=data)
-            if (response.status_code == 200):
+            if (response.status_code == OK):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                self.logger.info("\tFloating ip created successfully")
+                self.logger.info("Floating ip created successfully")
                 json1_data = json.loads(response.content)
                 self.logger.debug(json1_data)
                 self.vm_public_ip.append(json1_data['floating_ip']['ip'])
                 self.vm_public_id.append(json1_data['floating_ip']['id'])
             else:
-                self.logger.error("\tFloating ip NOT created successfully")
+                self.logger.error("Floating ip NOT created successfully")
 
             Dicdata1 = {}
             if self.address != '':
@@ -598,10 +607,10 @@ class Sfc_fun:
             headers = {"Accept": "application/json",
                        "X-Auth-Token": self.token_id}
             response = requests.post(url, headers=headers,  data=data)
-            if(response.status_code == 202):
+            if(response.status_code == ACCEPTED):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                self.logger.info("\tPublic Ip successfully added to VM")
+                self.logger.info("Public Ip successfully added to VM")
             else:
                 return(response.status_code)
         return(response.status_code)
@@ -623,9 +632,9 @@ class Sfc_fun:
             ping_re = re.search("transmitted.*received",  s.before).group()
             x = re.split('\s+',  ping_re)
             if (x[1] >= "1"):
-                self.logger.info("\tPing is Successfull")
+                self.logger.info("Ping is Successfull")
             else:
-                self.logger.info("\tPing is NOT Successfull")
+                self.logger.info("Ping is NOT Successfull")
 
         def vm1(queue1):
             s = pxssh.pxssh()
@@ -638,10 +647,10 @@ class Sfc_fun:
             output_pack = s.before
 
             if(output_pack.find("nshc") != -1):
-                self.logger.info("\tThe packet has reached VM2 Instance")
+                self.logger.info("The packet has reached VM2 Instance")
                 queue1.put("1")
             else:
-                self.logger.info("\tPacket not received in Instance")
+                self.logger.info("Packet not received in Instance")
                 queue1.put("0")
 
         def ping(ip, timeout=300):
@@ -670,7 +679,7 @@ class Sfc_fun:
             p1.join(10)
             return (queue1.get())
         else:
-            print("Thread didnt run")
+            self.logger.error("Thread didnt run")
 
     """##################################################################"""
     """ ########################  Stats Functions ################# #####"""
@@ -680,8 +689,8 @@ class Sfc_fun:
         response = requests.get('http://' + self.onos_hostname +
                                 ':8181/onos/vtn/portChainDeviceMap/' +
                                 self.PC_id, auth=("karaf", "karaf"))
-        if (response.status_code == 200):
-            self.logger.info("\tPortChainDeviceMap is successfully Queries")
+        if (response.status_code == OK):
+            self.logger.info("PortChainDeviceMap is successfully Queries")
             return(response.status_code)
         else:
             return(response.status_code)
@@ -691,8 +700,8 @@ class Sfc_fun:
         response = requests.get('http://' + self.onos_hostname +
                                 ':8181/onos/vtn/portChainSfMap/' +
                                 self.PC_id, auth=("karaf",  "karaf"))
-        if (response.status_code == 200):
-            self.logger.info("\tportChainSfMap is successfully Queries")
+        if (response.status_code == OK):
+            self.logger.info("portChainSfMap is successfully Queries")
             return(response.status_code)
         else:
             return(response.status_code)
@@ -706,7 +715,7 @@ class Sfc_fun:
         headers = {"Accept": "application/json", "Content-Type":
                    "application/json", "X-Auth-Token": self.token_id}
         response = requests.delete(url, headers=headers)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
             return(response.status_code)
@@ -720,7 +729,7 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.delete(url, headers=headers)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
             return(response.status_code)
@@ -735,10 +744,9 @@ class Sfc_fun:
             headers = {"Accept": "application/json", "X-Auth-Token":
                        self.token_id}
             response = requests.delete(url, headers=headers)
-            if (response.status_code == 204):
+            if (response.status_code == NO_CONTENT):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                print ("\n\t\tPort " + self.port_grp_id[p] + "Deleted")
             else:
                 return(response.status_code)
         return(response.status_code)
@@ -751,7 +759,7 @@ class Sfc_fun:
             headers = {"Accept": "application/json",
                        "X-Auth-Token": self.token_id}
             response = requests.delete(url, headers=headers)
-            if (response.status_code == 204):
+            if (response.status_code == NO_CONTENT):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
             else:
@@ -760,21 +768,21 @@ class Sfc_fun:
 
     def cleanup(self):
         """Cleanup."""
-        print ("\n\t\tDeleting the VMs")
+        self.logger.info("Deleting VMs")
         for y in range(0, 3):
             url = 'http://' + self.nova_hostname + \
                 ':8774/v2.1/servers/' + self.vm[y]
             headers = {"Accept": "application/json",
                        "X-Auth-Token": self.token_id}
             response = requests.delete(url, headers=headers)
-            if (response.status_code == 204):
+            if (response.status_code == NO_CONTENT):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                print ("\n\t\tVM" + str(y) + " is Deleted : ")
+                self.logger.debug("VM" + str(y) + " is Deleted : ")
                 time.sleep(10)
             else:
                 return(response.status_code)
-        print ("\n\t\tDeletion of Ports")
+        self.logger.info("Deleting Ports")
         for x in range(self.i, self.numTerms):
             url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
                   '/ports/' + self.port_num[x]
@@ -782,13 +790,13 @@ class Sfc_fun:
                        self.token_id}
             response = requests.delete(url, headers=headers)
 
-            if (response.status_code == 204):
+            if (response.status_code == NO_CONTENT):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
-                print ("\n\t\tPort" + str(x) + "  Deleted")
+                self.logger.debug("Port" + str(x) + "  Deleted")
             else:
                 return(response.status_code)
-        print ("\n\t\tDeleting Router")
+        self.logger.info("Deleting Router")
 
         Dicdata = {}
         Dicdata['external_gateway_info'] = {}
@@ -799,7 +807,7 @@ class Sfc_fun:
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.put(url, headers=headers,  data=data)
-        if (response.status_code == 200):
+        if (response.status_code == OK):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
             Dicdata1 = {}
@@ -812,16 +820,15 @@ class Sfc_fun:
             headers = {"Accept": "application/json",
                        "X-Auth-Token": self.token_id}
             response = requests.put(url, headers=headers,  data=data)
-            if (response.status_code == 200):
+            if (response.status_code == OK):
                 url = ('http://' + self.neutron_hostname + ':9696/' +
                        self.osver + '/routers/' + self.router_id)
                 headers = {"Accept": "application/json",  "X-Auth-Token":
                            self.token_id}
                 response = requests.delete(url, headers=headers)
-                if (response.status_code == 204):
+                if (response.status_code == NO_CONTENT):
                     self.logger.debug(response.status_code)
                     self.logger.debug(response.content)
-                    print ("\n\t\tDeletion of Router is successfull")
                 else:
                     return(response.status_code)
             else:
@@ -829,27 +836,26 @@ class Sfc_fun:
         else:
             return(response.status_code)
 
-        print ("\n\t\tDeletion of Network")
+        self.logger.info("Deleting Network")
         url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
               '/networks/' + self.net_id
         headers = {"Accept": "application/json",
                    "X-Auth-Token": self.token_id}
         response = requests.delete(url, headers=headers)
-        if (response.status_code == 204):
+        if (response.status_code == NO_CONTENT):
             self.logger.debug(response.status_code)
             self.logger.debug(response.content)
-            print ("\n\t\tNetwork deleted Successfully")
         else:
             return(response.status_code)
 
-        print ("\n\t\tDeletion of Floating ip")
+        self.logger.info("Deleting Floating ip")
         for ip_num in range(0, 2):
             url = 'http://' + self.neutron_hostname + ':9696/' + self.osver + \
                   '/floatingips/' + self.vm_public_id[ip_num]
             headers = {"Accept": "application/json", "X-Auth-Token":
                        self.token_id}
             response = requests.delete(url, headers=headers)
-            if (response.status_code == 204):
+            if (response.status_code == NO_CONTENT):
                 self.logger.debug(response.status_code)
                 self.logger.debug(response.content)
             else:
index 77de092..6b3285e 100644 (file)
@@ -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)
index 16f2ef3..b2a2e3d 100644 (file)
@@ -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):
         """
index 2316773..f2755b6 100644 (file)
@@ -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):
         """
index 70c84ac..5c42c35 100644 (file)
@@ -17,8 +17,7 @@ import os
 import re
 import time
 
-import yaml
-from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO
+import functest.utils.functest_utils as ft_utils
 
 
 class foundation:
@@ -26,7 +25,7 @@ class foundation:
     def __init__(self):
 
         # currentpath = os.getcwd()
-        REPO_PATH = FUNCTEST_REPO + '/'
+        REPO_PATH = ft_utils.FUNCTEST_REPO + '/'
         currentpath = REPO_PATH + 'testcases/Controllers/ONOS/Teston/CI'
         self.cipath = currentpath
         self.logdir = os.path.join(currentpath, 'log')
@@ -49,42 +48,36 @@ class foundation:
                             filemode='w')
         filelog = logging.FileHandler(self.logfilepath)
         logging.getLogger('Functest').addHandler(filelog)
-        print loginfo
         logging.info(loginfo)
 
     def getdefaultpara(self):
         """
         Get Default Parameters value
         """
-        with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f:
-            functest_yaml = yaml.safe_load(f)
-
-        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.installer_master = str(functest_yaml.get("ONOS").
-                                    get("environment").get("installer_master"))
-        self.installer_master_username = str(functest_yaml.get("ONOS").
-                                             get("environment").
-                                             get("installer_master_username"))
-        self.installer_master_password = str(functest_yaml.get("ONOS").
-                                             get("environment").
-                                             get("installer_master_password"))
+        self.Result_DB = str(
+            ft_utils.get_functest_config('results.test_db_url'))
+        self.masterusername = str(
+            ft_utils.get_functest_config('ONOS.general.onosbench_username'))
+        self.masterpassword = str(
+            ft_utils.get_functest_config('ONOS.general.onosbench_password'))
+        self.agentusername = str(
+            ft_utils.get_functest_config('ONOS.general.onoscli_username'))
+        self.agentpassword = str(
+            ft_utils.get_functest_config('ONOS.general.onoscli_password'))
+        self.runtimeout = \
+            ft_utils.get_functest_config('ONOS.general.runtimeout')
+        self.OCT = str(ft_utils.get_functest_config('ONOS.environment.OCT'))
+        self.OC1 = str(ft_utils.get_functest_config('ONOS.environment.OC1'))
+        self.OC2 = str(ft_utils.get_functest_config('ONOS.environment.OC2'))
+        self.OC3 = str(ft_utils.get_functest_config('ONOS.environment.OC3'))
+        self.OCN = str(ft_utils.get_functest_config('ONOS.environment.OCN'))
+        self.OCN2 = str(ft_utils.get_functest_config('ONOS.environment.OCN2'))
+        self.installer_master = str(
+            ft_utils.get_functest_config('ONOS.environment.installer_master'))
+        self.installer_master_username = str(ft_utils.get_functest_config(
+            'ONOS.environment.installer_master_username'))
+        self.installer_master_password = str(ft_utils.get_functest_config(
+            'ONOS.environment.installer_master_password'))
         self.hosts = [self.OC1, self.OCN, self.OCN2]
         self.localhost = self.OCT
 
index 01537b9..c8045fd 100755 (executable)
@@ -20,11 +20,11 @@ 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.functest_utils as ft_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")
@@ -35,12 +35,11 @@ args = parser.parse_args()
 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")
+TEST_DB = ft_utils.get_functest_config("results.test_db_url")
+ONOS_REPO_PATH = \
+    ft_utils.get_functest_config("general.directories.dir_repos")
+ONOS_CONF_DIR = \
+    ft_utils.get_functest_config("general.directories.dir_functest_conf")
 
 ONOSCI_PATH = ONOS_REPO_PATH + "/"
 starttime = datetime.datetime.now()
@@ -49,14 +48,14 @@ 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")
+GLANCE_IMAGE_NAME = ft_utils.get_functest_config("onos_sfc.image_name")
+GLANCE_IMAGE_FILENAME = \
+    ft_utils.get_functest_config("onos_sfc.image_file_name")
+GLANCE_IMAGE_PATH = \
+    ft_utils.get_functest_config("general.directories.dir_functest_data") + \
+    "/" + GLANCE_IMAGE_FILENAME
+SFC_PATH = ft_utils.FUNCTEST_REPO + "/" + \
+           ft_utils.get_functest_config("general.directories.dir_onos_sfc")
 
 
 def RunScript(testname):
@@ -243,12 +242,12 @@ def OnosTest():
         except:
             logger.error("Unable to set ONOS criteria")
 
-        functest_utils.push_results_to_db("functest",
-                                          "onos",
-                                          start_time,
-                                          stop_time,
-                                          status,
-                                          result)
+        ft_utils.push_results_to_db("functest",
+                                    "onos",
+                                    start_time,
+                                    stop_time,
+                                    status,
+                                    result)
 
     except:
         logger.error("Error pushing results into Database")
index 3d41e5d..50cdf8a 100755 (executable)
@@ -32,33 +32,30 @@ HOME = os.environ['HOME'] + "/"
 
 VM_BOOT_TIMEOUT = 180
 
-INSTANCE_NAME = ft_utils.get_parameter_from_yaml("example.example_vm_name")
-FLAVOR = ft_utils.get_parameter_from_yaml("example.example_flavor")
-IMAGE_NAME = ft_utils.get_parameter_from_yaml("example.example_image_name")
-IMAGE_FILENAME = ft_utils.get_parameter_from_yaml(
-    "general.openstack.image_file_name")
-IMAGE_FORMAT = ft_utils.get_parameter_from_yaml(
-    "general.openstack.image_disk_format")
-IMAGE_PATH = ft_utils.get_parameter_from_yaml(
-    "general.directories.dir_functest_data") + "/" + IMAGE_FILENAME
+INSTANCE_NAME = ft_utils.get_functest_config("example.example_vm_name")
+FLAVOR = ft_utils.get_functest_config("example.example_flavor")
+IMAGE_NAME = ft_utils.get_functest_config("example.example_image_name")
+IMAGE_FILENAME = \
+    ft_utils.get_functest_config("general.openstack.image_file_name")
+IMAGE_FORMAT = \
+    ft_utils.get_functest_config("general.openstack.image_disk_format")
+IMAGE_PATH = \
+    ft_utils.get_functest_config("general.directories.dir_functest_data") + \
+    "/" + IMAGE_FILENAME
 
 # NEUTRON Private Network parameters
 
-NET_NAME = ft_utils.get_parameter_from_yaml(
-    "example.example_private_net_name")
-SUBNET_NAME = ft_utils.get_parameter_from_yaml(
-    "example.example_private_subnet_name")
-SUBNET_CIDR = ft_utils.get_parameter_from_yaml(
-    "example.example_private_subnet_cidr")
-ROUTER_NAME = ft_utils.get_parameter_from_yaml(
-    "example.example_router_name")
-
-SECGROUP_NAME = ft_utils.get_parameter_from_yaml(
-    "example.example_sg_name")
-SECGROUP_DESCR = ft_utils.get_parameter_from_yaml(
-    "example.example_sg_descr")
-
-TEST_DB = ft_utils.get_parameter_from_yaml("results.test_db_url")
+NET_NAME = ft_utils.get_functest_config("example.example_private_net_name")
+SUBNET_NAME = \
+    ft_utils.get_functest_config("example.example_private_subnet_name")
+SUBNET_CIDR = \
+    ft_utils.get_functest_config("example.example_private_subnet_cidr")
+ROUTER_NAME = ft_utils.get_functest_config("example.example_router_name")
+
+SECGROUP_NAME = ft_utils.get_functest_config("example.example_sg_name")
+SECGROUP_DESCR = ft_utils.get_functest_config("example.example_sg_descr")
+
+TEST_DB = ft_utils.get_functest_config("results.test_db_url")
 
 
 def main():
diff --git a/testcases/OpenStack/rally/blacklist.txt b/testcases/OpenStack/rally/blacklist.txt
new file mode 100644 (file)
index 0000000..02d85f4
--- /dev/null
@@ -0,0 +1,8 @@
+-
+    scenarios:
+        - os-nosdn-lxd-ha
+        - os-nosdn-lxd-noha
+    installers:
+        - joid
+    tests:
+        - NovaServers.boot_server_from_volume_and_delete
index 85d21d9..29fd0a3 100755 (executable)
@@ -22,11 +22,12 @@ import subprocess
 import time
 
 import argparse
+import iniparse
+import yaml
+
 import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as functest_utils
+import functest.utils.functest_utils as ft_utils
 import functest.utils.openstack_utils as os_utils
-import iniparse
-from functest.utils.functest_utils import FUNCTEST_REPO as REPO_PATH
 
 tests = ['authenticate', 'glance', 'cinder', 'heat', 'keystone',
          'neutron', 'nova', 'quotas', 'requests', 'vm', 'all']
@@ -71,13 +72,13 @@ else:
 logger = ft_logger.Logger("run_rally").getLogger()
 
 
-functest_yaml = functest_utils.get_functest_yaml()
-
 HOME = os.environ['HOME'] + "/"
-RALLY_DIR = REPO_PATH + '/' + functest_yaml.get("general").get(
-    "directories").get("dir_rally")
+RALLY_DIR = ft_utils.FUNCTEST_REPO + '/' + \
+            ft_utils.get_functest_config('general.directories.dir_rally')
 TEMPLATE_DIR = RALLY_DIR + "scenario/templates"
 SUPPORT_DIR = RALLY_DIR + "scenario/support"
+TEMP_DIR = RALLY_DIR + "var"
+BLACKLIST_FILE = RALLY_DIR + "blacklist.txt"
 
 FLAVOR_NAME = "m1.tiny"
 USERS_AMOUNT = 2
@@ -85,25 +86,27 @@ TENANTS_AMOUNT = 3
 ITERATIONS_AMOUNT = 10
 CONCURRENCY = 4
 
-RESULTS_DIR = functest_yaml.get("general").get("directories").get(
-    "dir_rally_res")
-TEMPEST_CONF_FILE = functest_yaml.get("general").get("directories").get(
-    "dir_results") + '/tempest/tempest.conf'
-TEST_DB = functest_yaml.get("results").get("test_db_url")
-
-PRIVATE_NET_NAME = functest_yaml.get("rally").get("network_name")
-PRIVATE_SUBNET_NAME = functest_yaml.get("rally").get("subnet_name")
-PRIVATE_SUBNET_CIDR = functest_yaml.get("rally").get("subnet_cidr")
-ROUTER_NAME = functest_yaml.get("rally").get("router_name")
-
-GLANCE_IMAGE_NAME = functest_yaml.get("general").get("openstack").get(
-    "image_name")
-GLANCE_IMAGE_FILENAME = functest_yaml.get("general").get("openstack").get(
-    "image_file_name")
-GLANCE_IMAGE_FORMAT = functest_yaml.get("general").get("openstack").get(
-    "image_disk_format")
-GLANCE_IMAGE_PATH = functest_yaml.get("general").get("directories").get(
-    "dir_functest_data") + "/" + GLANCE_IMAGE_FILENAME
+RESULTS_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_rally_res')
+TEMPEST_CONF_FILE = \
+    ft_utils.get_functest_config('general.directories.dir_results') + \
+    '/tempest/tempest.conf'
+TEST_DB = ft_utils.get_functest_config('results.test_db_url')
+
+PRIVATE_NET_NAME = ft_utils.get_functest_config('rally.network_name')
+PRIVATE_SUBNET_NAME = ft_utils.get_functest_config('rally.subnet_name')
+PRIVATE_SUBNET_CIDR = ft_utils.get_functest_config('rally.subnet_cidr')
+ROUTER_NAME = ft_utils.get_functest_config('rally.router_name')
+
+GLANCE_IMAGE_NAME = \
+    ft_utils.get_functest_config('general.openstack.image_name')
+GLANCE_IMAGE_FILENAME = \
+    ft_utils.get_functest_config('general.openstack.image_file_name')
+GLANCE_IMAGE_FORMAT = \
+    ft_utils.get_functest_config('general.openstack.image_disk_format')
+GLANCE_IMAGE_PATH = \
+    ft_utils.get_functest_config('general.directories.dir_functest_data') + \
+    "/" + GLANCE_IMAGE_FILENAME
 
 CINDER_VOLUME_TYPE_NAME = "volume_test"
 
@@ -160,6 +163,7 @@ def build_task_args(test_file_name):
     task_args['image_name'] = GLANCE_IMAGE_NAME
     task_args['flavor_name'] = FLAVOR_NAME
     task_args['glance_image_location'] = GLANCE_IMAGE_PATH
+    task_args['glance_image_format'] = GLANCE_IMAGE_FORMAT
     task_args['tmpl_dir'] = TEMPLATE_DIR
     task_args['sup_dir'] = SUPPORT_DIR
     task_args['users_amount'] = USERS_AMOUNT
@@ -269,6 +273,64 @@ def get_cmd_output(proc):
     return result
 
 
+def apply_blacklist(case_file_name, result_file_name):
+    logger.debug("Applying blacklist...")
+    cases_file = open(case_file_name, 'r')
+    result_file = open(result_file_name, 'w')
+    black_tests = []
+
+    try:
+        installer_type = os.getenv('INSTALLER_TYPE')
+        deploy_scenario = os.getenv('DEPLOY_SCENARIO')
+        if (bool(installer_type) * bool(deploy_scenario)):
+            # if INSTALLER_TYPE and DEPLOY_SCENARIO are set we read the file
+            with open(BLACKLIST_FILE, 'r') as black_list_file:
+                black_list_yaml = yaml.safe_load(black_list_file)
+
+            for item in black_list_yaml:
+                scenarios = item['scenarios']
+                installers = item['installers']
+                if (deploy_scenario in scenarios and
+                        installer_type in installers):
+                    tests = item['tests']
+                    black_tests.extend(tests)
+    except:
+        black_tests = []
+        logger.debug("Blacklisting not applied.")
+
+    include = True
+    for cases_line in cases_file:
+        if include:
+            for black_tests_line in black_tests:
+                if black_tests_line == cases_line.strip().rstrip(':'):
+                    include = False
+                    break
+            else:
+                result_file.write(str(cases_line))
+        else:
+            if cases_line.isspace():
+                include = True
+
+    cases_file.close()
+    result_file.close()
+
+
+def prepare_test_list(test_name):
+    scenario_file_name = '{}opnfv-{}.yaml'.format(RALLY_DIR + "scenario/",
+                                                  test_name)
+    if not os.path.exists(scenario_file_name):
+        logger.info("The scenario '%s' does not exist." % scenario_file_name)
+        exit(-1)
+
+    logger.debug('Scenario fetched from : {}'.format(scenario_file_name))
+    test_file_name = '{}opnfv-{}.yaml'.format(TEMP_DIR + "/", test_name)
+
+    if not os.path.exists(TEMP_DIR):
+        os.makedirs(TEMP_DIR)
+
+    apply_blacklist(scenario_file_name, test_file_name)
+
+
 def run_task(test_name):
     #
     # the "main" function of the script who launch rally for a task
@@ -284,13 +346,7 @@ def run_task(test_name):
         logger.error("Task file '%s' does not exist." % task_file)
         exit(-1)
 
-    test_file_name = '{}opnfv-{}.yaml'.format(RALLY_DIR + "scenario/",
-                                              test_name)
-    if not os.path.exists(test_file_name):
-        logger.error("The scenario '%s' does not exist." % test_file_name)
-        exit(-1)
-
-    logger.debug('Scenario fetched from : {}'.format(test_file_name))
+    prepare_test_list(test_name)
 
     cmd_line = ("rally task start --abort-on-sla-failure " +
                 "--task {} ".format(task_file) +
@@ -353,12 +409,12 @@ def run_task(test_name):
     if args.report:
         stop_time = time.time()
         logger.debug("Push Rally detailed results into DB")
-        functest_utils.push_results_to_db("functest",
-                                          "Rally_details",
-                                          start_time,
-                                          stop_time,
-                                          status,
-                                          json_data)
+        ft_utils.push_results_to_db("functest",
+                                    "Rally_details",
+                                    start_time,
+                                    stop_time,
+                                    status,
+                                    json_data)
 
 
 def main():
@@ -477,7 +533,7 @@ def main():
         case_name = "rally_full"
 
     # Evaluation of the success criteria
-    status = functest_utils.check_success_rate(case_name, success_rate)
+    status = ft_utils.check_success_rate(case_name, success_rate)
 
     exit_code = -1
     if status == "PASS":
@@ -485,12 +541,12 @@ def main():
 
     if args.report:
         logger.debug("Pushing Rally summary into DB...")
-        functest_utils.push_results_to_db("functest",
-                                          case_name,
-                                          start_time,
-                                          stop_time,
-                                          status,
-                                          payload)
+        ft_utils.push_results_to_db("functest",
+                                    case_name,
+                                    start_time,
+                                    stop_time,
+                                    status,
+                                    payload)
     if args.noclean:
         exit(exit_code)
 
index adbf8b7..3a67e74 100644 (file)
@@ -1,7 +1,7 @@
   GlanceImages.create_and_delete_image:
     -
       args:
-        {{ glance_args(location=glance_image_location) }}
+        {{ glance_args(location=glance_image_location, type=glance_image_format) }}
       context:
         {{ user_context(tenants_amount, users_amount, use_existing_users) }}
       runner:
@@ -12,7 +12,7 @@
   GlanceImages.create_and_list_image:
     -
       args:
-        {{ glance_args(location=glance_image_location) }}
+        {{ glance_args(location=glance_image_location, type=glance_image_format) }}
       context:
         {{ user_context(tenants_amount, users_amount, use_existing_users) }}
       runner:
@@ -32,7 +32,7 @@
   GlanceImages.create_image_and_boot_instances:
     -
       args:
-        {{ glance_args(location=glance_image_location) }}
+        {{ glance_args(location=glance_image_location, type=glance_image_format) }}
         flavor:
             name: {{ flavor_name }}
         number_instances: 2
index 3dded7d..c482f12 100644 (file)
@@ -8,41 +8,41 @@
 
 ---
 {% if "authenticate" in service_list %}
-{%- include "scenario/opnfv-authenticate.yaml"-%}
+{%- include "var/opnfv-authenticate.yaml"-%}
 {% endif %}
 
 {% if "cinder" in service_list %}
-{%- include "scenario/opnfv-cinder.yaml"-%}
+{%- include "var/opnfv-cinder.yaml"-%}
 {% endif %}
 
 {% if "keystone" in service_list %}
-{%- include "scenario/opnfv-keystone.yaml"-%}
+{%- include "var/opnfv-keystone.yaml"-%}
 {% endif %}
 
 {% if "nova" in service_list %}
-{%- include "scenario/opnfv-nova.yaml"-%}
+{%- include "var/opnfv-nova.yaml"-%}
 {% endif %}
 
 {% if "glance" in service_list %}
-{%- include "scenario/opnfv-glance.yaml"-%}
+{%- include "var/opnfv-glance.yaml"-%}
 {% endif %}
 
 {% if "neutron" in service_list %}
-{%- include "scenario/opnfv-neutron.yaml"-%}
+{%- include "var/opnfv-neutron.yaml"-%}
 {% endif %}
 
 {% if "quotas" in service_list %}
-{%- include "scenario/opnfv-quotas.yaml"-%}
+{%- include "var/opnfv-quotas.yaml"-%}
 {% endif %}
 
 {% if "requests" in service_list %}
-{%- include "scenario/opnfv-requests.yaml"-%}
+{%- include "var/opnfv-requests.yaml"-%}
 {% endif %}
 
 {% if "heat" in service_list %}
-{%- include "scenario/opnfv-heat.yaml"-%}
+{%- include "var/opnfv-heat.yaml"-%}
 {% endif %}
 
 {% if "vm" in service_list %}
-{%- include "scenario/opnfv-vm.yaml"-%}
+{%- include "var/opnfv-vm.yaml"-%}
 {% endif %}
index a2427e2..5c8581f 100644 (file)
     # https://bugs.launchpad.net/tempest/+bug/1586931
     scenarios:
         - os-odl_l2-nofeature-ha
+        - os-odl_l2-nofeature-noha
         - os-odl_l2-sfc-ha
+        - os-odl_l2-sfc-noha
         - os-odl_l3-nofeature-ha
+        - os-odl_l3-nofeature-noha
         - os-nosdn-kvm-ha
+        - os-nosdn-kvm-noha
         - os-nosdn-nofeature-ha
+        - os-nosdn-nofeature-noha
         - os-nosdn-ovs-ha
+        - os-nosdn-ovs-noha
     installers:
         - fuel
     tests:
         - tempest.scenario.test_server_basic_ops.TestServerBasicOps.test_server_basic_ops
-
--
-    # https://bugs.opendaylight.org/show_bug.cgi?id=5586
-    # https://jira.opnfv.org/browse/APEX-112
-    # https://jira.opnfv.org/browse/FUNCTEST-445
-    scenarios:
-        - os-odl_l3-nofeature-ha
-        - os-odl_l3-nofeature-noha
-    installers:
-        - fuel
-        - apex
-        - compass
-        - joid
-    tests:
-        - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_reboot_server_hard
-        - tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_network_basic_ops
-        - tempest.scenario.test_server_basic_ops.TestServerBasicOps.test_server_basic_ops
-        - tempest.scenario.test_volume_boot_pattern.TestVolumeBootPattern.test_volume_boot_pattern
-        - tempest.scenario.test_volume_boot_pattern.TestVolumeBootPatternV2.test_volume_boot_pattern
index 688a924..ca671d0 100755 (executable)
@@ -55,10 +55,10 @@ def configure_tempest_multisite(deployment_dir):
         kingbird_conf_path = "/etc/kingbird/kingbird.conf"
         installer_type = os.getenv('INSTALLER_TYPE', 'Unknown')
         installer_ip = os.getenv('INSTALLER_IP', 'Unknown')
-        installer_username = ft_utils.get_parameter_from_yaml(
+        installer_username = ft_utils.get_functest_config(
             "multisite." + installer_type +
             "_environment.installer_username")
-        installer_password = ft_utils.get_parameter_from_yaml(
+        installer_password = ft_utils.get_functest_config(
             "multisite." + installer_type +
             "_environment.installer_password")
 
index e939721..2f24e96 100755 (executable)
@@ -22,11 +22,11 @@ import sys
 import time
 
 import argparse
+import yaml
+
 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,39 +58,49 @@ args = parser.parse_args()
 """ logging configuration """
 logger = ft_logger.Logger("run_tempest").getLogger()
 
-functest_yaml = ft_utils.get_functest_yaml()
-TEST_DB = functest_yaml.get("results").get("test_db_url")
+TEST_DB = ft_utils.get_functest_config('results.test_db_url')
 
 MODE = "smoke"
-GLANCE_IMAGE_NAME = functest_yaml.get("general").get(
-    "openstack").get("image_name")
-GLANCE_IMAGE_FILENAME = functest_yaml.get("general").get(
-    "openstack").get("image_file_name")
-GLANCE_IMAGE_FORMAT = functest_yaml.get("general").get(
-    "openstack").get("image_disk_format")
-GLANCE_IMAGE_PATH = functest_yaml.get("general").get("directories").get(
-    "dir_functest_data") + "/" + GLANCE_IMAGE_FILENAME
-PRIVATE_NET_NAME = functest_yaml.get("tempest").get("private_net_name")
-PRIVATE_SUBNET_NAME = functest_yaml.get("tempest").get("private_subnet_name")
-PRIVATE_SUBNET_CIDR = functest_yaml.get("tempest").get("private_subnet_cidr")
-ROUTER_NAME = functest_yaml.get("tempest").get("router_name")
-TENANT_NAME = functest_yaml.get("tempest").get("identity").get("tenant_name")
-TENANT_DESCRIPTION = functest_yaml.get("tempest").get("identity").get(
-    "tenant_description")
-USER_NAME = functest_yaml.get("tempest").get("identity").get("user_name")
-USER_PASSWORD = functest_yaml.get("tempest").get("identity").get(
-    "user_password")
-SSH_TIMEOUT = functest_yaml.get("tempest").get("validation").get(
-    "ssh_timeout")
-DEPLOYMENT_MAME = functest_yaml.get("rally").get("deployment_name")
-RALLY_INSTALLATION_DIR = functest_yaml.get("general").get("directories").get(
-    "dir_rally_inst")
-RESULTS_DIR = functest_yaml.get("general").get("directories").get(
-    "dir_results")
+GLANCE_IMAGE_NAME = \
+    ft_utils.get_functest_config('general.openstack.image_name')
+GLANCE_IMAGE_FILENAME = \
+    ft_utils.get_functest_config('general.openstack.image_file_name')
+GLANCE_IMAGE_FORMAT = \
+    ft_utils.get_functest_config('general.openstack.image_disk_format')
+GLANCE_IMAGE_PATH = \
+    ft_utils.get_functest_config('general.directories.dir_functest_data') + \
+    "/" + GLANCE_IMAGE_FILENAME
+
+PRIVATE_NET_NAME = \
+    ft_utils.get_functest_config('tempest.private_net_name')
+PRIVATE_SUBNET_NAME = \
+    ft_utils.get_functest_config('tempest.private_subnet_name')
+PRIVATE_SUBNET_CIDR = \
+    ft_utils.get_functest_config('tempest.private_subnet_cidr')
+ROUTER_NAME = \
+    ft_utils.get_functest_config('tempest.router_name')
+TENANT_NAME = \
+    ft_utils.get_functest_config('tempest.identity.tenant_name')
+TENANT_DESCRIPTION = \
+    ft_utils.get_functest_config('tempest.identity.tenant_description')
+USER_NAME = \
+    ft_utils.get_functest_config('tempest.identity.user_name')
+USER_PASSWORD = \
+    ft_utils.get_functest_config('tempest.identity.user_password')
+SSH_TIMEOUT = \
+    ft_utils.get_functest_config('tempest.validation.ssh_timeout')
+DEPLOYMENT_MAME = \
+    ft_utils.get_functest_config('rally.deployment_name')
+RALLY_INSTALLATION_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_rally_inst')
+
+RESULTS_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_results')
 TEMPEST_RESULTS_DIR = RESULTS_DIR + '/tempest'
-TEST_LIST_DIR = functest_yaml.get("general").get("directories").get(
-    "dir_tempest_cases")
-REPO_PATH = FUNCTEST_REPO + '/'
+
+REPO_PATH = ft_utils.FUNCTEST_REPO + '/'
+TEST_LIST_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_tempest_cases')
 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'
index 7e7173a..cf5a28d 100644 (file)
@@ -4,43 +4,43 @@ 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
 
-functest_yaml = ft_utils.get_functest_yaml()
+import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_utils as os_utils
+FUNCTEST_REPO = ft_utils.FUNCTEST_REPO
 
-NAME_VM_1 = functest_yaml.get("vping").get("vm_name_1")
-NAME_VM_2 = functest_yaml.get("vping").get("vm_name_2")
+NAME_VM_1 = ft_utils.get_functest_config('vping.vm_name_1')
+NAME_VM_2 = ft_utils.get_functest_config('vping.vm_name_2')
 
 VM_BOOT_TIMEOUT = 180
 VM_DELETE_TIMEOUT = 100
-PING_TIMEOUT = functest_yaml.get("vping").get("ping_timeout")
+PING_TIMEOUT = ft_utils.get_functest_config('vping.ping_timeout')
+
+GLANCE_IMAGE_NAME = ft_utils.get_functest_config('vping.image_name')
+GLANCE_IMAGE_FILENAME = \
+    ft_utils.get_functest_config('general.openstack.image_file_name')
+GLANCE_IMAGE_FORMAT = \
+    ft_utils.get_functest_config('general.openstack.image_disk_format')
+GLANCE_IMAGE_PATH = \
+    ft_utils.get_functest_config('general.directories.dir_functest_data') + \
+    "/" + GLANCE_IMAGE_FILENAME
 
-GLANCE_IMAGE_NAME = functest_yaml.get("vping").get("image_name")
-GLANCE_IMAGE_FILENAME = functest_yaml.get("general").get(
-    "openstack").get("image_file_name")
-GLANCE_IMAGE_FORMAT = functest_yaml.get("general").get(
-    "openstack").get("image_disk_format")
-GLANCE_IMAGE_PATH = functest_yaml.get("general").get("directories").get(
-    "dir_functest_data") + "/" + GLANCE_IMAGE_FILENAME
 
-FLAVOR = functest_yaml.get("vping").get("vm_flavor")
+FLAVOR = ft_utils.get_functest_config('vping.vm_flavor')
 
 # NEUTRON Private Network parameters
-PRIVATE_NET_NAME = functest_yaml.get("vping").get(
-    "vping_private_net_name")
-PRIVATE_SUBNET_NAME = functest_yaml.get("vping").get(
-    "vping_private_subnet_name")
-PRIVATE_SUBNET_CIDR = functest_yaml.get("vping").get(
-    "vping_private_subnet_cidr")
-ROUTER_NAME = functest_yaml.get("vping").get(
-    "vping_router_name")
+PRIVATE_NET_NAME = \
+    ft_utils.get_functest_config('vping.vping_private_net_name')
+PRIVATE_SUBNET_NAME = \
+    ft_utils.get_functest_config('vping.vping_private_subnet_name')
+PRIVATE_SUBNET_CIDR = \
+    ft_utils.get_functest_config('vping.vping_private_subnet_cidr')
+ROUTER_NAME = ft_utils.get_functest_config('vping.vping_router_name')
 
-SECGROUP_NAME = functest_yaml.get("vping").get("vping_sg_name")
-SECGROUP_DESCR = functest_yaml.get("vping").get("vping_sg_descr")
+SECGROUP_NAME = ft_utils.get_functest_config('vping.vping_sg_name')
+SECGROUP_DESCR = ft_utils.get_functest_config('vping.vping_sg_descr')
 
 
 neutron_client = None
@@ -57,8 +57,8 @@ def pMsg(value):
 
 
 def check_repo_exist():
-    if not os.path.exists(REPO_PATH):
-        logger.error("Functest repository not found '%s'" % REPO_PATH)
+    if not os.path.exists(FUNCTEST_REPO):
+        logger.error("Functest repository not found '%s'" % FUNCTEST_REPO)
         exit(-1)
 
 
@@ -339,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 = FUNCTEST_REPO + "/testcases/OpenStack/vPing/ping.sh"
     try:
         scp.put(ping_script, "~/")
     except:
index 50319d9..be6744a 100755 (executable)
@@ -28,10 +28,10 @@ parser.add_argument("-r", "--report",
                     action="store_true")
 args = parser.parse_args()
 
-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')
+COPPER_REPO = \
+    functest_utils.get_functest_config('general.directories.dir_repo_copper')
+RESULTS_DIR = \
+    functest_utils.get_functest_config('general.directories.dir_results')
 
 logger = ft_logger.Logger("copper").getLogger()
 
index 5fc0713..6c26875 100755 (executable)
 # 0.2: measure test duration and publish results under json format
 #
 #
+import argparse
+import os
 import time
 
-import argparse
 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",
@@ -27,28 +29,40 @@ args = parser.parse_args()
 
 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_functest_config('general.directories.dir_repo_doctor')
+RESULTS_DIR = \
+    functest_utils.get_functest_config('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, 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 = {
index aaf3804..75351a5 100755 (executable)
 # 0.3: add report flag to push results when needed
 #
 
+import argparse
 import time
 
-import argparse
 import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as functest_utils
+import functest.utils.functest_utils as ft_utils
 
 parser = argparse.ArgumentParser()
 
@@ -27,19 +27,23 @@ parser.add_argument("-r", "--report",
                     action="store_true")
 args = parser.parse_args()
 
-functest_yaml = functest_utils.get_functest_yaml()
 
-dirs = functest_yaml.get('general').get('directories')
-DOMINO_REPO = dirs.get('dir_repo_domino')
+DOMINO_REPO = \
+    ft_utils.get_functest_config('general.directories.dir_repo_domino')
+RESULTS_DIR = \
+    ft_utils.get_functest_config('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, exit_on_error=False)
+    ret = ft_utils.execute_command(cmd,
+                                   exit_on_error=False,
+                                   output_file=log_file)
 
     stop_time = time.time()
     duration = round(stop_time - start_time, 1)
@@ -65,17 +69,18 @@ def main():
     elif details['status'] == "SKIPPED":
         status = "SKIP"
 
-    functest_utils.logger_test_results("Domino",
-                                       "domino-multinode",
-                                       status, details)
+    ft_utils.logger_test_results("Domino",
+                                 "domino-multinode",
+                                 status,
+                                 details)
     if args.report:
         if status is not "SKIP":
-            functest_utils.push_results_to_db("domino",
-                                              "domino-multinode",
-                                              start_time,
-                                              stop_time,
-                                              status,
-                                              details)
+            ft_utils.push_results_to_db("domino",
+                                        "domino-multinode",
+                                        start_time,
+                                        stop_time,
+                                        status,
+                                        details)
             logger.info("Domino results pushed to DB")
 
 
index 47e360c..cce0f5d 100755 (executable)
@@ -9,18 +9,19 @@
 #
 # 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.functest_utils as ft_utils
 import functest.utils.openstack_utils as openstack_utils
 import keystoneclient.v2_0.client as ksclient
-import novaclient.client as nvclient
 from neutronclient.v2_0 import client as ntclient
+import novaclient.client as nvclient
+
 
 parser = argparse.ArgumentParser()
 
@@ -30,35 +31,35 @@ parser.add_argument("-r", "--report",
                     action="store_true")
 args = parser.parse_args()
 
-functest_yaml = functest_utils.get_functest_yaml()
 
-dirs = functest_yaml.get('general').get('directories')
+dirs = ft_utils.get_functest_config('general.directories')
 PROMISE_REPO = dirs.get('dir_repo_promise')
-TEST_DB = functest_yaml.get('results').get('test_db_url')
-
-TENANT_NAME = functest_yaml.get('promise').get('general').get('tenant_name')
-TENANT_DESCRIPTION = functest_yaml.get('promise').get(
-    'general').get('tenant_description')
-USER_NAME = functest_yaml.get('promise').get('general').get('user_name')
-USER_PWD = functest_yaml.get('promise').get('general').get('user_pwd')
-IMAGE_NAME = functest_yaml.get('promise').get('general').get('image_name')
-FLAVOR_NAME = functest_yaml.get('promise').get('general').get('flavor_name')
-FLAVOR_VCPUS = functest_yaml.get('promise').get('general').get('flavor_vcpus')
-FLAVOR_RAM = functest_yaml.get('promise').get('general').get('flavor_ram')
-FLAVOR_DISK = functest_yaml.get('promise').get('general').get('flavor_disk')
-
-
-GLANCE_IMAGE_FILENAME = functest_yaml.get('general').get('openstack').get(
-    'image_file_name')
-GLANCE_IMAGE_FORMAT = functest_yaml.get('general').get('openstack').get(
-    'image_disk_format')
-GLANCE_IMAGE_PATH = functest_yaml.get('general').get('directories').get(
-    'dir_functest_data') + "/" + GLANCE_IMAGE_FILENAME
-
-NET_NAME = functest_yaml.get('promise').get('general').get('network_name')
-SUBNET_NAME = functest_yaml.get('promise').get('general').get('subnet_name')
-SUBNET_CIDR = functest_yaml.get('promise').get('general').get('subnet_cidr')
-ROUTER_NAME = functest_yaml.get('promise').get('general').get('router_name')
+RESULTS_DIR = ft_utils.get_functest_config('general.directories.dir_results')
+
+TENANT_NAME = ft_utils.get_functest_config('promise.tenant_name')
+TENANT_DESCRIPTION = \
+    ft_utils.get_functest_config('promise.tenant_description')
+USER_NAME = ft_utils.get_functest_config('promise.user_name')
+USER_PWD = ft_utils.get_functest_config('promise.user_pwd')
+IMAGE_NAME = ft_utils.get_functest_config('promise.image_name')
+FLAVOR_NAME = ft_utils.get_functest_config('promise.flavor_name')
+FLAVOR_VCPUS = ft_utils.get_functest_config('promise.flavor_vcpus')
+FLAVOR_RAM = ft_utils.get_functest_config('promise.flavor_ram')
+FLAVOR_DISK = ft_utils.get_functest_config('promise.flavor_disk')
+
+
+GLANCE_IMAGE_FILENAME = \
+    ft_utils.get_functest_config('general.openstack.image_file_name')
+GLANCE_IMAGE_FORMAT = \
+    ft_utils.get_functest_config('general.openstack.image_disk_format')
+GLANCE_IMAGE_PATH = \
+    ft_utils.get_functest_config('general.directories.dir_functest_data') + \
+    "/" + GLANCE_IMAGE_FILENAME
+
+NET_NAME = ft_utils.get_functest_config('promise.network_name')
+SUBNET_NAME = ft_utils.get_functest_config('promise.subnet_name')
+SUBNET_CIDR = ft_utils.get_functest_config('promise.subnet_cidr')
+ROUTER_NAME = ft_utils.get_functest_config('promise.router_name')
 
 
 """ logging configuration """
@@ -181,7 +182,7 @@ def main():
     os.environ["OS_TEST_NETWORK"] = network_dic["net_id"]
 
     os.chdir(PROMISE_REPO)
-    results_file_name = 'promise-results.json'
+    results_file_name = RESULTS_DIR + '/' + 'promise-results.json'
     results_file = open(results_file_name, 'w+')
     cmd = 'npm run -s test -- --reporter json'
 
@@ -240,12 +241,12 @@ def main():
             status = "PASS"
             exit_code = 0
 
-        functest_utils.push_results_to_db("promise",
-                                          "promise",
-                                          start_time,
-                                          stop_time,
-                                          status,
-                                          json_results)
+        ft_utils.push_results_to_db("promise",
+                                    "promise",
+                                    start_time,
+                                    stop_time,
+                                    status,
+                                    json_results)
 
     exit(exit_code)
 
diff --git a/testcases/features/sfc/prepare_odl_sfc.bash b/testcases/features/sfc/prepare_odl_sfc.bash
new file mode 100755 (executable)
index 0000000..80ed9bd
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+#
+# Author: George Paraskevopoulos (geopar@intracom-telecom.com)
+#         Manuel Buil (manuel.buil@ericsson.com)
+# Prepares the controller and the compute nodes for the odl-sfc testcase
+#
+#
+# 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
+#
+
+ODL_SFC_LOG=/home/opnfv/functest/results/odl-sfc.log
+ODL_SFC_DIR=${FUNCTEST_REPO_DIR}/testcases/features/sfc
+
+# Split the output to the log file and redirect STDOUT and STDERR to /dev/null
+bash ${ODL_SFC_DIR}/server_presetup_CI.bash |& \
+    tee -a ${ODL_SFC_LOG} 1>/dev/null 2>&1
+
+# Get return value from PIPESTATUS array (bash specific feature)
+ret_val=${PIPESTATUS[0]}
+if [ $ret_val != 0 ]; then
+    echo "The tacker server deployment failed"
+    exit $ret_val
+fi
+echo "The tacker server was deployed successfully"
+
+bash ${ODL_SFC_DIR}/compute_presetup_CI.bash |& \
+    tee -a ${ODL_SFC_LOG} 1>/dev/null 2>&1
+
+ret_val=${PIPESTATUS[0]}
+if [ $ret_val != 0 ]; then
+    exit $ret_val
+fi
+
+exit 0
index a228ed2..8aa7bb9 100755 (executable)
@@ -4,11 +4,11 @@ import sys
 import time
 
 import argparse
+import paramiko
+
 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()
 
@@ -21,6 +21,8 @@ args = parser.parse_args()
 """ logging configuration """
 logger = ft_logger.Logger("ODL_SFC").getLogger()
 
+FUNCTEST_REPO = ft_utils.FUNCTEST_REPO
+
 HOME = os.environ['HOME'] + "/"
 
 VM_BOOT_TIMEOUT = 180
@@ -56,13 +58,19 @@ def main():
     # Allow any port so that tacker commands reaches the server.
     # This will be deleted when tacker is included in OPNFV installation
 
+    status = "PASS"
+    failures = 0
+    start_time = time.time()
+    json_results = {}
+
     ssh_options = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
     contr_cmd = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
                  " 'fuel node'|grep controller|awk '{print $10}'")
     logger.info("Executing script to get ip_server: '%s'" % contr_cmd)
     process = subprocess.Popen(contr_cmd,
                                shell=True,
-                               stdout=subprocess.PIPE)
+                               stdout=subprocess.PIPE,
+                               stderr=subprocess.PIPE)
     ip_server = process.stdout.readline().rstrip()
 
     contr_cmd2 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
@@ -70,16 +78,27 @@ def main():
     logger.info("Executing script to get ip_compute: '%s'" % contr_cmd2)
     process = subprocess.Popen(contr_cmd2,
                                shell=True,
-                               stdout=subprocess.PIPE)
+                               stdout=subprocess.PIPE,
+                               stderr=subprocess.PIPE)
     ip_compute = process.stdout.readline().rstrip()
 
     iptable_cmd1 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
                     " ssh " + ip_server + " iptables -P INPUT ACCEPT ")
     iptable_cmd2 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
                     " ssh " + ip_server + " iptables -t nat -P INPUT ACCEPT ")
+    iptable_cmd3 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+                    " ssh " + ssh_options + " " + ip_server +
+                    " iptables -A INPUT -m state"
+                    " --state NEW,ESTABLISHED,RELATED -j ACCEPT")
+
+    logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd1)
+    subprocess.call(iptable_cmd1, shell=True, stderr=subprocess.PIPE)
 
-    subprocess.call(iptable_cmd1, shell=True)
-    subprocess.call(iptable_cmd2, shell=True)
+    logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd2)
+    subprocess.call(iptable_cmd2, shell=True, stderr=subprocess.PIPE)
+
+    logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd3)
+    subprocess.call(iptable_cmd2, shell=True, stderr=subprocess.PIPE)
 
 # Getting the different clients
 
@@ -308,7 +327,7 @@ def main():
 
     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)))
+        logger.info("Test starting in {0} seconds".format(str((6 - j) * 10)))
         time.sleep(10)
 
     i = 0
@@ -326,10 +345,13 @@ def main():
             logger.info('\033[92m' + "TEST 1 [PASSED] "
                         "==> SSH BLOCKED" + '\033[0m')
             i = i + 1
+            json_results.update({"Test 1: SSH Blocked": "Passed"})
         else:
             logger.error('\033[91m' + "TEST 1 [FAILED] "
                          "==> SSH NOT BLOCKED" + '\033[0m')
-            return
+            status = "FAIL"
+            json_results.update({"Test 1: SSH Blocked": "Failed"})
+            failures += 1
     except:
         logger.debug("Waiting for %s..." % floatip_client)
         time.sleep(6)
@@ -346,10 +368,13 @@ def main():
             logger.info('\033[92m' + "TEST 2 [PASSED] "
                         "==> HTTP WORKS" + '\033[0m')
             i = i + 1
+            json_results.update({"Test 2: HTTP works": "Passed"})
         else:
             logger.error('\033[91m' + "TEST 2 [FAILED] "
                          "==> HTTP BLOCKED" + '\033[0m')
-            return
+            status = "FAIL"
+            json_results.update({"Test 2: HTTP works": "Failed"})
+            failures += 1
     except:
         logger.debug("Waiting for %s..." % floatip_client)
         time.sleep(6)
@@ -382,13 +407,16 @@ def main():
         (stdin, stdout, stderr) = ssh.exec_command(command)
 
         if "timed out" in stdout.readlines()[0]:
-            logger.info('\033[92m' + "TEST 3 [WORKS] "
+            logger.info('\033[92m' + "TEST 3 [PASSED] "
                         "==> HTTP BLOCKED" + '\033[0m')
             i = i + 1
+            json_results.update({"Test 3: HTTP Blocked": "Passed"})
         else:
             logger.error('\033[91m' + "TEST 3 [FAILED] "
                          "==> HTTP NOT BLOCKED" + '\033[0m')
-            return
+            status = "FAIL"
+            json_results.update({"Test 3: HTTP Blocked": "Failed"})
+            failures += 1
     except:
         logger.debug("Waiting for %s..." % floatip_client)
         time.sleep(6)
@@ -402,13 +430,16 @@ def main():
         (stdin, stdout, stderr) = ssh.exec_command(command)
 
         if "succeeded" in stdout.readlines()[0]:
-            logger.info('\033[92m' + "TEST 4 [WORKS] "
+            logger.info('\033[92m' + "TEST 4 [PASSED] "
                         "==> SSH WORKS" + '\033[0m')
             i = i + 1
+            json_results.update({"Test 4: SSH works": "Passed"})
         else:
             logger.error('\033[91m' + "TEST 4 [FAILED] "
                          "==> SSH BLOCKED" + '\033[0m')
-            return
+            status = "FAIL"
+            json_results.update({"Test 4: SSH works": "Failed"})
+            failures += 1
     except:
         logger.debug("Waiting for %s..." % floatip_client)
         time.sleep(6)
@@ -419,21 +450,20 @@ def main():
             logger.info('\033[92m' + "SFC TEST WORKED"
                         " :) \n" + '\033[0m')
 
-    # TODO report results to DB
-    # functest_utils.logger_test_results("SFC",
-    # "odl-sfc",
-    # status, details)
-    # see doctor, promise, domino, ...
-    # if args.report:
-        # logger.info("Pushing odl-SFC results")
-        # functest_utils.push_results_to_db("functest",
-        #                                  "odl-sfc",
-        #                                  start_time,
-        #                                  stop_time,
-        #                                  status,
-        #                                  details)
-
-    sys.exit(0)
+    if args.report:
+        stop_time = time.time()
+        json_results.update({"tests": "4", "failures": int(failures)})
+        logger.debug("Promise Results json: " + str(json_results))
+        ft_utils.push_results_to_db("sfc",
+                                    "functest-odl-sfc",
+                                    start_time,
+                                    stop_time,
+                                    status,
+                                    json_results)
+    if status == "PASS":
+        sys.exit(0)
+    else:
+        sys.exit(1)
 
 if __name__ == '__main__':
     main()
index ac7b78e..98e6b7a 100755 (executable)
 # 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 functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO
+
+import argparse
 from keystoneclient import session
 from keystoneclient.auth.identity import v2
 from novaclient import client
 
+import connect
+import functest.utils.functest_utils as ft_utils
 
 __version__ = 0.1
 __author__ = 'Luke Hinds (lhinds@redhat.com)'
@@ -33,7 +33,7 @@ __url__ = 'https://wiki.opnfv.org/display/functest/Functest+Security'
 # Global vars
 INSTALLER_IP = os.getenv('INSTALLER_IP')
 oscapbin = 'sudo /bin/oscap'
-functest_dir = '%s/testcases/security_scan/' % FUNCTEST_REPO
+functest_dir = '%s/testcases/security_scan/' % ft_utils.FUNCTEST_REPO
 
 # Apex Spefic var needed to query Undercloud
 if os.getenv('OS_AUTH_URL') is None:
index b72e4cd..50aa715 100755 (executable)
@@ -19,15 +19,14 @@ 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 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
 
+import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
+import functest.utils.openstack_utils as os_utils
 from clearwater import clearwater
 from orchestrator import orchestrator
 
@@ -48,34 +47,40 @@ args = parser.parse_args()
 logger = ft_logger.Logger("vIMS").getLogger()
 
 
-functest_yaml = functest_utils.get_functest_yaml()
-
 # Cloudify parameters
-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") + "/"
-VIMS_TEST_DIR = functest_yaml.get("general").get(
-    "directories").get("dir_repo_vims_test") + "/"
-DB_URL = functest_yaml.get("results").get("test_db_url")
-
-TENANT_NAME = functest_yaml.get("vIMS").get("general").get("tenant_name")
-TENANT_DESCRIPTION = functest_yaml.get("vIMS").get(
-    "general").get("tenant_description")
-IMAGES = functest_yaml.get("vIMS").get("general").get("images")
-
-CFY_MANAGER_BLUEPRINT = functest_yaml.get(
-    "vIMS").get("cloudify").get("blueprint")
-CFY_MANAGER_REQUIERMENTS = functest_yaml.get(
-    "vIMS").get("cloudify").get("requierments")
-CFY_INPUTS = functest_yaml.get("vIMS").get("cloudify").get("inputs")
-
-CW_BLUEPRINT = functest_yaml.get("vIMS").get("clearwater").get("blueprint")
-CW_DEPLOYMENT_NAME = functest_yaml.get("vIMS").get(
-    "clearwater").get("deployment-name")
-CW_INPUTS = functest_yaml.get("vIMS").get("clearwater").get("inputs")
-CW_REQUIERMENTS = functest_yaml.get("vIMS").get(
-    "clearwater").get("requierments")
+VIMS_DIR = ft_utils.FUNCTEST_REPO + '/' + \
+           ft_utils.get_functest_config('general.directories.dir_vIMS')
+
+VIMS_DATA_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_vIMS_data') + \
+    '/'
+VIMS_TEST_DIR = \
+    ft_utils.get_functest_config('general.directories.dir_repo_vims_test') + \
+    '/'
+DB_URL = \
+    ft_utils.get_functest_config('results.test_db_url')
+
+TENANT_NAME = \
+    ft_utils.get_functest_config('vIMS.general.tenant_name')
+TENANT_DESCRIPTION = \
+    ft_utils.get_functest_config('vIMS.general.tenant_description')
+IMAGES = \
+    ft_utils.get_functest_config('vIMS.general.images')
+
+CFY_MANAGER_BLUEPRINT = \
+    ft_utils.get_functest_config('vIMS.cloudify.blueprint')
+CFY_MANAGER_REQUIERMENTS = \
+    ft_utils.get_functest_config('vIMS.cloudify.requierments')
+CFY_INPUTS = ft_utils.get_functest_config('vIMS.cloudify.inputs')
+
+CW_BLUEPRINT = \
+    ft_utils.get_functest_config('vIMS.clearwater.blueprint')
+CW_DEPLOYMENT_NAME = \
+    ft_utils.get_functest_config('vIMS.clearwater.deployment-name')
+CW_INPUTS = \
+    ft_utils.get_functest_config('vIMS.clearwater.inputs')
+CW_REQUIERMENTS = \
+    ft_utils.get_functest_config('vIMS.clearwater.requierments')
 
 CFY_DEPLOYMENT_DURATION = 0
 CW_DEPLOYMENT_DURATION = 0
@@ -91,7 +96,7 @@ def download_and_add_image_on_glance(glance, image_name, image_url):
     if not os.path.exists(dest_path):
         os.makedirs(dest_path)
     file_name = image_url.rsplit('/')[-1]
-    if not functest_utils.download_url(image_url, dest_path):
+    if not ft_utils.download_url(image_url, dest_path):
         logger.error("Failed to download image %s" % file_name)
         return False
 
@@ -112,12 +117,12 @@ def step_failure(step_name, error_msg):
     stop_time = time.time()
     if step_name == "sig_test":
         status = "PASS"
-    functest_utils.push_results_to_db("functest",
-                                      "vims",
-                                      TESTCASE_START_TIME,
-                                      stop_time,
-                                      status,
-                                      RESULTS)
+    ft_utils.push_results_to_db("functest",
+                                "vims",
+                                TESTCASE_START_TIME,
+                                stop_time,
+                                status,
+                                RESULTS)
     exit(-1)
 
 
@@ -183,7 +188,7 @@ def test_clearwater():
     logger.info("vIMS functional test Start Time:'%s'" % (
         datetime.datetime.fromtimestamp(start_time_ts).strftime(
             '%Y-%m-%d %H:%M:%S')))
-    nameservers = functest_utils.get_resolvconf_ns()
+    nameservers = ft_utils.get_resolvconf_ns()
     resolvconf = ""
     for ns in nameservers:
         resolvconf += "\nnameserver " + ns
@@ -233,12 +238,12 @@ def test_clearwater():
         except:
             logger.error("Unable to set test status")
 
-        functest_utils.push_results_to_db("functest",
-                                          "vims",
-                                          TESTCASE_START_TIME,
-                                          end_time_ts,
-                                          status,
-                                          RESULTS)
+        ft_utils.push_results_to_db("functest",
+                                    "vims",
+                                    TESTCASE_START_TIME,
+                                    end_time_ts,
+                                    status,
+                                    RESULTS)
 
         try:
             os.remove(VIMS_TEST_DIR + "temp.json")
@@ -386,7 +391,7 @@ def main():
 
     cfy.set_external_network_name(ext_net)
 
-    ns = functest_utils.get_resolvconf_ns()
+    ns = ft_utils.get_resolvconf_ns()
     if ns:
         cfy.set_nameservers(ns)
 
@@ -397,10 +402,10 @@ def main():
 
     logger.info("Prepare virtualenv for cloudify-cli")
     cmd = "chmod +x " + VIMS_DIR + "create_venv.sh"
-    functest_utils.execute_command(cmd)
+    ft_utils.execute_command(cmd)
     time.sleep(3)
     cmd = VIMS_DIR + "create_venv.sh " + VIMS_DATA_DIR
-    functest_utils.execute_command(cmd)
+    ft_utils.execute_command(cmd)
 
     cfy.download_manager_blueprint(
         CFY_MANAGER_BLUEPRINT['url'], CFY_MANAGER_BLUEPRINT['branch'])
index 5ff207c..0320b10 100755 (executable)
@@ -27,10 +27,10 @@ parser.add_argument("-r", "--report",
                     action="store_true")
 args = parser.parse_args()
 
-PARSER_REPO = functest_utils.get_parameter_from_yaml(
-    'general.directories.dir_repo_parser')
-RESULTS_DIR = functest_utils.get_parameter_from_yaml(
-    'general.directories.dir_results')
+PARSER_REPO = \
+    functest_utils.get_functest_config('general.directories.dir_repo_parser')
+RESULTS_DIR = \
+    functest_utils.get_functest_config('general.directories.dir_results')
 
 logger = ft_logger.Logger("parser").getLogger()
 
index 644ad1a..717e4b2 100644 (file)
@@ -7,23 +7,21 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 #
-from datetime import datetime as dt
 import json
 import os
 import re
-import requests
 import shutil
 import subprocess
 import sys
 import urllib2
-
-import functest.ci.tier_builder as tb
-import functest.utils.functest_logger as ft_logger
+from datetime import datetime as dt
 
 import dns.resolver
-from git import Repo
+import requests
 import yaml
+from git import Repo
 
+import functest.utils.functest_logger as ft_logger
 
 logger = ft_logger.Logger("functest_utils").getLogger()
 
@@ -152,9 +150,7 @@ def get_db_url():
     """
     Returns DB URL
     """
-    functest_yaml = get_functest_yaml()
-    db_url = functest_yaml.get("results").get("test_db_url")
-    return db_url
+    return get_functest_config('results.test_db_url')
 
 
 def logger_test_results(project, case_name, status, details):
@@ -331,10 +327,8 @@ def get_deployment_dir():
     """
     Returns current Rally deployment directory
     """
-    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")
+    deployment_name = get_functest_config('rally.deployment_name')
+    rally_dir = get_functest_config('general.directories.dir_rally_inst')
     cmd = ("rally deployment list | awk '/" + deployment_name +
            "/ {print $2}'")
     p = subprocess.Popen(cmd, shell=True,
@@ -350,15 +344,16 @@ def get_deployment_dir():
 
 
 def get_criteria_by_test(testname):
-    criteria = ""
-    file = get_testcases_file()
-    tiers = tb.TierBuilder("", "", file)
-    for tier in tiers.get_tiers():
-        for test in tier.get_tests():
-            if test.get_name() == testname:
-                criteria = test.get_criteria()
+    with open(get_testcases_file()) as f:
+        testcases_yaml = yaml.safe_load(f)
+
+    for dic_tier in testcases_yaml.get("tiers"):
+        for dic_testcase in dic_tier['testcases']:
+            if dic_testcase['name'] == testname:
+                return dic_testcase['criteria']
 
-    return criteria
+    logger.error('Project %s is not defined in testcases.yaml' % testname)
+    return None
 
 
 # ----------------------------------------------------------
@@ -366,18 +361,16 @@ def get_criteria_by_test(testname):
 #               YAML UTILS
 #
 # -----------------------------------------------------------
-def get_parameter_from_yaml(parameter, file=None):
+def get_parameter_from_yaml(parameter, file):
     """
-    Returns the value of a given parameter in config_functest.yaml
+    Returns the value of a given parameter in file.yaml
     parameter must be given in string format with dots
     Example: general.openstack.image_name
     """
-    if file is None:
-        file = os.environ["CONFIG_FUNCTEST_YAML"]
     with open(file) as f:
-        functest_yaml = yaml.safe_load(f)
+        file_yaml = yaml.safe_load(f)
     f.close()
-    value = functest_yaml
+    value = file_yaml
     for element in parameter.split("."):
         value = value.get(element)
         if value is None:
@@ -386,6 +379,11 @@ def get_parameter_from_yaml(parameter, file=None):
     return value
 
 
+def get_functest_config(parameter):
+    yaml_ = os.environ["CONFIG_FUNCTEST_YAML"]
+    return get_parameter_from_yaml(parameter, yaml_)
+
+
 def check_success_rate(case_name, success_rate):
     success_rate = float(success_rate)
     criteria = get_criteria_by_test(case_name)
index 3b937c9..bf582de 100755 (executable)
@@ -29,8 +29,8 @@ import yaml
 
 logger = ft_logger.Logger("openstack_clean").getLogger()
 
-OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
-    "general.openstack.snapshot_file")
+OS_SNAPSHOT_FILE = \
+    ft_utils.get_functest_config("general.openstack.snapshot_file")
 
 
 def separator():
@@ -233,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)
index 236cf74..560cadb 100755 (executable)
@@ -29,8 +29,8 @@ import yaml
 logger = ft_logger.Logger("openstack_snapshot").getLogger()
 
 
-OS_SNAPSHOT_FILE = ft_utils.get_parameter_from_yaml(
-    "general.openstack.snapshot_file")
+OS_SNAPSHOT_FILE = \
+    ft_utils.get_functest_config("general.openstack.snapshot_file")
 
 
 def separator():
index ff9b54a..8c2e00c 100755 (executable)
@@ -16,6 +16,7 @@ import time
 
 from cinderclient import client as cinderclient
 import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
 from glanceclient import client as glanceclient
 from keystoneclient.v2_0 import client as keystoneclient
 from neutronclient.v2_0 import client as neutronclient
@@ -235,6 +236,14 @@ def get_hypervisors(nova_client):
 def create_flavor(nova_client, flavor_name, ram, disk, vcpus):
     try:
         flavor = nova_client.flavors.create(flavor_name, ram, vcpus, disk)
+        try:
+            extra_specs = ft_utils.get_functest_config(
+                'general.flavor_extra_specs')
+            flavor.update(extra_specs)
+        except ValueError:
+            # flavor extra specs are not configured, therefore skip the update
+            pass
+
     except Exception, e:
         logger.error("Error [create_flavor(nova_client, '%s', '%s', '%s', "
                      "'%s')]: %s" % (flavor_name, ram, disk, vcpus, e))
@@ -902,11 +911,19 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
             if logger:
                 logger.info("Creating image '%s' from '%s'..." % (image_name,
                                                                   file_path))
+            try:
+                properties = ft_utils.get_functest_config(
+                    'general.image_properties')
+            except ValueError:
+                # image properties are not configured
+                # therefore don't add any properties
+                properties = {}
             with open(file_path) as fimage:
                 image = glance_client.images.create(name=image_name,
                                                     is_public=public,
                                                     disk_format=disk,
                                                     container_format=container,
+                                                    properties=properties,
                                                     data=fimage)
             image_id = image.id
         return image_id