summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--INFO2
-rw-r--r--api/Makefile (renamed from docs/api/Makefile)0
-rw-r--r--api/_static/.gitkeep (renamed from docs/api/_static/.gitkeep)0
-rw-r--r--api/_templates/.gitkeep (renamed from docs/api/_templates/.gitkeep)0
-rw-r--r--api/apidoc/functest.core.feature.rst (renamed from docs/api/apidoc/functest.core.feature.rst)0
-rw-r--r--api/apidoc/functest.core.rst (renamed from docs/api/apidoc/functest.core.rst)1
-rw-r--r--api/apidoc/functest.core.testcase.rst (renamed from docs/api/apidoc/functest.core.testcase.rst)0
-rw-r--r--api/apidoc/functest.core.unit.rst7
-rw-r--r--api/apidoc/functest.core.vnf.rst (renamed from docs/api/apidoc/functest.core.vnf.rst)0
-rw-r--r--api/apidoc/functest.opnfv_tests.rst (renamed from docs/api/apidoc/functest.opnfv_tests.rst)0
-rw-r--r--api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst (renamed from docs/api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst)0
-rw-r--r--api/apidoc/functest.opnfv_tests.sdn.odl.rst (renamed from docs/api/apidoc/functest.opnfv_tests.sdn.odl.rst)0
-rw-r--r--api/apidoc/functest.opnfv_tests.sdn.rst (renamed from docs/api/apidoc/functest.opnfv_tests.sdn.rst)0
-rw-r--r--api/apidoc/functest.rst (renamed from docs/api/apidoc/functest.rst)0
-rw-r--r--api/apidoc/modules.rst (renamed from docs/api/apidoc/modules.rst)0
-rw-r--r--api/conf.py (renamed from docs/api/conf.py)0
-rw-r--r--api/index.rst (renamed from docs/api/index.rst)0
-rw-r--r--docs/com/pres/framework/framework.md56
-rw-r--r--docs/com/pres/framework/index.html (renamed from docs/com/pres/framework/framework.html)0
-rw-r--r--docs/testing/user/configguide/configguide.rst2
-rwxr-xr-x[-rw-r--r--]functest/ci/download_images.sh0
-rwxr-xr-xfunctest/ci/run_tests.py4
-rw-r--r--functest/ci/testcases.yaml1
-rw-r--r--functest/cli/commands/cli_os.py5
-rw-r--r--functest/core/feature.py2
-rw-r--r--functest/core/pytest_suite_runner.py61
-rw-r--r--functest/core/unit.py89
-rw-r--r--functest/opnfv_tests/features/barometer.py2
-rw-r--r--functest/opnfv_tests/mano/orchestra.py2
-rw-r--r--functest/opnfv_tests/openstack/rally/rally.py2
-rw-r--r--functest/opnfv_tests/openstack/snaps/snaps_test_runner.py4
-rw-r--r--functest/opnfv_tests/openstack/tempest/conf_utils.py2
-rw-r--r--functest/opnfv_tests/openstack/tempest/tempest.py4
-rw-r--r--functest/opnfv_tests/openstack/vping/vping_base.py2
-rwxr-xr-xfunctest/opnfv_tests/openstack/vping/vping_ssh.py2
-rwxr-xr-xfunctest/opnfv_tests/openstack/vping/vping_userdata.py2
-rwxr-xr-xfunctest/opnfv_tests/sdn/onos/sfc/sfc.py2
-rw-r--r--functest/opnfv_tests/sdn/onos/sfc/sfc_onos.py69
-rw-r--r--functest/opnfv_tests/sdn/onos/teston/adapters/foundation.py34
-rw-r--r--functest/opnfv_tests/vnf/ims/clearwater.py2
-rw-r--r--functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py2
-rw-r--r--functest/tests/unit/cli/commands/test_cli_os.py15
-rw-r--r--functest/tests/unit/core/test_unit.py (renamed from functest/tests/unit/core/test_pytest_suite_runner.py)16
-rw-r--r--functest/tests/unit/utils/test_functest_utils.py10
-rw-r--r--tox.ini7
46 files changed, 253 insertions, 157 deletions
diff --git a/.gitignore b/.gitignore
index 341cf2811..f6e406203 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ nosetests.xml
functest.egg-info
*venv
.tox
+*.out
diff --git a/INFO b/INFO
index c38b3c62c..ea6f41aff 100644
--- a/INFO
+++ b/INFO
@@ -13,7 +13,7 @@ Repository: functest
Committers:
Morgan Richomme <morgan.richomme@orange.com>
Jose Lausuch <jose.lausuch@ericsson.com>
-Cedric Ollivier <ollivier.cedric@gmail.com>
+Cedric Ollivier <cedric.ollivier@orange.com>
Helen Yao <yaohelan@huawei.com>
Serena Feng <feng.xiaowei@zte.com.cn>
Juha Kosonen <juha.kosonen@nokia.com>
diff --git a/docs/api/Makefile b/api/Makefile
index ca9cfdc0b..ca9cfdc0b 100644
--- a/docs/api/Makefile
+++ b/api/Makefile
diff --git a/docs/api/_static/.gitkeep b/api/_static/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/docs/api/_static/.gitkeep
+++ b/api/_static/.gitkeep
diff --git a/docs/api/_templates/.gitkeep b/api/_templates/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/docs/api/_templates/.gitkeep
+++ b/api/_templates/.gitkeep
diff --git a/docs/api/apidoc/functest.core.feature.rst b/api/apidoc/functest.core.feature.rst
index a80e38daa..a80e38daa 100644
--- a/docs/api/apidoc/functest.core.feature.rst
+++ b/api/apidoc/functest.core.feature.rst
diff --git a/docs/api/apidoc/functest.core.rst b/api/apidoc/functest.core.rst
index 27b2ed1fb..55c795be0 100644
--- a/docs/api/apidoc/functest.core.rst
+++ b/api/apidoc/functest.core.rst
@@ -14,4 +14,5 @@ Submodules
functest.core.feature
functest.core.testcase
functest.core.vnf
+ functest.core.unit
diff --git a/docs/api/apidoc/functest.core.testcase.rst b/api/apidoc/functest.core.testcase.rst
index 2f947a1bf..2f947a1bf 100644
--- a/docs/api/apidoc/functest.core.testcase.rst
+++ b/api/apidoc/functest.core.testcase.rst
diff --git a/api/apidoc/functest.core.unit.rst b/api/apidoc/functest.core.unit.rst
new file mode 100644
index 000000000..5dd6880ed
--- /dev/null
+++ b/api/apidoc/functest.core.unit.rst
@@ -0,0 +1,7 @@
+functest.core.unit module
+=========================
+
+.. automodule:: functest.core.unit
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/api/apidoc/functest.core.vnf.rst b/api/apidoc/functest.core.vnf.rst
index 9fd6b375c..9fd6b375c 100644
--- a/docs/api/apidoc/functest.core.vnf.rst
+++ b/api/apidoc/functest.core.vnf.rst
diff --git a/docs/api/apidoc/functest.opnfv_tests.rst b/api/apidoc/functest.opnfv_tests.rst
index 52c2d4598..52c2d4598 100644
--- a/docs/api/apidoc/functest.opnfv_tests.rst
+++ b/api/apidoc/functest.opnfv_tests.rst
diff --git a/docs/api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst b/api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst
index e6f8c7367..e6f8c7367 100644
--- a/docs/api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst
+++ b/api/apidoc/functest.opnfv_tests.sdn.odl.odl.rst
diff --git a/docs/api/apidoc/functest.opnfv_tests.sdn.odl.rst b/api/apidoc/functest.opnfv_tests.sdn.odl.rst
index 60659a1e3..60659a1e3 100644
--- a/docs/api/apidoc/functest.opnfv_tests.sdn.odl.rst
+++ b/api/apidoc/functest.opnfv_tests.sdn.odl.rst
diff --git a/docs/api/apidoc/functest.opnfv_tests.sdn.rst b/api/apidoc/functest.opnfv_tests.sdn.rst
index ca8ae77da..ca8ae77da 100644
--- a/docs/api/apidoc/functest.opnfv_tests.sdn.rst
+++ b/api/apidoc/functest.opnfv_tests.sdn.rst
diff --git a/docs/api/apidoc/functest.rst b/api/apidoc/functest.rst
index 63860f8f3..63860f8f3 100644
--- a/docs/api/apidoc/functest.rst
+++ b/api/apidoc/functest.rst
diff --git a/docs/api/apidoc/modules.rst b/api/apidoc/modules.rst
index b8f33304a..b8f33304a 100644
--- a/docs/api/apidoc/modules.rst
+++ b/api/apidoc/modules.rst
diff --git a/docs/api/conf.py b/api/conf.py
index 746a90fe0..746a90fe0 100644
--- a/docs/api/conf.py
+++ b/api/conf.py
diff --git a/docs/api/index.rst b/api/index.rst
index db2234370..db2234370 100644
--- a/docs/api/index.rst
+++ b/api/index.rst
diff --git a/docs/com/pres/framework/framework.md b/docs/com/pres/framework/framework.md
index 3c1aae1b8..1b07a8e0b 100644
--- a/docs/com/pres/framework/framework.md
+++ b/docs/com/pres/framework/framework.md
@@ -252,6 +252,62 @@ run:
+## class Suite
+bases: TestCase
+
+base model for running unittest.TestSuite
+
+
+### run(**kwargs)
+
+- allows running any unittest.TestSuite
+- sets the following attributes required to push the results to DB:
+ - result
+ - start_time
+ - stop_time
+ - details
+
+
+
+## Your fourth test case
+
+
+### fourth.py
+
+```python
+#!/usr/bin/env python
+
+import unittest
+
+class TestStringMethods(unittest.TestCase):
+
+ def test_upper(self):
+ self.assertEqual('Hello World'.upper(),
+ 'HELLO WORLD')
+```
+
+
+### functest/ci/testcases.yaml
+
+```
+case_name: fourth
+project_name: functest
+criteria: 100
+blocking: true
+clean_flag: false
+description: ''
+dependencies:
+ installer: ''
+ scenario: ''
+run:
+ module: 'functest.core.unit'
+ class: 'Suite'
+ args:
+ name: 'fourth'
+```
+
+
+
## Euphrates
diff --git a/docs/com/pres/framework/framework.html b/docs/com/pres/framework/index.html
index 950c2bebf..950c2bebf 100644
--- a/docs/com/pres/framework/framework.html
+++ b/docs/com/pres/framework/index.html
diff --git a/docs/testing/user/configguide/configguide.rst b/docs/testing/user/configguide/configguide.rst
index 9a1749789..12dfd1059 100644
--- a/docs/testing/user/configguide/configguide.rst
+++ b/docs/testing/user/configguide/configguide.rst
@@ -74,7 +74,7 @@ executing the following sequence
#. Log in to container and execute the following command. Replace
the IP with installer address after the "-a" parameter::
- $REPOS_DIR/releng/utils/fetch_os_creds.sh \
+ fetch_os_creds.sh \
-d /home/opnfv/functest/conf/openstack.creds \
-i fuel \
-a 10.20.0.2 \
diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh
index f3fdef2e3..f3fdef2e3 100644..100755
--- a/functest/ci/download_images.sh
+++ b/functest/ci/download_images.sh
diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py
index 95353c87a..9b64a0ce5 100755
--- a/functest/ci/run_tests.py
+++ b/functest/ci/run_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python -u
+#!/usr/bin/env python
#
# Author: Jose Lausuch (jose.lausuch@ericsson.com)
#
@@ -221,7 +221,7 @@ class Runner(object):
try:
if kwargs['test']:
self.source_rc_file()
- logger.error(kwargs['test'])
+ logger.debug("Test args: %s", kwargs['test'])
if _tiers.get_tier(kwargs['test']):
self.run_tier(_tiers.get_tier(kwargs['test']))
elif _tiers.get_test(kwargs['test']):
diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml
index 10587f269..8222df102 100644
--- a/functest/ci/testcases.yaml
+++ b/functest/ci/testcases.yaml
@@ -266,7 +266,6 @@ tiers:
testcases:
-
case_name: promise
- enabled: false
project_name: promise
criteria: 100
blocking: false
diff --git a/functest/cli/commands/cli_os.py b/functest/cli/commands/cli_os.py
index e54eb423a..5e6e1109a 100644
--- a/functest/cli/commands/cli_os.py
+++ b/functest/cli/commands/cli_os.py
@@ -67,9 +67,8 @@ class CliOpenStack(object):
if installer_ip is None:
click.echo("The environment variable 'INSTALLER_IP' is not"
"defined. Please export it")
- cmd = ("%s/releng/utils/fetch_os_creds.sh -d %s -i %s -a %s"
- % (CONST.__getattribute__('dir_repos'),
- self.openstack_creds,
+ cmd = ("fetch_os_creds.sh -d %s -i %s -a %s"
+ % (self.openstack_creds,
installer_type,
installer_ip))
click.echo("Fetching credentials from installer node '%s' with IP=%s.."
diff --git a/functest/core/feature.py b/functest/core/feature.py
index 140c9bb2e..d53eb7d0e 100644
--- a/functest/core/feature.py
+++ b/functest/core/feature.py
@@ -7,7 +7,7 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
-"""Define the parent class of all Functest Features.
+"""Define the parent classes of all Functest Features.
Feature is considered as TestCase offered by Third-party. It offers
helpers to run any python method or any bash command.
diff --git a/functest/core/pytest_suite_runner.py b/functest/core/pytest_suite_runner.py
deleted file mode 100644
index efcef7b66..000000000
--- a/functest/core/pytest_suite_runner.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2015 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
-
-# pylint: disable=missing-docstring
-
-from __future__ import division
-
-import logging
-import time
-import unittest
-
-import six
-
-from functest.core import testcase
-
-
-class PyTestSuiteRunner(testcase.TestCase):
- """
- This superclass is designed to execute pre-configured unittest.TestSuite()
- objects
- """
-
- def __init__(self, **kwargs):
- super(PyTestSuiteRunner, self).__init__(**kwargs)
- self.suite = None
- self.logger = logging.getLogger(__name__)
-
- def run(self, **kwargs):
- """
- Starts test execution from the functest framework
- """
- try:
- name = kwargs["name"]
- try:
- self.suite = unittest.TestLoader().loadTestsFromName(name)
- except ImportError:
- self.logger.error("Can not import %s", name)
- return testcase.TestCase.EX_RUN_ERROR
- except KeyError:
- pass
- self.start_time = time.time()
- stream = six.StringIO()
- result = unittest.TextTestRunner(
- stream=stream, verbosity=2).run(self.suite)
- self.logger.debug("\n\n%s", stream.getvalue())
- self.stop_time = time.time()
- self.details = {"failures": result.failures,
- "errors": result.errors}
- try:
- self.result = 100 * (
- (result.testsRun - (len(result.failures) +
- len(result.errors))) /
- result.testsRun)
- return testcase.TestCase.EX_OK
- except ZeroDivisionError:
- self.logger.error("No test has been run")
- return testcase.TestCase.EX_RUN_ERROR
diff --git a/functest/core/unit.py b/functest/core/unit.py
new file mode 100644
index 000000000..515a20806
--- /dev/null
+++ b/functest/core/unit.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Cable Television Laboratories, Inc. and others.
+#
+# 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
+
+"""Define the parent class to run unittest.TestSuite as TestCase."""
+
+from __future__ import division
+
+import logging
+import time
+import unittest
+
+import six
+
+from functest.core import testcase
+
+__author__ = ("Steven Pisarski <s.pisarski@cablelabs.com>, "
+ "Cedric Ollivier <cedric.ollivier@orange.com>")
+
+
+class Suite(testcase.TestCase):
+ """Base model for running unittest.TestSuite."""
+
+ __logger = logging.getLogger(__name__)
+
+ def __init__(self, **kwargs):
+ super(Suite, self).__init__(**kwargs)
+ self.suite = None
+
+ def run(self, **kwargs):
+ """Run the test suite.
+
+ It allows running any unittest.TestSuite and getting its
+ execution status.
+
+ By default, it runs the suite defined as instance attribute.
+ It can be overriden by passing name as arg. It must
+ conform with TestLoader.loadTestsFromName().
+
+ It sets the following attributes required to push the results
+ to DB:
+
+ * result,
+ * start_time,
+ * stop_time,
+ * details.
+
+ Args:
+ kwargs: Arbitrary keyword arguments.
+
+ Returns:
+ TestCase.EX_OK if any TestSuite has been run,
+ TestCase.EX_RUN_ERROR otherwise.
+ """
+ try:
+ name = kwargs["name"]
+ try:
+ self.suite = unittest.TestLoader().loadTestsFromName(name)
+ except ImportError:
+ self.__logger.error("Can not import %s", name)
+ return testcase.TestCase.EX_RUN_ERROR
+ except KeyError:
+ pass
+ try:
+ assert self.suite
+ self.start_time = time.time()
+ stream = six.StringIO()
+ result = unittest.TextTestRunner(
+ stream=stream, verbosity=2).run(self.suite)
+ self.__logger.debug("\n\n%s", stream.getvalue())
+ self.stop_time = time.time()
+ self.details = {"failures": result.failures,
+ "errors": result.errors}
+ self.result = 100 * (
+ (result.testsRun - (len(result.failures) +
+ len(result.errors))) /
+ result.testsRun)
+ return testcase.TestCase.EX_OK
+ except AssertionError:
+ self.__logger.error("No suite is defined")
+ return testcase.TestCase.EX_RUN_ERROR
+ except ZeroDivisionError:
+ self.__logger.error("No test has been run")
+ return testcase.TestCase.EX_RUN_ERROR
diff --git a/functest/opnfv_tests/features/barometer.py b/functest/opnfv_tests/features/barometer.py
index cbfe7d9a8..e210f333c 100644
--- a/functest/opnfv_tests/features/barometer.py
+++ b/functest/opnfv_tests/features/barometer.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/functest/opnfv_tests/mano/orchestra.py b/functest/opnfv_tests/mano/orchestra.py
index dea26efc3..955f82ce1 100644
--- a/functest/opnfv_tests/mano/orchestra.py
+++ b/functest/opnfv_tests/mano/orchestra.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/functest/opnfv_tests/openstack/rally/rally.py b/functest/opnfv_tests/openstack/rally/rally.py
index 86ec35584..e362fd4d0 100644
--- a/functest/opnfv_tests/openstack/rally/rally.py
+++ b/functest/opnfv_tests/openstack/rally/rally.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py b/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py
index be0e5fe67..5e39946d4 100644
--- a/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py
+++ b/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py
@@ -7,7 +7,7 @@
import logging
-from functest.core.pytest_suite_runner import PyTestSuiteRunner
+from functest.core import unit
from functest.opnfv_tests.openstack.snaps import snaps_utils
from functest.utils import functest_utils
from functest.utils.constants import CONST
@@ -16,7 +16,7 @@ from snaps.openstack import create_flavor
from snaps.openstack.tests import openstack_tests
-class SnapsTestRunner(PyTestSuiteRunner):
+class SnapsTestRunner(unit.Suite):
"""
This test executes the SNAPS Python Tests
"""
diff --git a/functest/opnfv_tests/openstack/tempest/conf_utils.py b/functest/opnfv_tests/openstack/tempest/conf_utils.py
index 556a41d4c..15365ccff 100644
--- a/functest/opnfv_tests/openstack/tempest/conf_utils.py
+++ b/functest/opnfv_tests/openstack/tempest/conf_utils.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py
index 233ceb485..65d9f1fa2 100644
--- a/functest/opnfv_tests/openstack/tempest/tempest.py
+++ b/functest/opnfv_tests/openstack/tempest/tempest.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
@@ -148,7 +148,7 @@ class TempestCommon(testcase.TestCase):
first_pos = line.index("UUID=") + len("UUID=")
last_pos = line.index(") for deployment")
self.VERIFICATION_ID = line[first_pos:last_pos]
- logger.debug('Verication UUID: %s' % self.VERIFICATION_ID)
+ logger.debug('Verification UUID: %s', self.VERIFICATION_ID)
f_stdout.write(line)
p.wait()
diff --git a/functest/opnfv_tests/openstack/vping/vping_base.py b/functest/opnfv_tests/openstack/vping/vping_base.py
index 42fcebf45..7f568821b 100644
--- a/functest/opnfv_tests/openstack/vping/vping_base.py
+++ b/functest/opnfv_tests/openstack/vping/vping_base.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/openstack/vping/vping_ssh.py b/functest/opnfv_tests/openstack/vping/vping_ssh.py
index 0ad77402e..6ac0d6764 100755
--- a/functest/opnfv_tests/openstack/vping/vping_ssh.py
+++ b/functest/opnfv_tests/openstack/vping/vping_ssh.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/openstack/vping/vping_userdata.py b/functest/opnfv_tests/openstack/vping/vping_userdata.py
index 8ea9be84b..b69b39554 100755
--- a/functest/opnfv_tests/openstack/vping/vping_userdata.py
+++ b/functest/opnfv_tests/openstack/vping/vping_userdata.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) 2015 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/sdn/onos/sfc/sfc.py b/functest/opnfv_tests/sdn/onos/sfc/sfc.py
index 0155d24d7..a2dd7e9a0 100755
--- a/functest/opnfv_tests/sdn/onos/sfc/sfc.py
+++ b/functest/opnfv_tests/sdn/onos/sfc/sfc.py
@@ -1,4 +1,4 @@
-# !/usr/bin/python
+#!/usr/bin/env python
#
# Copyright (c) CREATED5 All rights reserved
# This program and the accompanying materials
diff --git a/functest/opnfv_tests/sdn/onos/sfc/sfc_onos.py b/functest/opnfv_tests/sdn/onos/sfc/sfc_onos.py
index 1101f2394..4e93c1337 100644
--- a/functest/opnfv_tests/sdn/onos/sfc/sfc_onos.py
+++ b/functest/opnfv_tests/sdn/onos/sfc/sfc_onos.py
@@ -100,8 +100,10 @@ class SfcOnos(object):
self.ip_pool = 0
self.vm_public_ip = []
self.vm_public_id = []
- self.cirros_username = CONST.openstack_image_username
- self.cirros_password = CONST.openstack_image_password
+ self.cirros_username = CONST.__getattribute__(
+ 'openstack_image_username')
+ self.cirros_password = CONST.__getattribute__(
+ 'openstack_image_password')
self.net_id1 = 0
self.vm = []
self.address = 0
@@ -115,7 +117,7 @@ class SfcOnos(object):
data = ('{"auth": {"tenantName": "admin", "passwordCredentials":'
'{ "username": "admin", "password": "console"}}}')
headers = {"Accept": "application/json"}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == OK):
json1_data = json.loads(response.content)
self.logger.debug(response.status_code)
@@ -135,12 +137,12 @@ class SfcOnos(object):
if self.admin_state_up != '':
Dicdata['admin_state_up'] = self.admin_state_up
Dicdata = {'network': Dicdata}
- data = json.dumps(Dicdata, indent=4)
+ data = json.dumps(Dicdata, indent=4)
url = 'http://%s:9696/%s/networks' % (self.neutron_hostname,
self.osver)
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -170,7 +172,7 @@ class SfcOnos(object):
self.osver)
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
self.logger.debug(response.status_code)
@@ -203,7 +205,7 @@ class SfcOnos(object):
self.osver)
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
self.logger.debug(response.status_code)
@@ -222,8 +224,9 @@ class SfcOnos(object):
"""Creation of Instance, using firewall image."""
url = ("http://%s:9292/v2/images?"
"name=TestSfcVm" % (self.glance_hostname))
- headers = {"Accept": "application/json", "Content-Type": "application/\
- octet-stream", "X-Auth-Token": self.token_id}
+ 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 == OK):
self.logger.debug(response.status_code)
@@ -273,7 +276,7 @@ class SfcOnos(object):
self.tenant_id)
headers = {"Accept": "application/json", "Content-Type":
"application/json", "X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == ACCEPTED):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -295,8 +298,8 @@ class SfcOnos(object):
for y in range(0, 3):
url = ("http://%s:8774/v2.1/servers/"
"detail?name=vm" + str(y)) % (self.neutron_hostname)
- headers = {"Accept": "application/json", "X-Auth-Token":
- self.token_id}
+ headers = {"Accept": "application/json",
+ "X-Auth-Token": self.token_id}
response = requests.get(url, headers=headers)
if (response.status_code == OK):
self.logger.debug(response.status_code)
@@ -332,7 +335,7 @@ class SfcOnos(object):
self.osver)
headers = {"Accept": "application/json", "X-Auth-Token":
self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
info = ("Creation of Port Pair PP" + str(p) +
" is successful")
@@ -380,7 +383,7 @@ class SfcOnos(object):
self.osver))
headers = {"Accept": "application/json", "X-Auth-Token":
self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
info = ("Creation of Port Group PG" + str(p) +
"is successful")
@@ -431,7 +434,7 @@ class SfcOnos(object):
self.osver))
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
json1_data = json.loads(response.content)
self.flow_class_if = json1_data['flow_classifier']['id']
@@ -462,7 +465,7 @@ class SfcOnos(object):
headers = {"Accept": "application/json",
"Content-Type": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
self.logger.debug("Creation of PORT CHAIN is successful")
json1_data = json.loads(response.content)
@@ -476,7 +479,7 @@ class SfcOnos(object):
time.sleep(5)
response = requests.get('http://' + self.onos_hostname +
':8181/onos/v1/flows',
- auth=("karaf", "karaf"))
+ auth=("karaf", "karaf"))
if (response.status_code == OK):
self.logger.debug("Flow is successfully Queries")
json1_data = json.loads(response.content)
@@ -505,7 +508,7 @@ class SfcOnos(object):
self.osver)
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == CREATED):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -548,7 +551,7 @@ class SfcOnos(object):
self.router_id))
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.put(url, headers=headers, data=data)
+ response = requests.put(url, headers=headers, data=data)
if (response.status_code == OK):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -570,7 +573,7 @@ class SfcOnos(object):
self.router_id)
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.put(url, headers=headers, data=data)
+ response = requests.put(url, headers=headers, data=data)
if (response.status_code == OK):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -590,7 +593,7 @@ class SfcOnos(object):
"os-floating-ips" % (self.nova_hostname))
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if (response.status_code == OK):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -614,7 +617,7 @@ class SfcOnos(object):
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.post(url, headers=headers, data=data)
+ response = requests.post(url, headers=headers, data=data)
if(response.status_code == ACCEPTED):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -631,12 +634,12 @@ class SfcOnos(object):
s = pxssh.pxssh()
hostname = self.vm_public_ip[0]
- s.login(hostname, self.cirros_username, self.cirros_password)
+ s.login(hostname, self.cirros_username, self.cirros_password)
s.sendline("ping -c 5 " + str(self.port_ip[2]))
s.prompt() # match the prompt
- ping_re = re.search("transmitted.*received", s.before).group()
- x = re.split('\s+', ping_re)
+ ping_re = re.search("transmitted.*received", s.before).group()
+ x = re.split('\s+', ping_re)
if (x[1] >= "1"):
self.logger.info("Ping is Successfull")
else:
@@ -645,7 +648,7 @@ class SfcOnos(object):
def vm1(queue1):
s = pxssh.pxssh()
hostname = self.vm_public_ip[1]
- s.login(hostname, self.cirros_username, self.cirros_password)
+ s.login(hostname, self.cirros_username, self.cirros_password)
s.sendline('sudo ./firewall')
s.prompt()
output_pack = s.before
@@ -676,7 +679,7 @@ class SfcOnos(object):
if result0 == 0 and result1 == 0:
time.sleep(300)
queue1 = Queue()
- p1 = Process(target=vm1, args=(queue1, ))
+ p1 = Process(target=vm1, args=(queue1, ))
p1.start()
p2 = Process(target=vm0)
p2.start()
@@ -703,7 +706,7 @@ class SfcOnos(object):
"""Check the PC SF Map Stats in the ONOS."""
response = requests.get('http://' + self.onos_hostname +
':8181/onos/vtn/portChainSfMap/' +
- self.PC_id, auth=("karaf", "karaf"))
+ self.PC_id, auth=("karaf", "karaf"))
if (response.status_code == OK):
self.logger.info("portChainSfMap is successfully Queries")
return(response.status_code)
@@ -761,7 +764,7 @@ class SfcOnos(object):
def deletePortPair(self):
"""Deletion of Portpair."""
- for p in range(1, 2):
+ for p in range(1, 2):
url = ("http://%s:9696/%s/sfc/"
"port_pairs/%s" % (self.neutron_hostname,
self.osver,
@@ -819,7 +822,7 @@ class SfcOnos(object):
self.router_id))
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.put(url, headers=headers, data=data)
+ response = requests.put(url, headers=headers, data=data)
if (response.status_code == OK):
self.logger.debug(response.status_code)
self.logger.debug(response.content)
@@ -833,14 +836,14 @@ class SfcOnos(object):
self.router_id))
headers = {"Accept": "application/json",
"X-Auth-Token": self.token_id}
- response = requests.put(url, headers=headers, data=data)
+ response = requests.put(url, headers=headers, data=data)
if (response.status_code == OK):
url = ("http://%s:9696/%s/"
"routers/%s" % (self.neutron_hostname,
self.osver,
self.router_id))
- headers = {"Accept": "application/json", "X-Auth-Token":
- self.token_id}
+ headers = {"Accept": "application/json",
+ "X-Auth-Token": self.token_id}
response = requests.delete(url, headers=headers)
if (response.status_code == NO_CONTENT):
self.logger.debug(response.status_code)
diff --git a/functest/opnfv_tests/sdn/onos/teston/adapters/foundation.py b/functest/opnfv_tests/sdn/onos/teston/adapters/foundation.py
index 25421d400..f9eee7af6 100644
--- a/functest/opnfv_tests/sdn/onos/teston/adapters/foundation.py
+++ b/functest/opnfv_tests/sdn/onos/teston/adapters/foundation.py
@@ -26,7 +26,8 @@ class Foundation(object):
def __init__(self):
# currentpath = os.getcwd()
- currentpath = '%s/sdn/onos/teston/ci' % CONST.dir_functest_data
+ currentpath = ('{0}/sdn/onos/teston/ci'
+ .format(CONST.__getattribute__('dir_functest_data')))
self.cipath = currentpath
self.logdir = os.path.join(currentpath, 'log')
self.workhome = currentpath[0: currentpath.rfind('opnfv_tests') - 1]
@@ -55,22 +56,25 @@ class Foundation(object):
Get Default Parameters value
"""
self.Result_DB = ft_utils.get_db_url()
- self.masterusername = CONST.ONOS_onosbench_username
- self.masterpassword = CONST.ONOS_onosbench_password
- self.agentusername = CONST.ONOS_onoscli_username
- self.agentpassword = CONST.ONOS_onoscli_password
- self.runtimeout = CONST.ONOS_runtimeout
- self.OCT = CONST.ONOS_environment_OCT
- self.OC1 = CONST.ONOS_environment_OC1
- self.OC2 = CONST.ONOS_environment_OC2
- self.OC3 = CONST.ONOS_environment_OC3
- self.OCN = CONST.ONOS_environment_OCN
- self.OCN2 = CONST.ONOS_environment_OCN2
- self.installer_master = CONST.ONOS_environment_installer_master
+ self.masterusername = CONST.__getattribute__('ONOS_onosbench_username')
+ self.masterpassword = CONST.__getattribute__('ONOS_onosbench_password')
+ self.agentusername = CONST.__getattribute__('ONOS_onoscli_username')
+ self.agentpassword = CONST.__getattribute__('ONOS_onoscli_password')
+ self.runtimeout = CONST.__getattribute__('ONOS_runtimeout')
+ self.OCT = CONST.__getattribute__('ONOS_environment_OCT')
+ self.OC1 = CONST.__getattribute__('ONOS_environment_OC1')
+ self.OC2 = CONST.__getattribute__('ONOS_environment_OC2')
+ self.OC3 = CONST.__getattribute__('ONOS_environment_OC3')
+ self.OCN = CONST.__getattribute__('ONOS_environment_OCN')
+ self.OCN2 = CONST.__getattribute__('ONOS_environment_OCN2')
+ self.installer_master = CONST.__getattribute__(
+ 'ONOS_environment_installer_master')
self.installer_master_username = (
- CONST.ONOS_environment_installer_master_username)
+ CONST.__getattribute__(
+ 'ONOS_environment_installer_master_username'))
self.installer_master_password = (
- CONST.ONOS_environment_installer_master_password)
+ CONST.__getattribute__(
+ 'ONOS_environment_installer_master_password'))
self.hosts = [self.OC1, self.OCN, self.OCN2]
self.localhost = self.OCT
diff --git a/functest/opnfv_tests/vnf/ims/clearwater.py b/functest/opnfv_tests/vnf/ims/clearwater.py
index 32c6dc5c9..33ed352dc 100644
--- a/functest/opnfv_tests/vnf/ims/clearwater.py
+++ b/functest/opnfv_tests/vnf/ims/clearwater.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
# coding: utf8
#######################################################################
#
diff --git a/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py b/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
index 4ceeb25f8..0cdfcb3f1 100644
--- a/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
+++ b/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
# coding: utf8
#######################################################################
#
diff --git a/functest/tests/unit/cli/commands/test_cli_os.py b/functest/tests/unit/cli/commands/test_cli_os.py
index 7ab4ddc3b..b551ee4d2 100644
--- a/functest/tests/unit/cli/commands/test_cli_os.py
+++ b/functest/tests/unit/cli/commands/test_cli_os.py
@@ -70,9 +70,8 @@ class CliOpenStackTesting(unittest.TestCase):
mock_ftutils_execute):
CONST.__setattr__('INSTALLER_TYPE', self.installer_type)
CONST.__setattr__('INSTALLER_IP', self.installer_ip)
- cmd = ("%s/releng/utils/fetch_os_creds.sh -d %s -i %s -a %s"
- % (CONST.__getattribute__('dir_repos'),
- self.openstack_creds,
+ cmd = ("fetch_os_creds.sh -d %s -i %s -a %s"
+ % (self.openstack_creds,
self.installer_type,
self.installer_ip))
self.cli_os.openstack_creds = self.openstack_creds
@@ -93,9 +92,8 @@ class CliOpenStackTesting(unittest.TestCase):
mock_ftutils_execute):
CONST.__setattr__('INSTALLER_TYPE', None)
CONST.__setattr__('INSTALLER_IP', self.installer_ip)
- cmd = ("%s/releng/utils/fetch_os_creds.sh -d %s -i %s -a %s"
- % (CONST.__getattribute__('dir_repos'),
- self.openstack_creds,
+ cmd = ("fetch_os_creds.sh -d %s -i %s -a %s"
+ % (self.openstack_creds,
None,
self.installer_ip))
self.cli_os.openstack_creds = self.openstack_creds
@@ -121,9 +119,8 @@ class CliOpenStackTesting(unittest.TestCase):
installer_ip = None
CONST.__setattr__('INSTALLER_TYPE', installer_type)
CONST.__setattr__('INSTALLER_IP', installer_ip)
- cmd = ("%s/releng/utils/fetch_os_creds.sh -d %s -i %s -a %s"
- % (CONST.__getattribute__('dir_repos'),
- self.openstack_creds,
+ cmd = ("fetch_os_creds.sh -d %s -i %s -a %s"
+ % (self.openstack_creds,
installer_type,
installer_ip))
self.cli_os.openstack_creds = self.openstack_creds
diff --git a/functest/tests/unit/core/test_pytest_suite_runner.py b/functest/tests/unit/core/test_unit.py
index f317cdea2..79c4e7d7a 100644
--- a/functest/tests/unit/core/test_pytest_suite_runner.py
+++ b/functest/tests/unit/core/test_unit.py
@@ -12,26 +12,29 @@ import unittest
import mock
-from functest.core import pytest_suite_runner
+from functest.core import unit
from functest.core import testcase
class PyTestSuiteRunnerTesting(unittest.TestCase):
def setUp(self):
- self.psrunner = pytest_suite_runner.PyTestSuiteRunner()
+ self.psrunner = unit.Suite()
+ self.psrunner.suite = "foo"
@mock.patch('unittest.TestLoader')
def _test_run(self, mock_class=None, result=mock.Mock(),
status=testcase.TestCase.EX_OK):
- with mock.patch('functest.core.pytest_suite_runner.'
- 'unittest.TextTestRunner.run',
+ with mock.patch('functest.core.unit.unittest.TextTestRunner.run',
return_value=result):
self.assertEqual(self.psrunner.run(), status)
mock_class.assert_not_called()
def test_check_suite_null(self):
- self.assertEqual(self.psrunner.suite, None)
+ self.assertEqual(unit.Suite().suite, None)
+ self.psrunner.suite = None
+ self._test_run(result=mock.Mock(),
+ status=testcase.TestCase.EX_RUN_ERROR)
def test_run_no_ut(self):
mock_result = mock.Mock(testsRun=0, errors=[], failures=[])
@@ -78,8 +81,7 @@ class PyTestSuiteRunnerTesting(unittest.TestCase):
failures=[])
mock_obj = mock.Mock()
mock_class.side_effect = mock_obj
- with mock.patch('functest.core.pytest_suite_runner.'
- 'unittest.TextTestRunner.run',
+ with mock.patch('functest.core.unit.unittest.TextTestRunner.run',
return_value=mock_result):
self.assertEqual(self.psrunner.run(name='foo'),
testcase.TestCase.EX_OK)
diff --git a/functest/tests/unit/utils/test_functest_utils.py b/functest/tests/unit/utils/test_functest_utils.py
index 218f7f727..12604c1a0 100644
--- a/functest/tests/unit/utils/test_functest_utils.py
+++ b/functest/tests/unit/utils/test_functest_utils.py
@@ -452,9 +452,8 @@ class FunctestUtilsTesting(unittest.TestCase):
mock_logger_info.assert_called_once_with(msg_exec)
mopen.assert_called_once_with(self.output_file, "w")
- @mock.patch('functest.utils.functest_utils.logger.info')
- def test_execute_command_args_missing_with_success(self, mock_logger_info,
- ):
+ @mock.patch('sys.stdout')
+ def test_execute_command_args_missing_with_success(self, stdout=None):
with mock.patch('functest.utils.functest_utils.subprocess.Popen') \
as mock_subproc_open:
@@ -476,9 +475,8 @@ class FunctestUtilsTesting(unittest.TestCase):
output_file=None)
self.assertEqual(resp, 0)
- @mock.patch('functest.utils.functest_utils.logger.error')
- def test_execute_command_args_missing_with_error(self, mock_logger_error,
- ):
+ @mock.patch('sys.stdout')
+ def test_execute_command_args_missing_with_error(self, stdout=None):
with mock.patch('functest.utils.functest_utils.subprocess.Popen') \
as mock_subproc_open:
diff --git a/tox.ini b/tox.ini
index bde3a9757..a944464d5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -16,7 +16,7 @@ commands = nosetests --with-xunit \
[testenv:docs]
basepython = python2.7
-commands = sphinx-build -W -b html docs/api/ docs/api/_build
+commands = sphinx-build -W -b html api/ api/_build
[testenv:pep8]
basepython = python2.7
@@ -29,8 +29,9 @@ basepython = python2.7
deps =
{[testenv]deps}
whitelist_externals = bash
-commands = bash -c \
- "pylint --persistent=n functest | sed -ne '/Raw metrics/,//p'"
+commands = bash -c "\
+ pylint -f parseable --disable=locally-disabled functest | \
+ tee pylint.out | sed -ne '/Raw metrics/,//p'"
[testenv:py35]
dirs =