aboutsummaryrefslogtreecommitdiffstats
path: root/functest/tests
diff options
context:
space:
mode:
Diffstat (limited to 'functest/tests')
-rw-r--r--functest/tests/unit/ci/test_check_deployment.py286
-rw-r--r--functest/tests/unit/cli/commands/__init__.py0
-rw-r--r--functest/tests/unit/cli/commands/test_cli_env.py69
-rw-r--r--functest/tests/unit/cli/commands/test_cli_os.py78
-rw-r--r--functest/tests/unit/cli/commands/test_cli_testcase.py77
-rw-r--r--functest/tests/unit/cli/commands/test_cli_tier.py104
-rw-r--r--functest/tests/unit/cli/test_cli_base.py102
-rw-r--r--functest/tests/unit/core/test_vnf.py196
-rw-r--r--functest/tests/unit/odl/test_odl.py283
-rw-r--r--functest/tests/unit/openstack/cinder/__init__.py (renamed from functest/tests/unit/ci/__init__.py)0
-rw-r--r--functest/tests/unit/openstack/cinder/test_cinder.py270
-rw-r--r--functest/tests/unit/openstack/rally/test_rally.py442
-rw-r--r--functest/tests/unit/openstack/snaps/__init__.py0
-rw-r--r--functest/tests/unit/openstack/snaps/test_snaps.py288
-rw-r--r--functest/tests/unit/openstack/tempest/test_conf_utils.py258
-rw-r--r--functest/tests/unit/openstack/tempest/test_tempest.py307
-rw-r--r--functest/tests/unit/openstack/vmtp/__init__.py (renamed from functest/tests/unit/cli/__init__.py)0
-rw-r--r--functest/tests/unit/openstack/vmtp/test_vmtp.py90
-rw-r--r--functest/tests/unit/openstack/vping/test_vping.py175
-rw-r--r--functest/tests/unit/openstack/vping/test_vping_ssh.py147
-rw-r--r--functest/tests/unit/utils/test_functest_utils.py337
-rw-r--r--functest/tests/unit/vnf/epc/test_juju_epc.py1
-rw-r--r--functest/tests/unit/vnf/ims/test_clearwater.py (renamed from functest/tests/unit/vnf/ims/test_ims_base.py)8
-rw-r--r--functest/tests/unit/vnf/ims/test_cloudify_ims.py49
-rw-r--r--functest/tests/unit/vnf/router/test_cloudify_vrouter.py53
-rw-r--r--functest/tests/unit/vnf/router/test_vrouter_base.py10
26 files changed, 1409 insertions, 2221 deletions
diff --git a/functest/tests/unit/ci/test_check_deployment.py b/functest/tests/unit/ci/test_check_deployment.py
deleted file mode 100644
index aeeca5871..000000000
--- a/functest/tests/unit/ci/test_check_deployment.py
+++ /dev/null
@@ -1,286 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2017 Ericsson 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
-
-# pylint: disable=missing-docstring
-
-import socket
-import unittest
-
-import logging
-import mock
-
-from functest.ci import check_deployment
-
-__author__ = "Jose Lausuch <jose.lausuch@ericsson.com>"
-
-
-class CheckDeploymentTesting(unittest.TestCase):
- """The super class which testing classes could inherit."""
- # pylint: disable=missing-docstring,too-many-public-methods
-
- logging.disable(logging.CRITICAL)
-
- def setUp(self):
- self.client_test = mock.Mock()
- self.deployment = check_deployment.CheckDeployment()
- self.service_test = 'compute'
- self.rc_file = self.deployment.rc_file
- self.endpoint_test = 'http://192.168.0.6:5000/v3'
- creds_attr = {'auth_url': self.endpoint_test,
- 'proxy_settings': ''}
- proxy_attr = {'host': '192.168.0.1', 'port': '5000'}
- proxy_settings = mock.Mock()
- proxy_settings.configure_mock(**proxy_attr)
- self.os_creds = mock.Mock()
- self.os_creds.configure_mock(**creds_attr)
- self.os_creds.proxy_settings = proxy_settings
- self.deployment.os_creds = self.os_creds
-
- @mock.patch('socket.socket.connect', side_effect=TypeError)
- def test_verify_connectivity_ko1(self, *args):
- self.assertFalse(check_deployment.verify_connectivity("127.0.0.1"))
- args[0].assert_called_once_with((None, 80))
-
- @mock.patch('socket.socket.connect', side_effect=socket.error)
- def test_verify_connectivity_ko2(self, *args):
- self.assertFalse(
- check_deployment.verify_connectivity("http://127.0.0.1"))
- args[0].assert_called_once_with(("127.0.0.1", 80))
-
- @mock.patch('socket.socket.connect', side_effect=socket.error)
- def test_verify_connectivity_ko3(self, *args):
- self.assertFalse(
- check_deployment.verify_connectivity("https://127.0.0.1"))
- args[0].assert_called_once_with(("127.0.0.1", 443))
-
- @mock.patch('socket.socket.connect')
- def test_verify_connectivity(self, *args):
- self.assertTrue(
- check_deployment.verify_connectivity("https://127.0.0.1"))
- args[0].assert_called_once_with(("127.0.0.1", 443))
-
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_session',
- return_value=mock.Mock(
- get_token=mock.Mock(side_effect=Exception)))
- def test_get_auth_token_ko(self, *args):
- with self.assertRaises(Exception):
- check_deployment.get_auth_token(self.os_creds)
- args[0].assert_called_once_with(self.os_creds)
-
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_session',
- return_value=mock.Mock(
- get_token=mock.Mock(return_value="foo")))
- def test_get_auth_token(self, *args):
- self.assertEqual(check_deployment.get_auth_token(self.os_creds), "foo")
- args[0].assert_called_once_with(self.os_creds)
-
- @mock.patch('six.moves.builtins.open',
- mock.mock_open(read_data='OS_AUTH_URL'))
- @mock.patch('functest.ci.check_deployment.os.path.isfile', returns=True)
- def test_check_rc(self, *args):
- self.deployment.check_rc()
- args[0].assert_called_once_with(self.rc_file)
-
- @mock.patch('functest.ci.check_deployment.os.path.isfile',
- return_value=False)
- def test_check_rc_missing_file(self, *args):
- with self.assertRaises(Exception) as context:
- self.deployment.check_rc()
- args[0].assert_called_once_with(self.rc_file)
- msg = 'RC file {} does not exist!'.format(self.rc_file)
- self.assertTrue(msg in str(context.exception))
-
- @mock.patch('six.moves.builtins.open',
- mock.mock_open(read_data='test'))
- @mock.patch('functest.ci.check_deployment.os.path.isfile',
- return_value=True)
- def test_check_rc_missing_os_auth(self, *args):
- with self.assertRaises(Exception) as context:
- self.deployment.check_rc()
- args[0].assert_called_once_with(self.rc_file)
- msg = 'OS_AUTH_URL not defined in {}.'.format(self.rc_file)
- self.assertTrue(msg in str(context.exception))
-
- @mock.patch('functest.ci.check_deployment.get_auth_token',
- return_value='gAAAAABaOhXGS')
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=True)
- def test_check_auth_endpoint(self, *args):
- self.deployment.check_auth_endpoint()
- args[0].assert_called_once_with(self.endpoint_test)
- args[1].assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=False)
- def test_check_auth_endpoint_ko(self, *args):
- with self.assertRaises(Exception) as context:
- self.deployment.check_auth_endpoint()
- msg = "OS_AUTH_URL {} is not reachable.".format(self.os_creds.auth_url)
- args[0].assert_called_once_with(self.os_creds.auth_url)
- self.assertTrue(msg in str(context.exception))
-
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=True)
- @mock.patch('functest.ci.check_deployment.keystone_utils.get_endpoint')
- def test_check_public_endpoint(self, *args):
- args[0].return_value = self.endpoint_test
- self.deployment.check_public_endpoint()
- args[0].assert_called_once_with(
- mock.ANY, 'identity', interface='public')
- args[1].assert_called_once_with(self.endpoint_test)
-
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=False)
- @mock.patch('functest.ci.check_deployment.keystone_utils.get_endpoint')
- def test_check_public_endpoint_ko(self, *args):
- args[0].return_value = self.endpoint_test
- with self.assertRaises(Exception) as context:
- self.deployment.check_public_endpoint()
- args[0].assert_called_once_with(
- mock.ANY, 'identity', interface='public')
- args[1].assert_called_once_with(self.endpoint_test)
- msg = "Public endpoint {} is not reachable.".format(self.endpoint_test)
- self.assertTrue(msg in str(context.exception))
-
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=True)
- @mock.patch('functest.ci.check_deployment.keystone_utils.get_endpoint')
- def test_check_service_endpoint(self, *args):
- self.deployment.check_service_endpoint(self.service_test)
- args[0].assert_called_once_with(
- mock.ANY, self.service_test, interface='public')
- args[1].assert_called_once_with(args[0].return_value)
-
- @mock.patch('functest.ci.check_deployment.verify_connectivity',
- return_value=False)
- @mock.patch('functest.ci.check_deployment.keystone_utils.get_endpoint')
- def test_check_service_endpoint_ko(self, *args):
- args[0].return_value = self.endpoint_test
- with self.assertRaises(Exception) as context:
- self.deployment.check_service_endpoint(self.service_test)
- msg = "{} endpoint {} is not reachable.".format(
- self.service_test, self.endpoint_test)
- self.assertTrue(msg in str(context.exception))
- args[0].assert_called_once_with(
- mock.ANY, self.service_test, interface='public')
- args[1].assert_called_once_with(args[0].return_value)
-
- @mock.patch('functest.ci.check_deployment.nova_utils.nova_client')
- def test_check_nova(self, mock_method):
- self.deployment.check_nova()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.nova_utils.nova_client',
- return_value=mock.Mock(
- servers=mock.Mock(list=mock.Mock(side_effect=Exception))))
- def test_check_nova_fail(self, mock_method):
- with self.assertRaises(Exception):
- self.deployment.check_nova()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.neutron_utils.neutron_client')
- def test_check_neutron(self, mock_method):
- self.deployment.check_neutron()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.neutron_utils.neutron_client',
- return_value=mock.Mock(
- list_networks=mock.Mock(side_effect=Exception)))
- def test_check_neutron_fail(self, mock_method):
- with self.assertRaises(Exception):
- self.deployment.check_neutron()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.glance_utils.glance_client')
- def test_check_glance(self, mock_method):
- self.deployment.check_glance()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.glance_utils.glance_client',
- return_value=mock.Mock(
- images=mock.Mock(list=mock.Mock(side_effect=Exception))))
- def test_check_glance_fail(self, mock_method):
- with self.assertRaises(Exception):
- self.deployment.check_glance()
- mock_method.assert_called_once_with(mock.ANY)
-
- @mock.patch('functest.ci.check_deployment.LOGGER.info')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='ext-net')
- def test_check_extnet(self, *args):
- self.deployment.check_ext_net()
- args[0].assert_called_once_with(mock.ANY)
- args[1].assert_called_once_with(
- "External network found: %s", "ext-net")
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='')
- def test_check_extnet_none(self, mock_getext):
- with self.assertRaises(Exception) as context:
- self.deployment.check_ext_net()
- self.assertTrue(mock_getext.called)
- msg = 'ERROR: No external networks in the deployment.'
- self.assertTrue(msg in str(context.exception))
-
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_rc',
- side_effect=Exception)
- def test_check_all_exc1(self, *args):
- with self.assertRaises(Exception):
- self.deployment.check_all()
- args[0].assert_called_once_with()
-
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
- side_effect=Exception)
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_rc')
- def test_check_all_exc2(self, *args):
- with self.assertRaises(Exception):
- self.deployment.check_all()
- args[0].assert_called_once_with()
- args[1].assert_called_once_with(
- os_env_file=self.rc_file, proxy_settings_str=None,
- ssh_proxy_cmd=None)
-
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
- return_value=None)
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_rc')
- def test_check_all_exc3(self, *args):
- with self.assertRaises(Exception):
- self.deployment.check_all()
- args[0].assert_called_once_with()
- args[1].assert_called_once_with(
- os_env_file=self.rc_file, proxy_settings_str=None,
- ssh_proxy_cmd=None)
-
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_ext_net')
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_glance')
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_neutron')
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_nova')
- @mock.patch(
- 'functest.ci.check_deployment.CheckDeployment.check_service_endpoint')
- @mock.patch(
- 'functest.ci.check_deployment.CheckDeployment.check_public_endpoint')
- @mock.patch(
- 'functest.ci.check_deployment.CheckDeployment.check_auth_endpoint')
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials')
- @mock.patch('functest.ci.check_deployment.CheckDeployment.check_rc')
- def test_check_all(self, *args):
- self.assertEqual(self.deployment.check_all(), 0)
- for i in [0, 2, 3, 5, 6, 7, 8]:
- args[i].assert_called_once_with()
- args[1].assert_called_once_with(
- os_env_file=self.rc_file, proxy_settings_str=None,
- ssh_proxy_cmd=None)
- calls = [mock.call('compute'), mock.call('network'),
- mock.call('image')]
- args[4].assert_has_calls(calls)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/cli/commands/__init__.py b/functest/tests/unit/cli/commands/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/functest/tests/unit/cli/commands/__init__.py
+++ /dev/null
diff --git a/functest/tests/unit/cli/commands/test_cli_env.py b/functest/tests/unit/cli/commands/test_cli_env.py
deleted file mode 100644
index 7d6f77870..000000000
--- a/functest/tests/unit/cli/commands/test_cli_env.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-
-# 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
-
-import logging
-import os
-import re
-import unittest
-
-import mock
-
-from functest.cli.commands import cli_env
-
-
-class RegexMatch(object): # pylint: disable=too-few-public-methods
- def __init__(self, msg):
- self.msg = msg
-
- def __eq__(self, other):
- match = re.search(self.msg, other)
- return match is not None
-
-
-class CliEnvTesting(unittest.TestCase):
-
- def setUp(self):
- self.cli_environ = cli_env.CliEnv()
-
- def _test_show_missing_env_var(self, var, *args):
- # pylint: disable=unused-argument
- if var == 'INSTALLER_TYPE':
- os.environ['INSTALLER_TYPE'] = ''
- reg_string = r"| INSTALLER: Unknown, \S+\s*|"
- elif var == 'SCENARIO':
- os.environ['DEPLOY_SCENARIO'] = ''
- reg_string = r"| SCENARIO: Unknown\s*|"
- elif var == 'NODE':
- os.environ['NODE_NAME'] = ''
- reg_string = r"| POD: Unknown\s*|"
- elif var == 'BUILD_TAG':
- os.environ['BUILD_TAG'] = ''
- reg_string = r"| BUILD TAG: None|"
-
- with mock.patch('functest.cli.commands.cli_env.click.echo') \
- as mock_click_echo:
- self.cli_environ.show()
- mock_click_echo.assert_called_with(RegexMatch(reg_string))
-
- def test_show_ci_installer_type_ko(self, *args):
- self._test_show_missing_env_var('INSTALLER_TYPE', *args)
-
- def test_show_missing_ci_scenario(self, *args):
- self._test_show_missing_env_var('SCENARIO', *args)
-
- def test_show_missing_ci_node(self, *args):
- self._test_show_missing_env_var('NODE', *args)
-
- def test_show_missing_ci_build_tag(self, *args):
- self._test_show_missing_env_var('BUILD_TAG', *args)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/cli/commands/test_cli_os.py b/functest/tests/unit/cli/commands/test_cli_os.py
deleted file mode 100644
index a5e562a27..000000000
--- a/functest/tests/unit/cli/commands/test_cli_os.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/env python
-#
-# jose.lausuch@ericsson.com
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# pylint: disable=missing-docstring
-
-import logging
-import unittest
-import os
-
-import mock
-
-from functest.cli.commands import cli_os
-
-
-class CliOpenStackTesting(unittest.TestCase):
-
- def setUp(self):
- self.endpoint_ip = 'test_ip'
- self.os_auth_url = 'http://test_ip:test_port/v2.0'
- self.installer_type = 'test_installer_type'
- self.openstack_creds = 'test_env_file'
- self.snapshot_file = 'test_snapshot_file'
- os.environ["OS_AUTH_URL"] = ''
- self.cli_os = cli_os.CliOpenStack()
-
- def test_ping_endpoint_default(self):
- self.cli_os.os_auth_url = self.os_auth_url
- self.cli_os.endpoint_ip = self.endpoint_ip
- with mock.patch('functest.cli.commands.cli_os.os.system',
- return_value=0):
- self.assertEqual(self.cli_os.ping_endpoint(), 0)
-
- @mock.patch('functest.cli.commands.cli_os.exit', side_effect=Exception)
- @mock.patch('functest.cli.commands.cli_os.click.echo')
- def test_ping_endpoint_auth_url_ko(self, mock_click_echo, mock_exit):
- with self.assertRaises(Exception):
- self.cli_os.os_auth_url = None
- self.cli_os.ping_endpoint()
- mock_click_echo.assert_called_once_with(
- "Source the OpenStack credentials first")
- mock_exit.assert_called_once_with(0)
-
- @mock.patch('functest.cli.commands.cli_os.exit')
- @mock.patch('functest.cli.commands.cli_os.click.echo')
- def test_ping_endpoint_system_fails(self, mock_click_echo, mock_exit):
- self.cli_os.os_auth_url = self.os_auth_url
- self.cli_os.endpoint_ip = self.endpoint_ip
- with mock.patch('functest.cli.commands.cli_os.os.system',
- return_value=1):
- self.cli_os.ping_endpoint()
- mock_click_echo.assert_called_once_with(
- "Cannot talk to the endpoint %s\n" % self.endpoint_ip)
- mock_exit.assert_called_once_with(0)
-
- def test_check(self):
- with mock.patch.object(self.cli_os, 'ping_endpoint'), \
- mock.patch('functest.cli.commands.cli_os.check_deployment.'
- 'CheckDeployment') as mock_check_deployment:
- self.cli_os.check()
- self.assertTrue(mock_check_deployment.called)
-
- @mock.patch('functest.cli.commands.cli_os.click.echo')
- def test_show_credentials(self, mock_click_echo):
- key = 'OS_KEY'
- value = 'OS_VALUE'
- with mock.patch.dict(os.environ, {key: value}):
- self.cli_os.show_credentials()
- mock_click_echo.assert_any_call("{}={}".format(key, value))
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/cli/commands/test_cli_testcase.py b/functest/tests/unit/cli/commands/test_cli_testcase.py
deleted file mode 100644
index 67bf2d503..000000000
--- a/functest/tests/unit/cli/commands/test_cli_testcase.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-
-# 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
-
-import logging
-import unittest
-
-import mock
-
-from functest.cli.commands import cli_testcase
-
-
-class CliTestCasesTesting(unittest.TestCase):
-
- def setUp(self):
- self.testname = 'testname'
- with mock.patch('xtesting.ci.tier_builder'):
- self.cli_tests = cli_testcase.CliTestcase()
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_default(self, mock_ft_utils):
- cmd = "run_tests -n -r -t {}".format(self.testname)
- self.cli_tests.run(self.testname, noclean=True, report=True)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_noclean_missing_report(self, mock_ft_utils):
- cmd = "run_tests -n -t {}".format(self.testname)
- self.cli_tests.run(self.testname, noclean=True, report=False)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_report_missing_noclean(self, mock_ft_utils):
- cmd = "run_tests -r -t {}".format(self.testname)
- self.cli_tests.run(self.testname, noclean=False, report=True)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_missing_noclean_report(self, mock_ft_utils):
- cmd = "run_tests -t {}".format(self.testname)
- self.cli_tests.run(self.testname, noclean=False, report=False)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.cli.commands.cli_testcase.click.echo')
- def test_list(self, mock_click_echo):
- with mock.patch.object(self.cli_tests.tiers, 'get_tiers',
- return_value=[]):
- self.cli_tests.list()
- mock_click_echo.assert_called_with("")
-
- @mock.patch('functest.cli.commands.cli_testcase.click.echo')
- def test_show_default_desc_none(self, mock_click_echo):
- with mock.patch.object(self.cli_tests.tiers, 'get_test',
- return_value=None):
- self.cli_tests.show(self.testname)
- mock_click_echo.assert_any_call("The test case '%s' "
- "does not exist or is"
- " not supported."
- % self.testname)
-
- @mock.patch('functest.cli.commands.cli_testcase.click.echo')
- def test_show_default(self, mock_click_echo):
- mock_obj = mock.Mock()
- with mock.patch.object(self.cli_tests.tiers, 'get_test',
- return_value=mock_obj):
- self.cli_tests.show(self.testname)
- mock_click_echo.assert_called_with(mock_obj)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/cli/commands/test_cli_tier.py b/functest/tests/unit/cli/commands/test_cli_tier.py
deleted file mode 100644
index 23b614b81..000000000
--- a/functest/tests/unit/cli/commands/test_cli_tier.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-
-# 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
-
-import logging
-import unittest
-
-import mock
-
-from functest.cli.commands import cli_tier
-
-
-class CliTierTesting(unittest.TestCase):
-
- def setUp(self):
- self.tiername = 'tiername'
- self.testnames = 'testnames'
- with mock.patch('xtesting.ci.tier_builder'):
- self.cli_tier = cli_tier.CliTier()
-
- @mock.patch('functest.cli.commands.cli_tier.click.echo')
- def test_list(self, mock_click_echo):
- with mock.patch.object(self.cli_tier.tiers, 'get_tiers',
- return_value=[]):
- self.cli_tier.list()
- mock_click_echo.assert_called_with("")
-
- @mock.patch('functest.cli.commands.cli_tier.click.echo')
- def test_show_default(self, mock_click_echo):
- with mock.patch.object(self.cli_tier.tiers, 'get_tier',
- return_value=self.tiername):
- self.cli_tier.show(self.tiername)
- mock_click_echo.assert_called_with(self.tiername)
-
- @mock.patch('functest.cli.commands.cli_tier.click.echo')
- def test_show_missing_tier(self, mock_click_echo):
- with mock.patch.object(self.cli_tier.tiers, 'get_tier',
- return_value=None), \
- mock.patch.object(self.cli_tier.tiers, 'get_tier_names',
- return_value='tiernames'):
- self.cli_tier.show(self.tiername)
- mock_click_echo.assert_called_with("The tier with name '%s' does "
- "not exist. Available tiers are"
- ":\n %s\n" % (self.tiername,
- 'tiernames'))
-
- @mock.patch('functest.cli.commands.cli_tier.click.echo')
- def test_gettests_default(self, mock_click_echo):
- mock_obj = mock.Mock()
- attrs = {'get_test_names.return_value': self.testnames}
- mock_obj.configure_mock(**attrs)
-
- with mock.patch.object(self.cli_tier.tiers, 'get_tier',
- return_value=mock_obj):
- self.cli_tier.gettests(self.tiername)
- mock_click_echo.assert_called_with(
- "Test cases in tier '%s':\n %s\n" % (
- self.tiername, self.testnames))
-
- @mock.patch('functest.cli.commands.cli_tier.click.echo')
- def test_gettests_missing_tier(self, mock_click_echo):
- with mock.patch.object(self.cli_tier.tiers, 'get_tier',
- return_value=None), \
- mock.patch.object(self.cli_tier.tiers, 'get_tier_names',
- return_value='tiernames'):
- self.cli_tier.gettests(self.tiername)
- mock_click_echo.assert_called_with("The tier with name '%s' does "
- "not exist. Available tiers are"
- ":\n %s\n" % (self.tiername,
- 'tiernames'))
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_default(self, mock_ft_utils):
- cmd = "run_tests -n -r -t {}".format(self.tiername)
- self.cli_tier.run(self.tiername, noclean=True, report=True)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_report_missing_noclean(self, mock_ft_utils):
- cmd = "run_tests -r -t {}".format(self.tiername)
- self.cli_tier.run(self.tiername, noclean=False, report=True)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_noclean_missing_report(self, mock_ft_utils):
- cmd = "run_tests -n -t {}".format(self.tiername)
- self.cli_tier.run(self.tiername, noclean=True, report=False)
- mock_ft_utils.assert_called_with(cmd)
-
- @mock.patch('functest.utils.functest_utils.execute_command')
- def test_run_missing_noclean_report(self, mock_ft_utils):
- cmd = "run_tests -t {}".format(self.tiername)
- self.cli_tier.run(self.tiername, noclean=False, report=False)
- mock_ft_utils.assert_called_with(cmd)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/cli/test_cli_base.py b/functest/tests/unit/cli/test_cli_base.py
deleted file mode 100644
index 185a52204..000000000
--- a/functest/tests/unit/cli/test_cli_base.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Orange 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
-
-# pylint: disable=missing-docstring
-
-import logging
-import os
-import unittest
-
-import mock
-from click.testing import CliRunner
-
-with mock.patch('functest.cli.commands.cli_testcase.CliTestcase.__init__',
- mock.Mock(return_value=None)), \
- mock.patch('functest.cli.commands.cli_tier.CliTier.__init__',
- mock.Mock(return_value=None)):
- os.environ['OS_AUTH_URL'] = ''
- from functest.cli import cli_base
-
-
-class CliBaseTesting(unittest.TestCase):
-
- def setUp(self):
- self.runner = CliRunner()
- self._openstack = cli_base.OPENSTACK
- self._env = cli_base.ENV
- self._testcase = cli_base.TESTCASE
- self._tier = cli_base.TIER
-
- def test_os_check(self):
- with mock.patch.object(self._openstack, 'check') as mock_method:
- result = self.runner.invoke(cli_base.os_check)
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_os_show_credentials(self):
- with mock.patch.object(self._openstack, 'show_credentials') \
- as mock_method:
- result = self.runner.invoke(cli_base.os_show_credentials)
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_env_show(self):
- with mock.patch.object(self._env, 'show') as mock_method:
- result = self.runner.invoke(cli_base.env_show)
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_testcase_list(self):
- with mock.patch.object(self._testcase, 'list') as mock_method:
- result = self.runner.invoke(cli_base.testcase_list)
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_testcase_show(self):
- with mock.patch.object(self._testcase, 'show') as mock_method:
- result = self.runner.invoke(cli_base.testcase_show, ['testname'])
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_testcase_run(self):
- with mock.patch.object(self._testcase, 'run') as mock_method:
- result = self.runner.invoke(cli_base.testcase_run,
- ['testname', '--noclean'])
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_tier_list(self):
- with mock.patch.object(self._tier, 'list') as mock_method:
- result = self.runner.invoke(cli_base.tier_list)
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_tier_show(self):
- with mock.patch.object(self._tier, 'show') as mock_method:
- result = self.runner.invoke(cli_base.tier_show, ['tiername'])
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_tier_gettests(self):
- with mock.patch.object(self._tier, 'gettests') as mock_method:
- result = self.runner.invoke(cli_base.tier_gettests, ['tiername'])
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
- def test_tier_run(self):
- with mock.patch.object(self._tier, 'run') as mock_method:
- result = self.runner.invoke(cli_base.tier_run,
- ['tiername', '--noclean'])
- self.assertEqual(result.exit_code, 0)
- self.assertTrue(mock_method.called)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/core/test_vnf.py b/functest/tests/unit/core/test_vnf.py
deleted file mode 100644
index 81d9eef76..000000000
--- a/functest/tests/unit/core/test_vnf.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 Orange 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
-
-# pylint: disable=missing-docstring
-
-import logging
-import unittest
-
-import mock
-from snaps.openstack.os_credentials import OSCreds
-from xtesting.core import testcase
-
-from functest.core import vnf
-from functest.utils import constants
-
-
-class VnfBaseTesting(unittest.TestCase):
- """The class testing VNF."""
- # pylint: disable=missing-docstring,too-many-public-methods
-
- tenant_name = 'test_tenant_name'
- tenant_description = 'description'
-
- def setUp(self):
- self.test = vnf.VnfOnBoarding(project='functest', case_name='foo')
-
- def test_run_deploy_orch_exc(self):
- with mock.patch.object(self.test, 'prepare'), \
- mock.patch.object(self.test, 'deploy_orchestrator',
- side_effect=Exception) as mock_method, \
- mock.patch.object(self.test, 'deploy_vnf',
- return_value=True), \
- mock.patch.object(self.test, 'test_vnf',
- return_value=True):
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
- mock_method.assert_called_with()
-
- def test_run_deploy_vnf_exc(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=True), \
- mock.patch.object(self.test, 'deploy_vnf',
- side_effect=Exception) as mock_method:
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
- mock_method.assert_called_with()
-
- def test_run_test_vnf_exc(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=True), \
- mock.patch.object(self.test, 'deploy_vnf', return_value=True), \
- mock.patch.object(self.test, 'test_vnf',
- side_effect=Exception) as mock_method:
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
- mock_method.assert_called_with()
-
- def test_run_deploy_orch_ko(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=False), \
- mock.patch.object(self.test, 'deploy_vnf',
- return_value=True), \
- mock.patch.object(self.test, 'test_vnf',
- return_value=True):
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
-
- def test_run_vnf_deploy_ko(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=True), \
- mock.patch.object(self.test, 'deploy_vnf',
- return_value=False), \
- mock.patch.object(self.test, 'test_vnf',
- return_value=True):
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
-
- def test_run_vnf_test_ko(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=True), \
- mock.patch.object(self.test, 'deploy_vnf',
- return_value=True), \
- mock.patch.object(self.test, 'test_vnf',
- return_value=False):
- self.assertEqual(self.test.run(),
- testcase.TestCase.EX_TESTCASE_FAILED)
-
- def test_run_default(self):
- with mock.patch.object(self.test, 'prepare'),\
- mock.patch.object(self.test, 'deploy_orchestrator',
- return_value=True), \
- mock.patch.object(self.test, 'deploy_vnf',
- return_value=True), \
- mock.patch.object(self.test, 'test_vnf',
- return_value=True):
- self.assertEqual(self.test.run(), testcase.TestCase.EX_OK)
-
- @mock.patch('functest.core.vnf.OpenStackUser')
- @mock.patch('functest.core.vnf.OpenStackProject')
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
- side_effect=Exception)
- def test_prepare_exc1(self, *args):
- with self.assertRaises(Exception):
- self.test.prepare()
- args[0].assert_called_with(os_env_file=constants.ENV_FILE)
- args[1].assert_not_called()
- args[2].assert_not_called()
-
- @mock.patch('functest.core.vnf.OpenStackUser')
- @mock.patch('functest.core.vnf.OpenStackProject', side_effect=Exception)
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials')
- def test_prepare_exc2(self, *args):
- with self.assertRaises(Exception):
- self.test.prepare()
- args[0].assert_called_with(os_env_file=constants.ENV_FILE)
- args[1].assert_called_with(mock.ANY, mock.ANY)
- args[2].assert_not_called()
-
- @mock.patch('functest.core.vnf.OpenStackUser', side_effect=Exception)
- @mock.patch('snaps.openstack.utils.keystone_utils.get_role_by_name',
- return_value="admin")
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_client')
- @mock.patch('functest.core.vnf.OpenStackProject')
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials')
- def test_prepare_exc3(self, *args):
- with self.assertRaises(Exception):
- self.test.prepare()
- args[0].assert_called_with(os_env_file=constants.ENV_FILE)
- args[1].assert_called_with(mock.ANY, mock.ANY)
- args[2].assert_called_with(mock.ANY)
- args[3].assert_called_with(mock.ANY, mock.ANY)
- args[4].assert_called_with(mock.ANY, mock.ANY)
-
- @mock.patch('functest.core.vnf.OpenStackUser')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_role_by_name',
- return_value="admin")
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_client')
- @mock.patch('functest.core.vnf.OpenStackProject')
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials')
- def test_prepare_default(self, *args):
- self.assertEqual(self.test.prepare(), testcase.TestCase.EX_OK)
- args[0].assert_called_with(os_env_file=constants.ENV_FILE)
- args[1].assert_called_with(mock.ANY, mock.ANY)
- args[2].assert_called_with(mock.ANY)
- args[3].assert_called_with(mock.ANY, mock.ANY)
- args[4].assert_called_with(mock.ANY, mock.ANY)
-
- def test_deploy_vnf_unimplemented(self):
- with self.assertRaises(vnf.VnfDeploymentException):
- self.test.deploy_vnf()
-
- def test_test_vnf_unimplemented(self):
- with self.assertRaises(vnf.VnfTestException):
- self.test.test_vnf()
-
- def test_deploy_orch_unimplemented(self):
- self.assertTrue(self.test.deploy_orchestrator())
-
- @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
- return_value=OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar'),
- side_effect=Exception)
- def test_prepare_keystone_client_ko(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.test.prepare()
- args[0].assert_called_once()
-
- def test_vnf_clean_exc(self):
- obj = mock.Mock()
- obj.clean.side_effect = Exception
- self.test.created_object = [obj]
- self.test.clean()
- obj.clean.assert_called_with()
-
- def test_vnf_clean(self):
- obj = mock.Mock()
- self.test.created_object = [obj]
- self.test.clean()
- obj.clean.assert_called_with()
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/odl/test_odl.py b/functest/tests/unit/odl/test_odl.py
index 6304d37a3..c675c2988 100644
--- a/functest/tests/unit/odl/test_odl.py
+++ b/functest/tests/unit/odl/test_odl.py
@@ -14,6 +14,7 @@ import os
import unittest
import mock
+import munch
from robot.errors import RobotError
import six
from six.moves import urllib
@@ -32,9 +33,10 @@ class ODLTesting(unittest.TestCase):
logging.disable(logging.CRITICAL)
_keystone_ip = "127.0.0.1"
- _neutron_url = u"https://127.0.0.1:9696"
+ _neutron_url = "https://127.0.0.1:9696"
+ _neutron_id = "dummy"
_sdn_controller_ip = "127.0.0.3"
- _os_auth_url = "http://{}:5000/v3".format(_keystone_ip)
+ _os_auth_url = f"http://{_keystone_ip}:5000/v3"
_os_projectname = "admin"
_os_username = "admin"
_os_password = "admin"
@@ -44,9 +46,10 @@ class ODLTesting(unittest.TestCase):
_odl_password = "admin"
_os_userdomainname = 'Default'
_os_projectdomainname = 'Default'
+ _os_interface = "public"
def setUp(self):
- for var in ("INSTALLER_TYPE", "SDN_CONTROLLER", "SDN_CONTROLLER_IP"):
+ for var in ("SDN_CONTROLLER", "SDN_CONTROLLER_IP"):
if var in os.environ:
del os.environ[var]
os.environ["OS_AUTH_URL"] = self._os_auth_url
@@ -56,11 +59,11 @@ class ODLTesting(unittest.TestCase):
os.environ["OS_PROJECT_NAME"] = self._os_projectname
os.environ["OS_PROJECT_DOMAIN_NAME"] = self._os_projectdomainname
os.environ["OS_PASSWORD"] = self._os_password
+ os.environ["OS_INTERFACE"] = self._os_interface
self.test = odl.ODLTests(case_name='odl', project_name='functest')
self.defaultargs = {'odlusername': self._odl_username,
'odlpassword': self._odl_password,
- 'neutronurl': "http://{}:9696".format(
- self._keystone_ip),
+ 'neutronurl': f"http://{self._keystone_ip}:9696",
'osauthurl': self._os_auth_url,
'osusername': self._os_username,
'osuserdomainname': self._os_userdomainname,
@@ -101,7 +104,7 @@ class ODLRobotTesting(ODLTesting):
mock_method.assert_called_once_with(
os.path.join(odl.ODLTests.odl_test_repo,
'csit/variables/Variables.robot'), inplace=True)
- self.assertEqual(args[0].getvalue(), "{}\n".format(msg2))
+ self.assertEqual(args[0].getvalue(), f"{msg2}\n")
def test_set_vars_auth_default(self):
self._test_set_vars(
@@ -156,19 +159,19 @@ class ODLMainTesting(ODLTesting):
args[0].assert_called_once_with(self.test.odl_variables_file)
if len(args) > 1:
variable = [
- 'KEYSTONEURL:{}://{}'.format(
- urllib.parse.urlparse(self._os_auth_url).scheme,
- urllib.parse.urlparse(self._os_auth_url).netloc),
- 'NEUTRONURL:{}'.format(self._neutron_url),
- 'OS_AUTH_URL:"{}"'.format(self._os_auth_url),
- 'OSUSERNAME:"{}"'.format(self._os_username),
- 'OSUSERDOMAINNAME:"{}"'.format(self._os_userdomainname),
- 'OSTENANTNAME:"{}"'.format(self._os_projectname),
- 'OSPROJECTDOMAINNAME:"{}"'.format(self._os_projectdomainname),
- 'OSPASSWORD:"{}"'.format(self._os_password),
- 'ODL_SYSTEM_IP:{}'.format(self._sdn_controller_ip),
- 'PORT:{}'.format(self._odl_webport),
- 'RESTCONFPORT:{}'.format(self._odl_restconfport)]
+ ('KEYSTONEURL:'
+ f'{urllib.parse.urlparse(self._os_auth_url).scheme}://'
+ f'{urllib.parse.urlparse(self._os_auth_url).netloc}'),
+ f'NEUTRONURL:{self._neutron_url}',
+ f'OS_AUTH_URL:"{self._os_auth_url}"',
+ f'OSUSERNAME:"{self._os_username}"',
+ f'OSUSERDOMAINNAME:"{self._os_userdomainname}"',
+ f'OSTENANTNAME:"{self._os_projectname}"',
+ f'OSPROJECTDOMAINNAME:"{self._os_projectdomainname}"',
+ f'OSPASSWORD:"{self._os_password}"',
+ f'ODL_SYSTEM_IP:{self._sdn_controller_ip}',
+ f'PORT:{self._odl_webport}',
+ f'RESTCONFPORT:{self._odl_restconfport}']
args[1].assert_called_once_with(
odl.ODLTests.basic_suite_dir, odl.ODLTests.neutron_suite_dir,
include=[],
@@ -221,6 +224,7 @@ class ODLMainTesting(ODLTesting):
self._odl_username, self._odl_password)
args[0].assert_called_once_with(self.test.odl_variables_file)
+ @mock.patch('os.makedirs')
@mock.patch('robot.run', side_effect=RobotError)
@mock.patch('os.path.isfile', return_value=True)
def test_run_ko(self, *args):
@@ -229,6 +233,7 @@ class ODLMainTesting(ODLTesting):
self.assertRaises(RobotError):
self._test_run_suites(testcase.TestCase.EX_RUN_ERROR, *args)
+ @mock.patch('os.makedirs')
@mock.patch('robot.run')
@mock.patch('os.path.isfile', return_value=True)
def test_parse_results_ko(self, *args):
@@ -238,62 +243,157 @@ class ODLMainTesting(ODLTesting):
side_effect=RobotError):
self._test_run_suites(testcase.TestCase.EX_RUN_ERROR, *args)
+ @mock.patch('os.makedirs')
+ @mock.patch('robot.run')
+ @mock.patch('os.path.isfile', return_value=True)
+ def test_generate_report_ko(self, *args):
+ with mock.patch.object(self.test, 'set_robotframework_vars',
+ return_value=True), \
+ mock.patch.object(self.test, 'parse_results'), \
+ mock.patch.object(self.test, 'generate_report',
+ return_value=1):
+ self._test_run_suites(testcase.TestCase.EX_OK, *args)
+
+ @mock.patch('os.makedirs')
+ @mock.patch('robot.run')
+ @mock.patch('os.path.isfile', return_value=True)
+ def test_generate_report_exc(self, *args):
+ with mock.patch.object(self.test, 'set_robotframework_vars',
+ return_value=True), \
+ mock.patch.object(self.test, 'parse_results'), \
+ mock.patch.object(self.test, 'generate_report',
+ side_effect=Exception):
+ self._test_run_suites(testcase.TestCase.EX_RUN_ERROR, *args)
+
+ @mock.patch('os.makedirs')
@mock.patch('robot.run')
@mock.patch('os.path.isfile', return_value=True)
def test_ok(self, *args):
with mock.patch.object(self.test, 'set_robotframework_vars',
return_value=True), \
- mock.patch.object(self.test, 'parse_results'):
+ mock.patch.object(self.test, 'parse_results'), \
+ mock.patch.object(self.test, 'generate_report',
+ return_value=0):
self._test_run_suites(testcase.TestCase.EX_OK, *args)
+ @mock.patch('os.makedirs')
@mock.patch('robot.run')
@mock.patch('os.path.isfile', return_value=False)
def test_ok_no_creds(self, *args):
with mock.patch.object(self.test, 'set_robotframework_vars',
return_value=True) as mock_method, \
- mock.patch.object(self.test, 'parse_results'):
+ mock.patch.object(self.test, 'parse_results'), \
+ mock.patch.object(self.test, 'generate_report',
+ return_value=0):
self._test_run_suites(testcase.TestCase.EX_OK, *args)
mock_method.assert_not_called()
+ @mock.patch('os.makedirs')
@mock.patch('robot.run', return_value=1)
@mock.patch('os.path.isfile', return_value=True)
def test_testcases_in_failure(self, *args):
with mock.patch.object(self.test, 'set_robotframework_vars',
return_value=True), \
- mock.patch.object(self.test, 'parse_results'):
+ mock.patch.object(self.test, 'parse_results'), \
+ mock.patch.object(self.test, 'generate_report',
+ return_value=0):
self._test_run_suites(testcase.TestCase.EX_OK, *args)
class ODLRunTesting(ODLTesting):
-
"""The class testing ODLTests.run()."""
- # pylint: disable=missing-docstring
+ # pylint: disable=too-many-public-methods,missing-docstring
- @mock.patch('snaps.openstack.utils.keystone_utils.get_endpoint',
- return_value=ODLTesting._neutron_url)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials')
+ @mock.patch('os_client_config.make_shade', side_effect=Exception)
+ def test_no_cloud(self, *args):
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].assert_called_once_with()
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_service1(self, *args):
+ args[0].return_value.search_services.return_value = None
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_not_called()
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_service2(self, *args):
+ args[0].return_value.search_services.return_value = []
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_not_called()
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_service3(self, *args):
+ args[0].return_value.search_services.return_value = [
+ munch.Munch()]
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_not_called()
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_endpoint1(self, *args):
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
+ args[0].return_value.search_endpoints.return_value = None
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={'interface': self._os_interface,
+ 'service_id': self._neutron_id})
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_endpoint2(self, *args):
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
+ args[0].return_value.search_endpoints.return_value = []
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={'interface': self._os_interface,
+ 'service_id': self._neutron_id})
+
+ @mock.patch('os_client_config.make_shade')
+ def test_no_endpoint3(self, *args):
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
+ args[0].return_value.search_endpoints.return_value = [munch.Munch()]
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={'interface': self._os_interface,
+ 'service_id': self._neutron_id})
+
+ @mock.patch('os_client_config.make_shade')
+ def test_endpoint_interface(self, *args):
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
+ args[0].return_value.search_endpoints.return_value = [munch.Munch()]
+ self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={'interface': self._os_interface,
+ 'service_id': self._neutron_id})
+
+ @mock.patch('os_client_config.make_shade')
def _test_no_env_var(self, var, *args):
del os.environ[var]
self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
args[0].assert_called_once_with()
- args[1].assert_called_once_with(mock.ANY, 'network')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_endpoint',
- return_value=ODLTesting._neutron_url)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials')
+ @mock.patch('os_client_config.make_shade')
def _test_missing_value(self, *args):
self.assertEqual(self.test.run(), testcase.TestCase.EX_RUN_ERROR)
args[0].assert_called_once_with()
- args[1].assert_called_once_with(mock.ANY, 'network')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_endpoint',
- return_value=ODLTesting._neutron_url)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials')
+ @mock.patch('os_client_config.make_shade')
def _test_run(self, status=testcase.TestCase.EX_OK,
exception=None, *args, **kwargs):
+ # pylint: disable=keyword-arg-before-vararg
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
+ args[0].return_value.search_endpoints.return_value = [
+ munch.Munch(url=self._neutron_url)]
odlip = kwargs['odlip'] if 'odlip' in kwargs else '127.0.0.3'
odlwebport = kwargs['odlwebport'] if 'odlwebport' in kwargs else '8080'
odlrestconfport = (kwargs['odlrestconfport']
@@ -313,14 +413,21 @@ class ODLRunTesting(ODLTesting):
osprojectdomainname=self._os_projectdomainname,
osuserdomainname=self._os_userdomainname)
args[0].assert_called_once_with()
- args[1].assert_called_once_with(mock.ANY, 'network')
-
- @mock.patch('snaps.openstack.utils.keystone_utils.get_endpoint',
- return_value=ODLTesting._neutron_url)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials')
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={
+ 'interface': os.environ.get(
+ "OS_INTERFACE", "public").replace('URL', ''),
+ 'service_id': self._neutron_id})
+
+ @mock.patch('os_client_config.make_shade')
def _test_multiple_suites(self, suites,
status=testcase.TestCase.EX_OK, *args, **kwargs):
+ # pylint: disable=keyword-arg-before-vararg
+ args[0].return_value.search_endpoints.return_value = [
+ munch.Munch(url=self._neutron_url)]
+ args[0].return_value.search_services.return_value = [
+ munch.Munch(id=self._neutron_id)]
odlip = kwargs['odlip'] if 'odlip' in kwargs else '127.0.0.3'
odlwebport = kwargs['odlwebport'] if 'odlwebport' in kwargs else '8080'
odlrestconfport = (kwargs['odlrestconfport']
@@ -336,10 +443,13 @@ class ODLRunTesting(ODLTesting):
osprojectdomainname=self._os_projectdomainname,
osuserdomainname=self._os_userdomainname)
args[0].assert_called_once_with()
- args[1].assert_called_once_with(mock.ANY, 'network')
+ args[0].return_value.search_services.assert_called_once_with('neutron')
+ args[0].return_value.search_endpoints.assert_called_once_with(
+ filters={'interface': os.environ.get("OS_INTERFACE", "public"),
+ 'service_id': self._neutron_id})
def test_exc(self):
- with mock.patch('snaps.openstack.utils.keystone_utils.get_endpoint',
+ with mock.patch('os_client_config.make_shade',
side_effect=Exception()):
self.assertEqual(self.test.run(),
testcase.TestCase.EX_RUN_ERROR)
@@ -379,65 +489,48 @@ class ODLRunTesting(ODLTesting):
odlip=self._sdn_controller_ip,
odlwebport=self._odl_webport)
- def test_suites(self):
+ def test_without_os_interface(self):
+ del os.environ["OS_INTERFACE"]
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- self._test_multiple_suites(
- [odl.ODLTests.basic_suite_dir],
- testcase.TestCase.EX_OK,
- odlip=self._sdn_controller_ip,
- odlwebport=self._odl_webport)
-
- def test_fuel_no_controller_ip(self):
- os.environ["INSTALLER_TYPE"] = "fuel"
- self._test_missing_value()
+ self._test_run(testcase.TestCase.EX_OK, None,
+ odlip=self._sdn_controller_ip,
+ odlwebport=self._odl_webport)
- def test_fuel(self):
+ def test_os_interface_public(self):
+ os.environ["OS_INTERFACE"] = "public"
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- os.environ["INSTALLER_TYPE"] = "fuel"
self._test_run(testcase.TestCase.EX_OK, None,
odlip=self._sdn_controller_ip,
- odlwebport='8282',
- odlrestconfport='8282')
-
- def test_apex_no_controller_ip(self):
- os.environ["INSTALLER_TYPE"] = "apex"
- self._test_missing_value()
+ odlwebport=self._odl_webport)
- def test_apex(self):
+ def test_os_interface_publicurl(self):
+ os.environ["OS_INTERFACE"] = "publicURL"
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- os.environ["INSTALLER_TYPE"] = "apex"
self._test_run(testcase.TestCase.EX_OK, None,
- odlip=self._sdn_controller_ip, odlwebport='8081',
- odlrestconfport='8081')
-
- def test_netvirt_no_controller_ip(self):
- os.environ["INSTALLER_TYPE"] = "netvirt"
- self._test_missing_value()
+ odlip=self._sdn_controller_ip,
+ odlwebport=self._odl_webport)
- def test_netvirt(self):
+ def test_os_interface_internal(self):
+ os.environ["OS_INTERFACE"] = "internal"
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- os.environ["INSTALLER_TYPE"] = "netvirt"
self._test_run(testcase.TestCase.EX_OK, None,
- odlip=self._sdn_controller_ip, odlwebport='8081',
- odlrestconfport='8081')
+ odlip=self._sdn_controller_ip,
+ odlwebport=self._odl_webport)
- def test_compass(self):
+ def test_os_interface_admin(self):
+ os.environ["OS_INTERFACE"] = "admin"
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- os.environ["INSTALLER_TYPE"] = "compass"
self._test_run(testcase.TestCase.EX_OK, None,
odlip=self._sdn_controller_ip,
- odlrestconfport='8080')
-
- def test_daisy_no_controller_ip(self):
- os.environ["INSTALLER_TYPE"] = "daisy"
- self._test_missing_value()
+ odlwebport=self._odl_webport)
- def test_daisy(self):
+ def test_suites(self):
os.environ["SDN_CONTROLLER_IP"] = self._sdn_controller_ip
- os.environ["INSTALLER_TYPE"] = "daisy"
- self._test_run(testcase.TestCase.EX_OK, None,
- odlip=self._sdn_controller_ip, odlwebport='8181',
- odlrestconfport='8087')
+ self._test_multiple_suites(
+ [odl.ODLTests.basic_suite_dir],
+ testcase.TestCase.EX_OK,
+ odlip=self._sdn_controller_ip,
+ odlwebport=self._odl_webport)
class ODLArgParserTesting(ODLTesting):
@@ -447,7 +540,7 @@ class ODLArgParserTesting(ODLTesting):
def setUp(self):
self.parser = odl.ODLParser()
- super(ODLArgParserTesting, self).setUp()
+ super().setUp()
def test_default(self):
self.assertEqual(self.parser.parse_args(), self.defaultargs)
@@ -457,8 +550,8 @@ class ODLArgParserTesting(ODLTesting):
self.defaultargs['odlip'] = self._sdn_controller_ip
self.assertEqual(
self.parser.parse_args(
- ["--neutronurl={}".format(self._neutron_url),
- "--odlip={}".format(self._sdn_controller_ip)]),
+ [f"--neutronurl={self._neutron_url}",
+ f"--odlip={self._sdn_controller_ip}"]),
self.defaultargs)
@mock.patch('sys.stderr', new_callable=six.StringIO)
@@ -471,7 +564,7 @@ class ODLArgParserTesting(ODLTesting):
def _test_arg(self, arg, value):
self.defaultargs[arg] = value
self.assertEqual(
- self.parser.parse_args(["--{}={}".format(arg, value)]),
+ self.parser.parse_args([f"--{arg}={value}"]),
self.defaultargs)
def test_odlusername(self):
@@ -512,7 +605,7 @@ class ODLArgParserTesting(ODLTesting):
def test_pushtodb(self):
self.defaultargs['pushtodb'] = True
- self.assertEqual(self.parser.parse_args(["--{}".format('pushtodb')]),
+ self.assertEqual(self.parser.parse_args(["--pushtodb"]),
self.defaultargs)
def test_multiple_args(self):
@@ -520,8 +613,8 @@ class ODLArgParserTesting(ODLTesting):
self.defaultargs['odlip'] = self._sdn_controller_ip
self.assertEqual(
self.parser.parse_args(
- ["--neutronurl={}".format(self._neutron_url),
- "--odlip={}".format(self._sdn_controller_ip)]),
+ [f"--neutronurl={self._neutron_url}",
+ f"--odlip={self._sdn_controller_ip}"]),
self.defaultargs)
diff --git a/functest/tests/unit/ci/__init__.py b/functest/tests/unit/openstack/cinder/__init__.py
index e69de29bb..e69de29bb 100644
--- a/functest/tests/unit/ci/__init__.py
+++ b/functest/tests/unit/openstack/cinder/__init__.py
diff --git a/functest/tests/unit/openstack/cinder/test_cinder.py b/functest/tests/unit/openstack/cinder/test_cinder.py
new file mode 100644
index 000000000..d3c9cabb6
--- /dev/null
+++ b/functest/tests/unit/openstack/cinder/test_cinder.py
@@ -0,0 +1,270 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018 Enea AB 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
+
+# pylint: disable=missing-docstring
+
+
+import logging
+import unittest
+
+import pkg_resources
+import mock
+import munch
+import shade
+
+from functest.opnfv_tests.openstack.cinder import cinder_test
+from functest.utils import config
+from functest.utils import env
+
+
+class CinderTesting(unittest.TestCase):
+
+ def setUp(self):
+ with mock.patch('functest.core.singlevm.SingleVm2.__init__'):
+ self.cinder = cinder_test.CinderCheck()
+ self.cinder.cloud = mock.Mock()
+ self.cinder.case_name = 'cinder'
+ self.cinder.guid = '1'
+
+ @mock.patch('functest.opnfv_tests.openstack.cinder.cinder_test.'
+ 'CinderCheck.connect')
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare',
+ side_effect=Exception)
+ def test_prepare_exc1(self, *args):
+ self.cinder.cloud.boot_vm = mock.Mock()
+ with self.assertRaises(Exception):
+ self.cinder.prepare()
+ args[0].assert_called_once_with()
+ args[1].assert_not_called()
+ self.cinder.cloud.boot_vm.assert_not_called()
+ self.cinder.cloud.create_volume.assert_not_called()
+
+ @mock.patch('functest.opnfv_tests.openstack.cinder.cinder_test.'
+ 'CinderCheck.connect')
+ @mock.patch('functest.opnfv_tests.openstack.cinder.cinder_test.'
+ 'CinderCheck.boot_vm',
+ side_effect=Exception)
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare')
+ def test_prepare_exc2(self, *args):
+ self.cinder.sec = munch.Munch(id='foo')
+ self.cinder.keypair = munch.Munch(id='foo')
+ self.cinder.volume_timeout = munch.Munch(id='foo')
+ with self.assertRaises(Exception):
+ self.cinder.prepare()
+ args[0].assert_called_with()
+ args[1].assert_called_once_with(
+ f'{self.cinder.case_name}-vm2_{self.cinder.guid}',
+ security_groups=[self.cinder.sec.id],
+ key_name=self.cinder.keypair.id)
+ self.cinder.cloud.create_volume.assert_not_called()
+ args[2].assert_not_called()
+
+ @mock.patch('functest.opnfv_tests.openstack.cinder.cinder_test.'
+ 'CinderCheck.boot_vm', return_value=munch.Munch(id='vm2'))
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare')
+ def test_prepare(self, *args):
+ self.cinder.sec = munch.Munch(id='foo')
+ self.cinder.keypair = munch.Munch(id='foo')
+ self.cinder.ext_net = mock.Mock(id='foo')
+ self.cinder.ssh2 = mock.Mock()
+ self.cinder.fip2 = munch.Munch(id='fip2')
+ self.cinder.connect = mock.Mock(
+ return_value=(self.cinder.fip2, self.cinder.ssh2))
+ self.cinder.cloud.create_volume = mock.Mock(
+ return_value=munch.Munch())
+ self.cinder.prepare()
+ args[0].assert_called_once_with()
+ args[1].assert_called_once_with(
+ f'{self.cinder.case_name}-vm2_{self.cinder.guid}',
+ security_groups=[self.cinder.sec.id],
+ key_name=self.cinder.keypair.id)
+ self.cinder.connect.assert_called_once_with(args[1].return_value)
+ self.cinder.cloud.create_volume.assert_called_once_with(
+ name=f'{self.cinder.case_name}-volume_{self.cinder.guid}',
+ size='2', timeout=self.cinder.volume_timeout, wait=True)
+
+ @mock.patch('scp.SCPClient.put')
+ def test_write(self, *args):
+ # pylint: disable=protected-access
+ self.cinder.ssh = mock.Mock()
+ self.cinder.sshvm = mock.Mock(id='foo')
+ self.cinder.volume = mock.Mock(id='volume')
+ stdout = mock.Mock()
+ stdout.channel.recv_exit_status.return_value = 0
+ self.cinder.ssh.exec_command.return_value = (None, stdout, mock.Mock())
+ self.assertEqual(self.cinder._write_data(), 0)
+ self.cinder.ssh.exec_command.assert_called_once_with(
+ f"sh ~/write_data.sh {env.get('VOLUME_DEVICE_NAME')}")
+ self.cinder.cloud.attach_volume.assert_called_once_with(
+ self.cinder.sshvm, self.cinder.volume,
+ timeout=self.cinder.volume_timeout)
+ self.cinder.cloud.detach_volume.assert_called_once_with(
+ self.cinder.sshvm, self.cinder.volume,
+ timeout=self.cinder.volume_timeout)
+ args[0].assert_called_once_with(
+ pkg_resources.resource_filename(
+ 'functest.opnfv_tests.openstack.cinder', 'write_data.sh'),
+ remote_path="~/")
+
+ @mock.patch('scp.SCPClient.put', side_effect=Exception)
+ def test_write_exc1(self, *args):
+ # pylint: disable=protected-access
+ self.cinder.ssh = mock.Mock()
+ self.cinder.sshvm = mock.Mock(id='foo')
+ self.cinder.cloud.attach_volume = mock.Mock()
+ self.assertEqual(
+ self.cinder._write_data(), self.cinder.EX_RUN_ERROR)
+ args[0].assert_called_once_with(
+ pkg_resources.resource_filename(
+ 'functest.opnfv_tests.openstack.cinder', 'write_data.sh'),
+ remote_path="~/")
+
+ @mock.patch('scp.SCPClient.put')
+ def test_read(self, *args):
+ # pylint: disable=protected-access
+ self.cinder.ssh2 = mock.Mock()
+ self.cinder.vm2 = mock.Mock(id='foo')
+ self.cinder.volume = mock.Mock(id='volume')
+ stdout = mock.Mock()
+ self.cinder.ssh2.exec_command.return_value = (
+ None, stdout, mock.Mock())
+ stdout.channel.recv_exit_status.return_value = 0
+ self.assertEqual(self.cinder._read_data(), 0)
+ self.cinder.ssh2.exec_command.assert_called_once_with(
+ f"sh ~/read_data.sh {env.get('VOLUME_DEVICE_NAME')}")
+ self.cinder.cloud.attach_volume.assert_called_once_with(
+ self.cinder.vm2, self.cinder.volume,
+ timeout=self.cinder.volume_timeout)
+ self.cinder.cloud.detach_volume.assert_called_once_with(
+ self.cinder.vm2, self.cinder.volume,
+ timeout=self.cinder.volume_timeout)
+ args[0].assert_called_once_with(
+ pkg_resources.resource_filename(
+ 'functest.opnfv_tests.openstack.cinder', 'read_data.sh'),
+ remote_path="~/")
+
+ @mock.patch('scp.SCPClient.put', side_effect=Exception)
+ def test_read_exc1(self, *args):
+ # pylint: disable=protected-access
+ self.cinder.ssh = mock.Mock()
+ self.cinder.ssh2 = mock.Mock()
+ self.cinder.sshvm = mock.Mock(id='foo')
+ self.cinder.cloud.attach_volume = mock.Mock()
+ self.assertEqual(
+ self.cinder._read_data(), self.cinder.EX_RUN_ERROR)
+ args[0].assert_called_once_with(
+ pkg_resources.resource_filename(
+ 'functest.opnfv_tests.openstack.cinder', 'read_data.sh'),
+ remote_path="~/")
+
+ def test_execute_exc1(self):
+ # pylint: disable=protected-access
+ self.cinder._write_data = mock.Mock(side_effect=Exception)
+ self.cinder._read_data = mock.Mock()
+ with self.assertRaises(Exception):
+ self.cinder.execute()
+ self.cinder._write_data.assert_called_once_with()
+ self.cinder._read_data.assert_not_called()
+
+ def test_execute_exc2(self):
+ # pylint: disable=protected-access
+ self.cinder._write_data = mock.Mock(return_value=0)
+ self.cinder._read_data = mock.Mock(side_effect=Exception)
+ with self.assertRaises(Exception):
+ self.cinder.execute()
+ self.cinder._write_data.assert_called_once_with()
+ self.cinder._read_data.assert_called_once_with()
+
+ def test_execute_res1(self):
+ # pylint: disable=protected-access
+ self.cinder._write_data = mock.Mock(return_value=1)
+ self.cinder._read_data = mock.Mock()
+ self.assertEqual(self.cinder.execute(), 1)
+ self.cinder._write_data.assert_called_once_with()
+ self.cinder._read_data.assert_not_called()
+
+ def test_execute_res2(self):
+ # pylint: disable=protected-access
+ self.cinder._write_data = mock.Mock(return_value=0)
+ self.cinder._read_data = mock.Mock(return_value=1)
+ self.assertEqual(self.cinder.execute(), 1)
+ self.cinder._write_data.assert_called_once_with()
+ self.cinder._read_data.assert_called_once_with()
+
+ def test_execute_res3(self):
+ # pylint: disable=protected-access
+ self.cinder._write_data = mock.Mock(return_value=0)
+ self.cinder._read_data = mock.Mock(return_value=0)
+ self.assertEqual(self.cinder.execute(), 0)
+ self.cinder._write_data.assert_called_once_with()
+ self.cinder._read_data.assert_called_once_with()
+
+ def test_clean_exc1(self):
+ self.cinder.cloud = None
+ with self.assertRaises(AssertionError):
+ self.cinder.clean()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean')
+ def test_clean_exc2(self, *args):
+ self.cinder.vm2 = munch.Munch(id='vm2')
+ self.cinder.cloud.delete_server = mock.Mock(
+ side_effect=shade.OpenStackCloudException("Foo"))
+ with self.assertRaises(shade.OpenStackCloudException):
+ self.cinder.clean()
+ self.cinder.cloud.delete_server.assert_called_once_with(
+ self.cinder.vm2, wait=True,
+ timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+ self.cinder.cloud.delete_floating_ip.assert_not_called()
+ self.cinder.cloud.delete_volume.assert_not_called()
+ args[0].assert_not_called()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean',
+ side_effect=Exception)
+ def test_clean_exc3(self, mock_clean):
+ self.cinder.vm2 = munch.Munch(id='vm2')
+ self.cinder.volume = munch.Munch(id='volume')
+ self.cinder.fip2 = munch.Munch(id='fip2')
+ with self.assertRaises(Exception):
+ self.cinder.clean()
+ self.cinder.cloud.delete_server.assert_called_once_with(
+ self.cinder.vm2, wait=True,
+ timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+ self.cinder.cloud.delete_floating_ip.assert_called_once_with(
+ self.cinder.fip2.id)
+ self.cinder.cloud.delete_volume.assert_called_once_with(
+ self.cinder.volume.id)
+ mock_clean.prepare()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean')
+ def test_clean(self, *args):
+ self.cinder.vm2 = munch.Munch(id='vm2')
+ self.cinder.volume = munch.Munch(id='volume')
+ self.cinder.fip2 = munch.Munch(id='fip2')
+ self.cinder.clean()
+ self.cinder.cloud.delete_server.assert_called_once_with(
+ self.cinder.vm2, wait=True,
+ timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+ self.cinder.cloud.delete_floating_ip.assert_called_once_with(
+ self.cinder.fip2.id)
+ self.cinder.cloud.delete_volume.assert_called_once_with(
+ self.cinder.volume.id)
+ args[0].assert_called_once_with()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean')
+ def test_clean2(self, *args):
+ self.cinder.clean()
+ self.cinder.cloud.delete_server.assert_not_called()
+ self.cinder.cloud.delete_floating_ip.assert_not_called()
+ self.cinder.cloud.delete_volume.assert_not_called()
+ args[0].assert_called_once_with()
+
+
+if __name__ == '__main__':
+ logging.disable(logging.CRITICAL)
+ unittest.main(verbosity=2)
diff --git a/functest/tests/unit/openstack/rally/test_rally.py b/functest/tests/unit/openstack/rally/test_rally.py
index 989ade090..f3c2e7cf6 100644
--- a/functest/tests/unit/openstack/rally/test_rally.py
+++ b/functest/tests/unit/openstack/rally/test_rally.py
@@ -10,42 +10,47 @@
import json
import logging
import os
+import subprocess
import unittest
import mock
-from snaps.openstack.os_credentials import OSCreds
+import munch
from xtesting.core import testcase
from functest.opnfv_tests.openstack.rally import rally
+from functest.utils import config
class OSRallyTesting(unittest.TestCase):
# pylint: disable=too-many-public-methods
def setUp(self):
- os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
- with mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials',
- return_value=os_creds) as mock_get_creds:
+ with mock.patch('os_client_config.get_config') as mock_get_config, \
+ mock.patch('shade.OpenStackCloud') as mock_shade, \
+ mock.patch('functest.core.tenantnetwork.NewProject') \
+ as mock_new_project:
self.rally_base = rally.RallyBase()
- self.assertTrue(mock_get_creds.called)
+ self.rally_base.image = munch.Munch(name='foo')
+ self.rally_base.flavor = munch.Munch(name='foo')
+ self.rally_base.flavor_alt = munch.Munch(name='bar')
+ self.assertTrue(mock_get_config.called)
+ self.assertTrue(mock_shade.called)
+ self.assertTrue(mock_new_project.called)
def test_build_task_args_missing_floating_network(self):
os.environ['OS_AUTH_URL'] = ''
- self.rally_base.ext_net_name = ''
- task_args = self.rally_base._build_task_args('test_file_name')
+ self.rally_base.ext_net = None
+ task_args = self.rally_base.build_task_args('test_name')
self.assertEqual(task_args['floating_network'], '')
def test_build_task_args_missing_net_id(self):
os.environ['OS_AUTH_URL'] = ''
- self.rally_base.priv_net_id = ''
- task_args = self.rally_base._build_task_args('test_file_name')
+ self.rally_base.network = None
+ task_args = self.rally_base.build_task_args('test_name')
self.assertEqual(task_args['netid'], '')
@staticmethod
def check_scenario_file(value):
- yaml_file = 'opnfv-{}.yaml'.format('test_file_name')
+ yaml_file = 'opnfv-test_file_name.yaml'
if yaml_file in value:
return False
return True
@@ -59,64 +64,79 @@ class OSRallyTesting(unittest.TestCase):
@staticmethod
def check_temp_dir(value):
- yaml_file = 'opnfv-{}.yaml'.format('test_file_name')
+ yaml_file = 'opnfv-test_file_name.yaml'
if yaml_file in value:
return True
return False
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.'
+ 'RallyBase.get_verifier_deployment_id', return_value='foo')
+ @mock.patch('subprocess.check_output')
+ def test_create_rally_deployment(self, mock_exec, mock_get_id):
+ # pylint: disable=unused-argument
+ self.assertEqual(rally.RallyBase.create_rally_deployment(), 'foo')
+ calls = [
+ mock.call(['rally', 'deployment', 'destroy', '--deployment',
+ str(getattr(config.CONF, 'rally_deployment_name'))]),
+ mock.call().decode("utf-8"),
+ mock.call(['rally', 'deployment', 'create', '--fromenv', '--name',
+ str(getattr(config.CONF, 'rally_deployment_name'))],
+ env=None),
+ mock.call().decode("utf-8"),
+ mock.call(['rally', 'deployment', 'check']),
+ mock.call().decode("utf-8")]
+ mock_exec.assert_has_calls(calls)
+
@mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_apply_blacklist')
+ 'apply_blacklist')
def test_prepare_test_list_missing_temp_dir(
self, mock_method, mock_os_makedirs, mock_path_exists):
mock_path_exists.side_effect = self.check_temp_dir
- yaml_file = 'opnfv-{}.yaml'.format('test_file_name')
- ret_val = os.path.join(self.rally_base.TEMP_DIR, yaml_file)
+ yaml_file = 'opnfv-test_file_name.yaml'
+ ret_val = os.path.join(self.rally_base.temp_dir, yaml_file)
self.assertEqual(self.rally_base._prepare_test_list('test_file_name'),
ret_val)
mock_path_exists.assert_called()
mock_method.assert_called()
mock_os_makedirs.assert_called()
- def test_get_task_id_default(self):
- cmd_raw = 'Task 1: started'
- self.assertEqual(self.rally_base.get_task_id(cmd_raw),
- '1')
+ @mock.patch('subprocess.check_output', return_value=b'1\n')
+ def test_get_task_id_default(self, *args):
+ tag = 'nova'
+ self.assertEqual(self.rally_base.get_task_id(tag), '1')
+ args[0].assert_called_with(
+ ['rally', 'task', 'list', '--tag', tag, '--uuids-only'])
- def test_get_task_id_missing_id(self):
- cmd_raw = ''
- self.assertEqual(self.rally_base.get_task_id(cmd_raw),
- None)
+ @mock.patch('subprocess.check_output', return_value=b'\n')
+ def test_get_task_id_missing_id(self, *args):
+ tag = 'nova'
+ self.assertEqual(self.rally_base.get_task_id(tag), '')
+ args[0].assert_called_with(
+ ['rally', 'task', 'list', '--tag', tag, '--uuids-only'])
def test_task_succeed_fail(self):
- json_raw = json.dumps([None])
+ json_raw = json.dumps({})
self.assertEqual(self.rally_base.task_succeed(json_raw),
False)
- json_raw = json.dumps([{'result': [{'error': ['test_error']}]}])
+ json_raw = json.dumps({'tasks': [{'status': 'crashed'}]})
self.assertEqual(self.rally_base.task_succeed(json_raw),
False)
def test_task_succeed_success(self):
- json_raw = json.dumps('')
+ json_raw = json.dumps({'tasks': [{'status': 'finished',
+ 'pass_sla': True}]})
self.assertEqual(self.rally_base.task_succeed(json_raw),
True)
- def test_get_cmd_output(self):
- proc = mock.Mock()
- proc.stdout.__iter__ = mock.Mock(return_value=iter(['line1', 'line2']))
- self.assertEqual(self.rally_base.get_cmd_output(proc),
- 'line1line2')
-
- @mock.patch('__builtin__.open', mock.mock_open())
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
@mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load',
return_value={'scenario': [
{'scenarios': ['test_scenario'],
- 'installers': ['test_installer'],
'tests': ['test']},
{'scenarios': ['other_scenario'],
- 'installers': ['test_installer'],
'tests': ['other_test']}]})
def test_excl_scenario_default(self, mock_func):
os.environ['INSTALLER_TYPE'] = 'test_installer'
@@ -124,53 +144,48 @@ class OSRallyTesting(unittest.TestCase):
self.assertEqual(self.rally_base.excl_scenario(), ['test'])
mock_func.assert_called()
- @mock.patch('__builtin__.open', mock.mock_open())
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
@mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load',
return_value={'scenario': [
{'scenarios': ['^os-[^-]+-featT-modeT$'],
- 'installers': ['test_installer'],
'tests': ['test1']},
{'scenarios': ['^os-ctrlT-[^-]+-modeT$'],
- 'installers': ['test_installer'],
'tests': ['test2']},
{'scenarios': ['^os-ctrlT-featT-[^-]+$'],
- 'installers': ['test_installer'],
'tests': ['test3']},
{'scenarios': ['^os-'],
- 'installers': ['test_installer'],
'tests': ['test4']},
{'scenarios': ['other_scenario'],
- 'installers': ['test_installer'],
'tests': ['test0a']},
{'scenarios': [''], # empty scenario
- 'installers': ['test_installer'],
'tests': ['test0b']}]})
def test_excl_scenario_regex(self, mock_func):
- os.environ['INSTALLER_TYPE'] = 'test_installer'
os.environ['DEPLOY_SCENARIO'] = 'os-ctrlT-featT-modeT'
self.assertEqual(self.rally_base.excl_scenario(),
['test1', 'test2', 'test3', 'test4'])
mock_func.assert_called()
- @mock.patch('__builtin__.open', side_effect=Exception)
+ @mock.patch('six.moves.builtins.open', side_effect=Exception)
def test_excl_scenario_exception(self, mock_open):
self.assertEqual(self.rally_base.excl_scenario(), [])
mock_open.assert_called()
- @mock.patch('__builtin__.open', mock.mock_open())
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
@mock.patch('functest.opnfv_tests.openstack.rally.rally.yaml.safe_load',
return_value={'functionality': [
{'functions': ['no_migration'], 'tests': ['test']}]})
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_migration_supported', return_value=False)
- def test_excl_func_default(self, mock_func, mock_yaml_load):
- os.environ['INSTALLER_TYPE'] = 'test_installer'
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ '_network_trunk_supported', return_value=False)
+ def test_excl_func_default(self, mock_trunk, mock_func, mock_yaml_load):
os.environ['DEPLOY_SCENARIO'] = 'test_scenario'
self.assertEqual(self.rally_base.excl_func(), ['test'])
mock_func.assert_called()
+ mock_trunk.assert_called()
mock_yaml_load.assert_called()
- @mock.patch('__builtin__.open', side_effect=Exception)
+ @mock.patch('six.moves.builtins.open', side_effect=Exception)
def test_excl_func_exception(self, mock_open):
self.assertEqual(self.rally_base.excl_func(), [])
mock_open.assert_called()
@@ -193,62 +208,51 @@ class OSRallyTesting(unittest.TestCase):
return_value=False)
def test_run_task_missing_task_file(self, mock_path_exists):
with self.assertRaises(Exception):
- self.rally_base._run_task('test_name')
+ self.rally_base.prepare_run()
mock_path_exists.assert_called()
- @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists',
- return_value=True)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_prepare_test_list', return_value='test_file_name')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'file_is_empty', return_value=True)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info')
- def test_run_task_no_tests_for_scenario(self, mock_logger_info,
- mock_file_empty, mock_prep_list,
- mock_path_exists):
- self.rally_base._run_task('test_name')
+ def test_prepare_task_no_tests_for_scenario(
+ self, mock_logger_info, mock_file_empty, mock_prep_list):
+ self.rally_base.prepare_task('test_name')
mock_logger_info.assert_any_call('No tests for scenario \"%s\"',
'test_name')
mock_file_empty.assert_called()
mock_prep_list.assert_called()
- mock_path_exists.assert_called()
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_prepare_test_list', return_value='test_file_name')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'file_is_empty', return_value=False)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_build_task_args', return_value={})
- @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_append_summary')
+ 'build_task_args', return_value={})
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'get_task_id', return_value=None)
- @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- 'get_cmd_output', return_value='')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists',
return_value=True)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.subprocess.Popen')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.error')
def test_run_task_taskid_missing(self, mock_logger_error, *args):
# pylint: disable=unused-argument
- self.rally_base._run_task('test_name')
- text = 'Failed to retrieve task_id, validating task...'
+ with self.assertRaises(Exception):
+ self.rally_base.run_task('test_name')
+ text = 'Failed to retrieve task_id'
mock_logger_error.assert_any_call(text)
- @mock.patch('__builtin__.open', mock.mock_open())
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_prepare_test_list', return_value='test_file_name')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'file_is_empty', return_value=False)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_build_task_args', return_value={})
- @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_append_summary')
+ 'build_task_args', return_value={})
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'get_task_id', return_value='1')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- 'get_cmd_output', return_value='')
- @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'task_succeed', return_value=True)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists',
return_value=True)
@@ -256,173 +260,207 @@ class OSRallyTesting(unittest.TestCase):
@mock.patch('functest.opnfv_tests.openstack.rally.rally.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.error')
- def test_run_task_default(self, mock_logger_error, mock_logger_info,
- *args):
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ '_save_results')
+ def test_run_task_default(self, mock_save_res, *args):
# pylint: disable=unused-argument
- self.rally_base._run_task('test_name')
- text = 'Test scenario: "test_name" OK.\n'
- mock_logger_info.assert_any_call(text)
- mock_logger_error.assert_not_called()
-
- def test_prepare_env_testname_invalid(self):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test'
- with self.assertRaises(Exception):
- self.rally_base._prepare_env()
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='test_net_name')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=None)
- def test_prepare_env_image_missing(
- self, mock_get_img, mock_get_net, mock_get_comp_cnt):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
- with self.assertRaises(Exception):
- self.rally_base._prepare_env()
- mock_get_img.assert_called()
- mock_get_net.assert_called()
- mock_get_comp_cnt.assert_called()
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='test_net_name')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=None)
- def test_prepare_env_network_creation_failed(
- self, mock_create_net, mock_get_img, mock_get_net,
- mock_get_comp_cnt):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
- with self.assertRaises(Exception):
- self.rally_base._prepare_env()
- mock_create_net.assert_called()
- mock_get_img.assert_called()
- mock_get_net.assert_called()
- mock_get_comp_cnt.assert_called()
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='test_net_name')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_router',
- return_value=None)
- def test_prepare_env_router_creation_failed(self, *args):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
- with self.assertRaises(Exception):
- self.rally_base._prepare_env()
- for func in args:
- func.assert_called()
+ self.rally_base.run_task('test_name')
+ mock_save_res.assert_called()
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='test_net_name')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_router')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create',
- return_value=None)
- def test_prepare_env_flavor_creation_failed(self, mock_create_flavor,
- *args):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
- with self.assertRaises(Exception):
- self.rally_base._prepare_env()
- for func in args:
- func.assert_called()
- mock_create_flavor.assert_called_once()
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt')
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='test_net_name')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network')
- @mock.patch('snaps.openstack.utils.deploy_utils.create_router')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create',
- side_effect=[mock.Mock, None])
- def test_prepare_env_flavor_alt_creation_failed(self, mock_create_flavor,
- *args):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'task_succeed', return_value=True)
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists',
+ return_value=True)
+ @mock.patch('subprocess.check_output')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.makedirs')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.info')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.LOGGER.debug')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ '_append_summary')
+ def test_save_results(self, mock_summary, *args):
+ # pylint: disable=unused-argument
+ self.rally_base._save_results('test_name', '1234')
+ mock_summary.assert_called()
+
+ def test_prepare_run_testname_invalid(self):
+ self.rally_base.stests = ['test1', 'test2']
with self.assertRaises(Exception):
- self.rally_base._prepare_env()
- for func in args:
- func.assert_called()
- self.assertEqual(mock_create_flavor.call_count, 2)
+ self.rally_base.prepare_run(tests=['test'])
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.os.path.exists')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.shutil.copyfile')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.shutil.copytree')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.shutil.rmtree')
+ def test_prepare_run_flavor_alt_creation_failed(self, *args):
+ # pylint: disable=unused-argument
+ self.rally_base.stests = ['test1', 'test2']
+ with mock.patch.object(self.rally_base, 'count_hypervisors') \
+ as mock_list_hyperv, \
+ mock.patch.object(self.rally_base, 'create_flavor_alt',
+ side_effect=Exception) \
+ as mock_create_flavor:
+ with self.assertRaises(Exception):
+ self.rally_base.prepare_run(tests=['test1'])
+ mock_list_hyperv.assert_called_once()
+ mock_create_flavor.assert_called_once()
+
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'prepare_task', return_value=True)
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_run_task')
- def test_run_tests_all(self, mock_run_task):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'all'
- self.rally_base._run_tests()
+ 'run_task')
+ def test_run_tests_all(self, mock_run_task, mock_prepare_task):
+ self.rally_base.tests = ['test1', 'test2']
+ self.rally_base.run_tests()
+ mock_prepare_task.assert_any_call('test1')
+ mock_prepare_task.assert_any_call('test2')
mock_run_task.assert_any_call('test1')
mock_run_task.assert_any_call('test2')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_run_task')
- def test_run_tests_default(self, mock_run_task):
- self.rally_base.TESTS = ['test1', 'test2']
- self.rally_base.test_name = 'test1'
- self.rally_base._run_tests()
+ 'prepare_task', return_value=True)
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'run_task')
+ def test_run_tests_default(self, mock_run_task, mock_prepare_task):
+ self.rally_base.tests = ['test1', 'test2']
+ self.rally_base.run_tests()
+ mock_prepare_task.assert_any_call('test1')
+ mock_prepare_task.assert_any_call('test2')
mock_run_task.assert_any_call('test1')
+ mock_run_task.assert_any_call('test2')
- def test_clean_up_default(self):
- creator1 = mock.Mock()
- creator2 = mock.Mock()
- self.rally_base.creators = [creator1, creator2]
- self.rally_base._clean_up()
- self.assertTrue(creator1.clean.called)
- self.assertTrue(creator2.clean.called)
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'clean_rally_logs')
+ def test_clean_up_default(self, *args):
+ with mock.patch.object(self.rally_base.orig_cloud,
+ 'delete_flavor') as mock_delete_flavor:
+ self.rally_base.flavor_alt = mock.Mock()
+ self.rally_base.clean()
+ self.assertEqual(mock_delete_flavor.call_count, 1)
+ args[0].assert_called_once_with()
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'update_rally_logs')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'create_rally_deployment')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_prepare_env')
+ 'prepare_run')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_run_tests')
+ 'run_tests')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_generate_report')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_clean_up')
+ 'export_task')
def test_run_default(self, *args):
self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_OK)
for func in args:
func.assert_called()
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'update_rally_logs')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'create_rally_deployment', side_effect=Exception)
- def test_run_exception_create_rally_dep(self, mock_create_rally_dep):
+ def test_run_exception_create_rally_dep(self, *args):
self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_RUN_ERROR)
- mock_create_rally_dep.assert_called()
+ args[0].assert_called()
+ args[1].assert_called_once_with(self.rally_base.res_dir)
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'update_rally_logs')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'create_rally_deployment', return_value=mock.Mock())
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
- '_prepare_env', side_effect=Exception)
- def test_run_exception_prepare_env(self, mock_prep_env, *args):
+ 'prepare_run', side_effect=Exception)
+ def test_run_exception_prepare_run(self, mock_prep_env, *args):
# pylint: disable=unused-argument
self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_RUN_ERROR)
mock_prep_env.assert_called()
+ args[1].assert_called_once_with(self.rally_base.res_dir)
def test_append_summary(self):
- text = '[{"result":[{"error":[]},{"error":["err"]}],' \
- '"full_duration": 17.312026}]'
- self.rally_base._append_summary(text, "foo_test")
+ json_dict = {
+ 'tasks': [{
+ 'subtasks': [{
+ 'title': 'sub_task',
+ 'workloads': [{
+ 'full_duration': 1.23,
+ 'data': [{
+ 'error': []
+ }]
+ }, {
+ 'full_duration': 2.78,
+ 'data': [{
+ 'error': ['err']
+ }]
+ }]
+ }]
+ }]
+ }
+ self.rally_base._append_summary(json.dumps(json_dict), "foo_test")
self.assertEqual(self.rally_base.summary[0]['test_name'], "foo_test")
- self.assertEqual(self.rally_base.summary[0]['overall_duration'],
- 17.312026)
+ self.assertEqual(self.rally_base.summary[0]['overall_duration'], 4.01)
self.assertEqual(self.rally_base.summary[0]['nb_tests'], 2)
self.assertEqual(self.rally_base.summary[0]['nb_success'], 1)
+ self.assertEqual(self.rally_base.summary[0]['success'], [])
+ self.assertEqual(self.rally_base.summary[0]['failures'], ['sub_task'])
+
+ def test_is_successful_false(self):
+ with mock.patch('six.moves.builtins.super') as mock_super:
+ self.rally_base.summary = [{"task_status": True},
+ {"task_status": False}]
+ self.assertEqual(self.rally_base.is_successful(),
+ testcase.TestCase.EX_TESTCASE_FAILED)
+ mock_super(rally.RallyBase, self).is_successful.assert_not_called()
+
+ def test_is_successful_true(self):
+ with mock.patch('six.moves.builtins.super') as mock_super:
+ mock_super(rally.RallyBase, self).is_successful.return_value = 424
+ self.rally_base.summary = [{"task_status": True},
+ {"task_status": True}]
+ self.assertEqual(self.rally_base.is_successful(), 424)
+ mock_super(rally.RallyBase, self).is_successful.assert_called()
+
+ @mock.patch('subprocess.check_output',
+ side_effect=subprocess.CalledProcessError('', ''))
+ def test_export_task_ko(self, *args):
+ file_name = (f"{self.rally_base.results_dir}/"
+ f"{self.rally_base.case_name}.html")
+ with self.assertRaises(subprocess.CalledProcessError):
+ self.rally_base.export_task(file_name)
+ cmd = ["rally", "task", "export", "--type", "html", "--deployment",
+ str(getattr(config.CONF, 'rally_deployment_name')),
+ "--to", file_name]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
+
+ @mock.patch('subprocess.check_output', return_value=b'')
+ def test_export_task(self, *args):
+ file_name = (f"{self.rally_base.results_dir}/"
+ f"{self.rally_base.case_name}.html")
+ self.assertEqual(self.rally_base.export_task(file_name), None)
+ cmd = ["rally", "task", "export", "--type", "html", "--deployment",
+ str(getattr(config.CONF, 'rally_deployment_name')),
+ "--to", file_name]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
+
+ @mock.patch('subprocess.check_output',
+ side_effect=subprocess.CalledProcessError('', ''))
+ def test_verify_report_ko(self, *args):
+ file_name = (f"{self.rally_base.results_dir}/"
+ f"{self.rally_base.case_name}.html")
+ with self.assertRaises(subprocess.CalledProcessError):
+ self.rally_base.verify_report(file_name, "1")
+ cmd = ["rally", "verify", "report", "--type", "html", "--uuid", "1",
+ "--to", file_name]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
+
+ @mock.patch('subprocess.check_output', return_value=b'')
+ def test_verify_report(self, *args):
+ file_name = (f"{self.rally_base.results_dir}/"
+ f"{self.rally_base.case_name}.html")
+ self.assertEqual(self.rally_base.verify_report(file_name, "1"), None)
+ cmd = ["rally", "verify", "report", "--type", "html", "--uuid", "1",
+ "--to", file_name]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
if __name__ == "__main__":
diff --git a/functest/tests/unit/openstack/snaps/__init__.py b/functest/tests/unit/openstack/snaps/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/functest/tests/unit/openstack/snaps/__init__.py
+++ /dev/null
diff --git a/functest/tests/unit/openstack/snaps/test_snaps.py b/functest/tests/unit/openstack/snaps/test_snaps.py
deleted file mode 100644
index 8bbf70f4a..000000000
--- a/functest/tests/unit/openstack/snaps/test_snaps.py
+++ /dev/null
@@ -1,288 +0,0 @@
-# Copyright (c) 2017 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
-
-# pylint: disable=missing-docstring
-
-import logging
-import unittest
-
-import mock
-from snaps.openstack.os_credentials import OSCreds
-from xtesting.core import testcase
-
-from functest.opnfv_tests.openstack.snaps import (
- connection_check, api_check, health_check, smoke)
-
-
-class ConnectionCheckTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.connection_check = connection_check.ConnectionCheck(
- os_creds=self.os_creds, ext_net_name='foo')
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_client_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_success(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = []
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.connection_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
- use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_client_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
- self.assertEquals(
- testcase.TestCase.EX_TESTCASE_FAILED,
- self.connection_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
- use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_client_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko_criteria(self, *args):
- self.connection_check.criteria = 90
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.connection_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.connection_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', os_creds=self.os_creds, suite=mock.ANY,
- use_keystone=True)
-
-
-class APICheckTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.api_check = api_check.ApiCheck(
- os_creds=self.os_creds, ext_net_name='foo')
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_api_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_success(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = []
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.api_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', image_metadata=mock.ANY,
- os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_api_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
- self.assertEquals(
- testcase.TestCase.EX_TESTCASE_FAILED,
- self.api_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', image_metadata=mock.ANY,
- os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_api_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko_criteria(self, *args):
- self.api_check.criteria = 90
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.api_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.api_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', image_metadata=mock.ANY,
- os_creds=self.os_creds, suite=mock.ANY, use_keystone=True)
-
-
-class HealthCheckTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.health_check = health_check.HealthCheck(
- os_creds=self.os_creds, ext_net_name='foo')
-
- @mock.patch('snaps.openstack.tests.os_source_file_test.'
- 'OSIntegrationTestCase.parameterize')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_success(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = []
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.health_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- mock.ANY, ext_net_name='foo', flavor_metadata=None,
- image_metadata=mock.ANY, netconf_override=None,
- os_creds=self.os_creds, use_keystone=True)
-
- @mock.patch('snaps.openstack.tests.os_source_file_test.'
- 'OSIntegrationTestCase.parameterize')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
- self.assertEquals(
- testcase.TestCase.EX_TESTCASE_FAILED,
- self.health_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- mock.ANY, ext_net_name='foo', flavor_metadata=None,
- image_metadata=mock.ANY, netconf_override=None,
- os_creds=self.os_creds, use_keystone=True)
-
- @mock.patch('snaps.openstack.tests.os_source_file_test.'
- 'OSIntegrationTestCase.parameterize')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko_criteria(self, *args):
- self.health_check.criteria = 90
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.health_check.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.health_check.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- mock.ANY, ext_net_name='foo', flavor_metadata=None,
- image_metadata=mock.ANY, netconf_override=None,
- os_creds=self.os_creds, use_keystone=True)
-
-
-class SmokeTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.smoke = smoke.SnapsSmoke(
- os_creds=self.os_creds, ext_net_name='foo')
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_integration_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_success(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = []
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
- self.assertEquals(testcase.TestCase.EX_OK, self.smoke.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
- netconf_override=None, os_creds=self.os_creds,
- suite=mock.ANY, use_floating_ips=True, use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_integration_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko(self, *args):
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
- self.assertEquals(
- testcase.TestCase.EX_TESTCASE_FAILED, self.smoke.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
- netconf_override=mock.ANY, os_creds=self.os_creds,
- suite=mock.ANY, use_floating_ips=True, use_keystone=True)
-
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_suite_builder.'
- 'add_openstack_integration_tests')
- @mock.patch('unittest.TextTestRunner.run',
- return_value=mock.MagicMock(name='unittest.TextTestResult'))
- def test_run_1_of_100_ko_criteria(self, *args):
- self.smoke.criteria = 90
- args[0].return_value.testsRun = 100
- args[0].return_value.failures = ['foo']
- args[0].return_value.errors = []
- self.assertEquals(testcase.TestCase.EX_OK, self.smoke.run())
- self.assertEquals(
- testcase.TestCase.EX_OK, self.smoke.is_successful())
- args[0].assert_called_with(mock.ANY)
- args[1].assert_called_with(
- ext_net_name='foo', flavor_metadata=None, image_metadata=mock.ANY,
- netconf_override=None, os_creds=self.os_creds,
- suite=mock.ANY, use_floating_ips=True, use_keystone=True)
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/openstack/tempest/test_conf_utils.py b/functest/tests/unit/openstack/tempest/test_conf_utils.py
deleted file mode 100644
index 8988e96a1..000000000
--- a/functest/tests/unit/openstack/tempest/test_conf_utils.py
+++ /dev/null
@@ -1,258 +0,0 @@
-#!/usr/bin/env python
-
-# 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
-
-import logging
-import os
-import unittest
-
-import mock
-
-from functest.opnfv_tests.openstack.tempest import conf_utils
-from functest.opnfv_tests.openstack.tempest import tempest
-from functest.utils import config
-from snaps.openstack.os_credentials import OSCreds
-
-
-class OSTempestConfUtilsTesting(unittest.TestCase):
- # pylint: disable=too-many-public-methods
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- @mock.patch('snaps.openstack.utils.deploy_utils.create_project',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_user',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=None)
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=mock.Mock())
- def test_create_res_missing_net_dic(self, *mock_args):
- # pylint: disable=unused-argument
- tempest_resources = tempest.TempestResourcesManager(
- os_creds=self.os_creds)
- with self.assertRaises(Exception) as context:
- tempest_resources.create()
- msg = 'Failed to create private network'
- self.assertTrue(msg in context.exception)
-
- @mock.patch('snaps.openstack.utils.deploy_utils.create_project',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_user',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=None)
- def test_create_res_missing_image(self, *mock_args):
- # pylint: disable=unused-argument
- tempest_resources = tempest.TempestResourcesManager(
- os_creds=self.os_creds)
-
- with self.assertRaises(Exception) as context:
- tempest_resources.create()
- msg = 'Failed to create image'
- self.assertTrue(msg in context.exception, msg=str(context.exception))
-
- @mock.patch('snaps.openstack.utils.deploy_utils.create_project',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_user',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=mock.Mock())
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_client')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_project')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create',
- return_value=None)
- def test_create_res_missing_flavor(self, *mock_args):
- # pylint: disable=unused-argument
- tempest_resources = tempest.TempestResourcesManager(
- os_creds=self.os_creds)
- with self.assertRaises(Exception) as context:
- tempest_resources.create()
- msg = 'Failed to create flavor'
- self.assertTrue(msg in context.exception, msg=str(context.exception))
-
- @mock.patch('subprocess.check_output')
- def test_create_rally_deployment(self, mock_exec):
- self.assertEqual(conf_utils.create_rally_deployment(), None)
- calls = [
- mock.call(['rally', 'deployment', 'destroy', '--deployment',
- str(getattr(config.CONF, 'rally_deployment_name'))]),
- mock.call(['rally', 'deployment', 'create', '--fromenv', '--name',
- str(getattr(config.CONF, 'rally_deployment_name'))]),
- mock.call(['rally', 'deployment', 'check'])]
- mock_exec.assert_has_calls(calls)
-
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils'
- '.LOGGER.debug')
- def test_create_verifier(self, mock_logger_debug):
- mock_popen = mock.Mock()
- attrs = {'poll.return_value': None,
- 'stdout.readline.return_value': '0'}
- mock_popen.configure_mock(**attrs)
-
- setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
- with mock.patch('subprocess.Popen', side_effect=Exception), \
- self.assertRaises(Exception):
- conf_utils.create_verifier()
- mock_logger_debug.assert_any_call("Tempest test_verifier_name"
- " does not exist")
-
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
- 'create_verifier', return_value=mock.Mock())
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
- 'create_rally_deployment', return_value=mock.Mock())
- def test_get_verif_id_missing_verif(self, mock_rally, mock_tempest):
- # pylint: disable=unused-argument
- setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.subprocess.Popen') as mock_popen, \
- self.assertRaises(Exception):
- mock_stdout = mock.Mock()
- attrs = {'stdout.readline.return_value': ''}
- mock_stdout.configure_mock(**attrs)
- mock_popen.return_value = mock_stdout
- conf_utils.get_verifier_id()
-
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
- 'create_verifier', return_value=mock.Mock())
- @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
- 'create_rally_deployment', return_value=mock.Mock())
- def test_get_verifier_id_default(self, mock_rally, mock_tempest):
- # pylint: disable=unused-argument
- setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.subprocess.Popen') as mock_popen:
- mock_stdout = mock.Mock()
- attrs = {'stdout.readline.return_value': 'test_deploy_id'}
- mock_stdout.configure_mock(**attrs)
- mock_popen.return_value = mock_stdout
-
- self.assertEqual(conf_utils.get_verifier_id(),
- 'test_deploy_id')
-
- def test_get_depl_id_missing_rally(self):
- setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.subprocess.Popen') as mock_popen, \
- self.assertRaises(Exception):
- mock_stdout = mock.Mock()
- attrs = {'stdout.readline.return_value': ''}
- mock_stdout.configure_mock(**attrs)
- mock_popen.return_value = mock_stdout
- conf_utils.get_verifier_deployment_id()
-
- def test_get_depl_id_default(self):
- setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.subprocess.Popen') as mock_popen:
- mock_stdout = mock.Mock()
- attrs = {'stdout.readline.return_value': 'test_deploy_id'}
- mock_stdout.configure_mock(**attrs)
- mock_popen.return_value = mock_stdout
-
- self.assertEqual(conf_utils.get_verifier_deployment_id(),
- 'test_deploy_id')
-
- def test_get_verif_repo_dir_default(self):
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.os.path.join',
- return_value='test_verifier_repo_dir'), \
- mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.get_verifier_id') as mock_get_id:
- self.assertEqual(conf_utils.get_verifier_repo_dir(''),
- 'test_verifier_repo_dir')
- self.assertTrue(mock_get_id.called)
-
- def test_get_depl_dir_default(self):
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.os.path.join',
- return_value='test_verifier_repo_dir'), \
- mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.get_verifier_id') as mock_get_vid, \
- mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.get_verifier_deployment_id') \
- as mock_get_did:
- self.assertEqual(conf_utils.get_verifier_deployment_dir('', ''),
- 'test_verifier_repo_dir')
- self.assertTrue(mock_get_vid.called)
- self.assertTrue(mock_get_did.called)
-
- def _test_missing_param(self, params, image_id, flavor_id):
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.ConfigParser.RawConfigParser.'
- 'set') as mset, \
- mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.ConfigParser.RawConfigParser.'
- 'read') as mread, \
- mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.ConfigParser.RawConfigParser.'
- 'write') as mwrite, \
- mock.patch('__builtin__.open', mock.mock_open()), \
- mock.patch('functest.utils.functest_utils.yaml.safe_load',
- return_value={'validation': {'ssh_timeout': 300}}):
- os.environ['OS_ENDPOINT_TYPE'] = ''
- conf_utils.configure_tempest_update_params(
- 'test_conf_file', image_id=image_id,
- flavor_id=flavor_id)
- mset.assert_any_call(params[0], params[1], params[2])
- self.assertTrue(mread.called)
- self.assertTrue(mwrite.called)
-
- def test_upd_missing_image_id(self):
- self._test_missing_param(('compute', 'image_ref', 'test_image_id'),
- 'test_image_id', None)
-
- def test_upd_missing_image_id_alt(self):
- conf_utils.IMAGE_ID_ALT = 'test_image_id_alt'
- self._test_missing_param(('compute', 'image_ref_alt',
- 'test_image_id_alt'), None, None)
-
- def test_upd_missing_flavor_id(self):
- setattr(config.CONF, 'tempest_use_custom_flavors', 'True')
- self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'),
- None, 'test_flavor_id')
-
- def test_upd_missing_flavor_id_alt(self):
- setattr(config.CONF, 'tempest_use_custom_flavors', 'True')
- conf_utils.FLAVOR_ID_ALT = 'test_flavor_id_alt'
- self._test_missing_param(('compute', 'flavor_ref_alt',
- 'test_flavor_id_alt'), None, None)
-
- def test_verif_missing_conf_file(self):
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.os.path.isfile',
- return_value=False), \
- mock.patch('subprocess.check_output') as mexe, \
- self.assertRaises(Exception) as context:
- conf_utils.configure_verifier('test_dep_dir')
- mexe.assert_called_once_with("rally verify configure-verifier")
- msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
- " NOT found.")
- self.assertTrue(msg in context.exception)
-
- def test_configure_verifier_default(self):
- with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.os.path.isfile',
- return_value=True), \
- mock.patch('subprocess.check_output') as mexe:
- self.assertEqual(conf_utils.configure_verifier('test_dep_dir'),
- 'test_dep_dir/tempest.conf')
- mexe.assert_called_once_with(
- ['rally', 'verify', 'configure-verifier', '--reconfigure',
- '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/openstack/tempest/test_tempest.py b/functest/tests/unit/openstack/tempest/test_tempest.py
index fc8c9cc85..efc4393c8 100644
--- a/functest/tests/unit/openstack/tempest/test_tempest.py
+++ b/functest/tests/unit/openstack/tempest/test_tempest.py
@@ -12,43 +12,38 @@ import os
import unittest
import mock
-from snaps.openstack.os_credentials import OSCreds
from xtesting.core import testcase
+from functest.opnfv_tests.openstack.rally import rally
from functest.opnfv_tests.openstack.tempest import tempest
-from functest.opnfv_tests.openstack.tempest import conf_utils
+from functest.utils import config
class OSTempestTesting(unittest.TestCase):
# pylint: disable=too-many-public-methods
def setUp(self):
- os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- with mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'conf_utils.get_verifier_id',
- return_value='test_deploy_id'), \
- mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'conf_utils.get_verifier_deployment_id',
- return_value='test_deploy_id'), \
- mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'conf_utils.get_verifier_repo_dir',
- return_value='test_verifier_repo_dir'), \
- mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'conf_utils.get_verifier_deployment_dir',
- return_value='test_verifier_deploy_dir'), \
- mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_credentials',
- return_value=os_creds):
+ with mock.patch('os_client_config.get_config'), \
+ mock.patch('shade.OpenStackCloud'), \
+ mock.patch('functest.core.tenantnetwork.NewProject'), \
+ mock.patch('functest.opnfv_tests.openstack.rally.rally.'
+ 'RallyBase.create_rally_deployment'), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'TempestCommon.create_verifier'), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'TempestCommon.get_verifier_id',
+ return_value='test_deploy_id'), \
+ mock.patch('functest.opnfv_tests.openstack.rally.rally.'
+ 'RallyBase.get_verifier_deployment_id',
+ return_value='test_deploy_id'), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'TempestCommon.get_verifier_repo_dir',
+ return_value='test_verifier_repo_dir'), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'TempestCommon.get_verifier_deployment_dir',
+ return_value='test_verifier_deploy_dir'), \
+ mock.patch('os_client_config.make_shade'):
self.tempestcommon = tempest.TempestCommon()
- self.tempestsmoke_serial = tempest.TempestSmokeSerial()
- self.tempestsmoke_parallel = tempest.TempestSmokeParallel()
- self.tempestfull_parallel = tempest.TempestFullParallel()
- self.tempestcustom = tempest.TempestCustom()
- self.tempestdefcore = tempest.TempestDefcore()
- self.tempestneutrontrunk = tempest.TempestNeutronTrunk()
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.error')
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.debug')
@@ -62,9 +57,11 @@ class OSTempestTesting(unittest.TestCase):
msg = "Tempest test list file %s NOT found."
self.tempestcommon.generate_test_list()
self.assertTrue(
- (msg % conf_utils.TEMPEST_CUSTOM) in context.exception)
+ (msg % self.tempestcommon.tempest_custom) in context.exception)
- def test_gen_tl_cm_default(self):
+ @mock.patch('subprocess.check_output')
+ @mock.patch('os.remove')
+ def test_gen_tl_cm_default(self, *args):
self.tempestcommon.mode = 'custom'
with mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'shutil.copyfile') as mock_copyfile, \
@@ -72,21 +69,25 @@ class OSTempestTesting(unittest.TestCase):
'os.path.isfile', return_value=True):
self.tempestcommon.generate_test_list()
self.assertTrue(mock_copyfile.called)
+ args[0].assert_called_once_with('/etc/tempest.conf')
+ @mock.patch('os.remove')
+ @mock.patch('shutil.copyfile')
@mock.patch('subprocess.check_output')
- def _test_gen_tl_mode_default(self, mode, mock_exec=None):
- self.tempestcommon.mode = mode
- if self.tempestcommon.mode == 'smoke':
- testr_mode = r"'^tempest\.(api|scenario).*\[.*\bsmoke\b.*\]$'"
- elif self.tempestcommon.mode == 'full':
- testr_mode = r"'^tempest\.'"
+ def _test_gen_tl_mode_default(self, mode, *args):
+ if mode == 'smoke':
+ testr_mode = r'^tempest\.(api|scenario).*\[.*\bsmoke\b.*\]$'
+ elif mode == 'full':
+ testr_mode = r'^tempest\.'
else:
testr_mode = self.tempestcommon.mode
verifier_repo_dir = 'test_verifier_repo_dir'
- cmd = "(cd {0}; stestr list {1} >{2} 2>/dev/null)".format(
- verifier_repo_dir, testr_mode, self.tempestcommon.list)
- self.tempestcommon.generate_test_list()
- mock_exec.assert_called_once_with(cmd, shell=True)
+ self.tempestcommon.verifier_repo_dir = verifier_repo_dir
+ cmd = (f"(cd {verifier_repo_dir}; stestr list '{testr_mode}' > "
+ f"{self.tempestcommon.list} 2>/dev/null)")
+ self.tempestcommon.generate_test_list(mode=testr_mode)
+ args[0].assert_called_once_with(cmd, shell=True)
+ args[2].assert_called_once_with('/etc/tempest.conf')
def test_gen_tl_smoke_mode(self):
self._test_gen_tl_mode_default('smoke')
@@ -94,9 +95,6 @@ class OSTempestTesting(unittest.TestCase):
def test_gen_tl_full_mode(self):
self._test_gen_tl_mode_default('full')
- def test_gen_tl_neutron_trunk_mode(self):
- self._test_gen_tl_mode_default('neutron_trunk')
-
def test_verif_res_missing_verif_id(self):
self.tempestcommon.verification_id = None
with self.assertRaises(Exception):
@@ -121,13 +119,14 @@ class OSTempestTesting(unittest.TestCase):
@mock.patch("os.remove")
@mock.patch("os.path.exists", return_value=True)
def test_apply_missing_blacklist(self, *args):
- with mock.patch('__builtin__.open', mock.mock_open()) as mock_open, \
+ with mock.patch('six.moves.builtins.open',
+ mock.mock_open()) as mock_open, \
mock.patch.object(self.tempestcommon, 'read_file',
return_value=['test1', 'test2']):
- conf_utils.TEMPEST_BLACKLIST = Exception
- os.environ['INSTALLER_TYPE'] = 'installer_type'
+ self.tempestcommon.tempest_blacklist = Exception
os.environ['DEPLOY_SCENARIO'] = 'deploy_scenario'
- self.tempestcommon.apply_tempest_blacklist()
+ self.tempestcommon.apply_tempest_blacklist(
+ self.tempestcommon.tempest_blacklist)
obj = mock_open()
obj.write.assert_any_call('test1\n')
obj.write.assert_any_call('test2\n')
@@ -141,16 +140,16 @@ class OSTempestTesting(unittest.TestCase):
@mock.patch("os.path.exists", return_value=True)
def test_apply_blacklist_default(self, *args):
item_dict = {'scenarios': ['deploy_scenario'],
- 'installers': ['installer_type'],
'tests': ['test2']}
- with mock.patch('__builtin__.open', mock.mock_open()) as mock_open, \
+ with mock.patch('six.moves.builtins.open',
+ mock.mock_open()) as mock_open, \
mock.patch.object(self.tempestcommon, 'read_file',
return_value=['test1', 'test2']), \
mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'yaml.safe_load', return_value=item_dict):
- os.environ['INSTALLER_TYPE'] = 'installer_type'
os.environ['DEPLOY_SCENARIO'] = 'deploy_scenario'
- self.tempestcommon.apply_tempest_blacklist()
+ self.tempestcommon.apply_tempest_blacklist(
+ self.tempestcommon.tempest_blacklist)
obj = mock_open()
obj.write.assert_any_call('test1\n')
self.assertFalse(obj.write.assert_any_call('test2\n'))
@@ -159,31 +158,17 @@ class OSTempestTesting(unittest.TestCase):
args[2].assert_called_once_with(
self.tempestcommon.list, self.tempestcommon.raw_list)
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.info')
- def test_run_verifier_tests_default(self, mock_logger_info):
- with mock.patch('__builtin__.open', mock.mock_open()), \
- mock.patch('__builtin__.iter', return_value=[r'\} tempest\.']), \
- mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'subprocess.Popen'):
- conf_utils.TEMPEST_LIST = 'test_tempest_list'
- cmd = ["rally", "verify", "start", "--load-list",
- conf_utils.TEMPEST_LIST]
- with self.assertRaises(Exception):
- self.tempestcommon.run_verifier_tests()
- mock_logger_info. \
- assert_any_call("Starting Tempest test suite: '%s'.", cmd)
-
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'subprocess.Popen')
- def test_generate_report(self, mock_popen):
- self.tempestcommon.verification_id = "1234"
- html_file = os.path.join(tempest.TempestCommon.TEMPEST_RESULTS_DIR,
- "tempest-report.html")
- cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
- "1234", "--to", html_file]
- self.tempestcommon.generate_report()
- mock_popen.assert_called_once_with(cmd, stdout=mock.ANY,
- stderr=mock.ANY)
+ @mock.patch('six.moves.builtins.open', mock.mock_open())
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.info')
+ def test_run_verifier_tests_default(self, *args):
+ self.tempestcommon.tempest_list = 'test_tempest_list'
+ cmd = ["rally", "verify", "start", "--load-list",
+ self.tempestcommon.tempest_list]
+ with self.assertRaises(Exception):
+ self.tempestcommon.run_verifier_tests()
+ args[0].assert_any_call("Starting Tempest test suite: '%s'.", cmd)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'os.path.exists', return_value=False)
@@ -197,8 +182,6 @@ class OSTempestTesting(unittest.TestCase):
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'os.path.exists', return_value=False)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'TempestResourcesManager.create', side_effect=Exception)
def test_run_create_resources_ko(self, *args):
# pylint: disable=unused-argument
self.assertEqual(self.tempestcommon.run(),
@@ -208,22 +191,6 @@ class OSTempestTesting(unittest.TestCase):
'os.path.exists', return_value=False)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'TempestResourcesManager.create', return_value={})
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt', side_effect=Exception)
- def test_run_get_active_comp_cnt_ko(self, *args):
- # pylint: disable=unused-argument
- self.assertEqual(self.tempestcommon.run(),
- testcase.TestCase.EX_RUN_ERROR)
-
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'os.path.exists', return_value=False)
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'TempestResourcesManager.create', return_value={})
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt', return_value=2)
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'TempestCommon.configure', side_effect=Exception)
def test_run_configure_tempest_ko(self, *args):
# pylint: disable=unused-argument
@@ -234,10 +201,6 @@ class OSTempestTesting(unittest.TestCase):
'os.path.exists', return_value=False)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
- 'TempestResourcesManager.create', return_value={})
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_active_compute_cnt', return_value=2)
- @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'TempestCommon.configure')
def _test_run(self, status, *args):
# pylint: disable=unused-argument
@@ -250,9 +213,9 @@ class OSTempestTesting(unittest.TestCase):
def test_run_apply_blacklist_ko(self):
with mock.patch.object(self.tempestcommon, 'generate_test_list'), \
- mock.patch.object(
- self.tempestcommon, 'apply_tempest_blacklist',
- side_effect=Exception()):
+ mock.patch.object(self.tempestcommon,
+ 'apply_tempest_blacklist',
+ side_effect=Exception()):
self._test_run(testcase.TestCase.EX_RUN_ERROR)
def test_run_verifier_tests_ko(self):
@@ -274,15 +237,155 @@ class OSTempestTesting(unittest.TestCase):
side_effect=Exception):
self._test_run(testcase.TestCase.EX_RUN_ERROR)
- def test_run(self):
- with mock.patch.object(self.tempestcommon, 'generate_test_list'), \
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.TempestCommon.'
+ 'run', return_value=testcase.TestCase.EX_OK)
+ def test_run(self, *args):
+ with mock.patch.object(self.tempestcommon, 'update_rally_regex'), \
+ mock.patch.object(self.tempestcommon, 'generate_test_list'), \
mock.patch.object(self.tempestcommon,
'apply_tempest_blacklist'), \
mock.patch.object(self.tempestcommon, 'run_verifier_tests'), \
mock.patch.object(self.tempestcommon,
- 'parse_verifier_result'), \
- mock.patch.object(self.tempestcommon, 'generate_report'):
+ 'parse_verifier_result'):
self._test_run(testcase.TestCase.EX_OK)
+ args[0].assert_called_once_with()
+
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.debug')
+ def test_create_verifier(self, mock_logger_debug):
+ mock_popen = mock.Mock()
+ attrs = {'poll.return_value': None,
+ 'stdout.readline.return_value': '0'}
+ mock_popen.configure_mock(**attrs)
+
+ setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
+ with mock.patch('subprocess.Popen', side_effect=Exception), \
+ self.assertRaises(Exception):
+ self.tempestcommon.create_verifier()
+ mock_logger_debug.assert_any_call("Tempest test_verifier_name"
+ " does not exist")
+
+ def test_get_verifier_id_default(self):
+ setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
+
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.subprocess.Popen') as mock_popen:
+ attrs = {'return_value.__enter__.return_value.'
+ 'stdout.readline.return_value': b'test_deploy_id'}
+ mock_popen.configure_mock(**attrs)
+
+ self.assertEqual(self.tempestcommon.get_verifier_id(),
+ 'test_deploy_id')
+
+ def test_get_depl_id_default(self):
+ setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.subprocess.Popen') as mock_popen:
+ attrs = {'return_value.__enter__.return_value.'
+ 'stdout.readline.return_value': b'test_deploy_id'}
+ mock_popen.configure_mock(**attrs)
+
+ self.assertEqual(rally.RallyBase.get_verifier_deployment_id(),
+ 'test_deploy_id')
+
+ def test_get_verif_repo_dir_default(self):
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.os.path.join',
+ return_value='test_verifier_repo_dir'):
+ self.assertEqual(self.tempestcommon.get_verifier_repo_dir(''),
+ 'test_verifier_repo_dir')
+
+ def test_get_depl_dir_default(self):
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.os.path.join',
+ return_value='test_verifier_repo_dir'):
+ self.assertEqual(
+ self.tempestcommon.get_verifier_deployment_dir('', ''),
+ 'test_verifier_repo_dir')
+
+ def _test_missing_param(self, params, image_id, flavor_id, alt=False):
+ with mock.patch('six.moves.configparser.RawConfigParser.'
+ 'set') as mset, \
+ mock.patch('six.moves.configparser.RawConfigParser.'
+ 'read') as mread, \
+ mock.patch('six.moves.configparser.RawConfigParser.'
+ 'write') as mwrite, \
+ mock.patch('six.moves.builtins.open', mock.mock_open()), \
+ mock.patch('functest.utils.functest_utils.yaml.safe_load',
+ return_value={'validation': {'ssh_timeout': 300}}):
+ os.environ['OS_INTERFACE'] = ''
+ if not alt:
+ self.tempestcommon.configure_tempest_update_params(
+ 'test_conf_file', image_id=image_id,
+ flavor_id=flavor_id)
+ mset.assert_any_call(params[0], params[1], params[2])
+ else:
+ self.tempestcommon.configure_tempest_update_params(
+ 'test_conf_file', image_alt_id=image_id,
+ flavor_alt_id=flavor_id)
+ mset.assert_any_call(params[0], params[1], params[2])
+ self.assertTrue(mread.called)
+ self.assertTrue(mwrite.called)
+
+ def test_upd_missing_image_id(self):
+ self._test_missing_param(('compute', 'image_ref', 'test_image_id'),
+ 'test_image_id', None)
+
+ def test_upd_missing_image_id_alt(self):
+ self._test_missing_param(
+ ('compute', 'image_ref_alt', 'test_image_id_alt'),
+ 'test_image_id_alt', None, alt=True)
+
+ def test_upd_missing_flavor_id(self):
+ self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'),
+ None, 'test_flavor_id')
+
+ def test_upd_missing_flavor_id_alt(self):
+ self._test_missing_param(
+ ('compute', 'flavor_ref_alt', 'test_flavor_id_alt'),
+ None, 'test_flavor_id_alt', alt=True)
+
+ def test_verif_missing_conf_file(self):
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.os.path.isfile',
+ return_value=False), \
+ mock.patch('subprocess.check_output') as mexe, \
+ self.assertRaises(Exception) as context:
+ self.tempestcommon.configure_verifier('test_dep_dir')
+ mexe.assert_called_once_with("rally verify configure-verifier")
+ msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
+ " NOT found.")
+ self.assertTrue(msg in context.exception)
+
+ def test_configure_verifier_default(self):
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'tempest.os.path.isfile',
+ return_value=True), \
+ mock.patch('subprocess.check_output') as mexe:
+ self.assertEqual(
+ self.tempestcommon.configure_verifier('test_dep_dir'),
+ 'test_dep_dir/tempest.conf')
+ mexe.assert_called_once_with(
+ ['rally', 'verify', 'configure-verifier', '--reconfigure',
+ '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
+
+ def test_is_successful_false(self):
+ with mock.patch('six.moves.builtins.super') as mock_super:
+ self.tempestcommon.deny_skipping = True
+ self.tempestcommon.details = {"skipped_number": 2}
+ self.assertEqual(self.tempestcommon.is_successful(),
+ testcase.TestCase.EX_TESTCASE_FAILED)
+ mock_super(tempest.TempestCommon,
+ self).is_successful.assert_not_called()
+
+ def test_is_successful_true(self):
+ with mock.patch('six.moves.builtins.super') as mock_super:
+ self.tempestcommon.deny_skipping = False
+ self.tempestcommon.details = {"skipped_number": 2}
+ mock_super(tempest.TempestCommon,
+ self).is_successful.return_value = 567
+ self.assertEqual(self.tempestcommon.is_successful(), 567)
+ mock_super(tempest.TempestCommon,
+ self).is_successful.assert_called()
if __name__ == "__main__":
diff --git a/functest/tests/unit/cli/__init__.py b/functest/tests/unit/openstack/vmtp/__init__.py
index e69de29bb..e69de29bb 100644
--- a/functest/tests/unit/cli/__init__.py
+++ b/functest/tests/unit/openstack/vmtp/__init__.py
diff --git a/functest/tests/unit/openstack/vmtp/test_vmtp.py b/functest/tests/unit/openstack/vmtp/test_vmtp.py
new file mode 100644
index 000000000..850273476
--- /dev/null
+++ b/functest/tests/unit/openstack/vmtp/test_vmtp.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018 Orange 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
+
+# pylint: disable=missing-docstring
+
+import logging
+import unittest
+
+import mock
+import munch
+import shade
+
+from functest.opnfv_tests.openstack.vmtp import vmtp
+
+
+class VmtpInitTesting(unittest.TestCase):
+
+ def _test_exc_init(self):
+ testcase = vmtp.Vmtp()
+ self.assertEqual(testcase.case_name, "vmtp")
+ self.assertEqual(testcase.result, 0)
+ for func in ['generate_keys', 'write_config', 'run_vmtp']:
+ with self.assertRaises(AssertionError):
+ getattr(testcase, func)()
+ self.assertEqual(testcase.run(), testcase.EX_RUN_ERROR)
+ self.assertEqual(testcase.clean(), None)
+
+ @mock.patch('os_client_config.get_config', side_effect=Exception)
+ def test_init1(self, *args):
+ self._test_exc_init()
+ args[0].assert_called_once_with()
+
+ @mock.patch('os_client_config.get_config')
+ @mock.patch('shade.OpenStackCloud', side_effect=Exception)
+ def test_init2(self, *args):
+ self._test_exc_init()
+ args[0].assert_called_once_with(cloud_config=mock.ANY)
+ args[1].assert_called_once_with()
+
+ @mock.patch('os_client_config.get_config')
+ @mock.patch('shade.OpenStackCloud')
+ def test_case_name(self, *args):
+ testcase = vmtp.Vmtp(case_name="foo")
+ self.assertEqual(testcase.case_name, "foo")
+ args[0].assert_called_once_with(cloud_config=mock.ANY)
+ args[1].assert_called_once_with()
+
+
+class VmtpTesting(unittest.TestCase):
+
+ def setUp(self):
+ with mock.patch('os_client_config.get_config'), \
+ mock.patch('shade.OpenStackCloud'):
+ self.testcase = vmtp.Vmtp()
+ self.testcase.cloud = mock.Mock()
+ self.testcase.cloud.create_keypair.return_value = munch.Munch(
+ private_key="priv", public_key="pub", id="id")
+
+ @mock.patch('six.moves.builtins.open')
+ def test_generate_keys1(self, *args):
+ self.testcase.generate_keys()
+ self.testcase.cloud.create_keypair.assert_called_once_with(
+ f'vmtp_{self.testcase.guid}')
+ self.testcase.cloud.delete_keypair.assert_called_once_with('id')
+ calls = [mock.call(
+ self.testcase.privkey_filename, 'w', encoding='utf-8'),
+ mock.call(
+ self.testcase.pubkey_filename, 'w', encoding='utf-8')]
+ args[0].assert_has_calls(calls, any_order=True)
+
+ @mock.patch('six.moves.builtins.open')
+ def test_generate_keys2(self, *args):
+ with mock.patch.object(
+ self.testcase.cloud, "create_keypair",
+ side_effect=shade.OpenStackCloudException(None)) as mock_obj, \
+ self.assertRaises(shade.OpenStackCloudException):
+ self.testcase.generate_keys()
+ mock_obj.assert_called_once_with(f'vmtp_{self.testcase.guid}')
+ args[0].assert_not_called()
+
+
+if __name__ == "__main__":
+ logging.disable(logging.CRITICAL)
+ unittest.main(verbosity=2)
diff --git a/functest/tests/unit/openstack/vping/test_vping.py b/functest/tests/unit/openstack/vping/test_vping.py
deleted file mode 100644
index 3aaa4594a..000000000
--- a/functest/tests/unit/openstack/vping/test_vping.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2017 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
-
-# pylint: disable=missing-docstring
-
-import logging
-import unittest
-
-import mock
-from snaps.config.keypair import KeypairConfig
-from snaps.config.network import NetworkConfig, PortConfig, SubnetConfig
-from snaps.config.router import RouterConfig
-from snaps.config.security_group import SecurityGroupConfig
-from snaps.config.vm_inst import VmInstanceConfig
-from snaps.openstack.create_image import OpenStackImage
-from snaps.openstack.create_instance import OpenStackVmInstance
-from snaps.openstack.create_keypairs import OpenStackKeypair
-from snaps.openstack.create_network import OpenStackNetwork
-from snaps.openstack.create_router import OpenStackRouter
-from snaps.openstack.create_security_group import OpenStackSecurityGroup
-from snaps.openstack.os_credentials import OSCreds
-from xtesting.core import testcase
-
-from functest.opnfv_tests.openstack.vping import vping_userdata, vping_ssh
-from functest.utils import env
-
-
-class VPingUserdataTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.vping_userdata = vping_userdata.VPingUserdata(
- os_creds=self.os_creds)
-
- @mock.patch('snaps.openstack.utils.deploy_utils.create_vm_instance')
- @mock.patch('os.path.exists', return_value=True)
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_client')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_project')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create',
- return_value=None)
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'get_port_ip', return_value='10.0.0.1')
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'vm_active', return_value=True)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='foo')
- def test_vping_userdata(self, *args):
- # pylint: disable=unused-argument
- with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=OpenStackImage(self.os_creds, None)), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=OpenStackNetwork(
- self.os_creds, NetworkConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_router',
- return_value=OpenStackRouter(
- self.os_creds, RouterConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.'
- 'create_vm_instance',
- return_value=OpenStackVmInstance(
- self.os_creds,
- VmInstanceConfig(
- name='foo', flavor='bar',
- port_settings=[PortConfig(
- name='foo', network_name='bar')]),
- None)), \
- mock.patch('snaps.openstack.create_instance.'
- 'OpenStackVmInstance.get_console_output',
- return_value='vPing OK'):
- self.assertEquals(
- testcase.TestCase.EX_OK, self.vping_userdata.run())
-
-
-class VPingSSHTesting(unittest.TestCase):
- """
- Ensures the VPingUserdata class can run in Functest. This test does not
- actually connect with an OpenStack pod.
- """
-
- def setUp(self):
- self.os_creds = OSCreds(
- username='user', password='pass',
- auth_url='http://foo.com:5000/v3', project_name='bar')
-
- self.vping_ssh = vping_ssh.VPingSSH(
- os_creds=self.os_creds)
-
- @mock.patch('snaps.openstack.utils.deploy_utils.create_vm_instance')
- @mock.patch('os.path.exists', return_value=True)
- @mock.patch('snaps.openstack.utils.keystone_utils.keystone_client')
- @mock.patch('snaps.openstack.utils.keystone_utils.get_project')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create',
- return_value=None)
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'get_port_ip', return_value='10.0.0.1')
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'vm_active', return_value=True)
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'vm_ssh_active', return_value=True)
- @mock.patch('snaps.openstack.create_instance.OpenStackVmInstance.'
- 'ssh_client', return_value=True)
- @mock.patch('scp.SCPClient')
- @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.'
- 'VPingSSH._transfer_ping_script', return_value=True)
- @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.'
- 'VPingSSH._do_vping_ssh', return_value=testcase.TestCase.EX_OK)
- @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'get_ext_net_name', return_value='foo')
- def test_vping_ssh(self, *args):
- # pylint: disable=unused-argument
- os_vm_inst = mock.MagicMock(name='get_console_output')
- os_vm_inst.get_console_output.return_value = 'vPing OK'
- ssh_client = mock.MagicMock(name='get_transport')
- ssh_client.get_transport.return_value = None
- scp_client = mock.MagicMock(name='put')
- scp_client.put.return_value = None
-
- subnet_config = SubnetConfig(
- name='bar',
- cidr='10.0.0.1/24',
- dns_nameservers=[env.get('NAMESERVER')])
-
- with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
- return_value=OpenStackImage(self.os_creds, None)), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_network',
- return_value=OpenStackNetwork(
- self.os_creds,
- NetworkConfig(
- name='foo',
- subnet_settings=[subnet_config]))), \
- mock.patch('snaps.openstack.utils.deploy_utils.'
- 'create_vm_instance',
- return_value=OpenStackVmInstance(
- self.os_creds,
- VmInstanceConfig(
- name='foo', flavor='bar',
- port_settings=[PortConfig(
- name='foo', network_name='bar')]),
- None)), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_keypair',
- return_value=OpenStackKeypair(
- self.os_creds, KeypairConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.create_router',
- return_value=OpenStackRouter(
- self.os_creds, RouterConfig(name='foo'))), \
- mock.patch('snaps.openstack.utils.deploy_utils.'
- 'create_security_group',
- return_value=OpenStackSecurityGroup(
- self.os_creds,
- SecurityGroupConfig(name='foo'))), \
- mock.patch('snaps.openstack.create_instance.'
- 'OpenStackVmInstance.'
- 'get_vm_inst', return_value=os_vm_inst), \
- mock.patch('snaps.openstack.create_instance.'
- 'OpenStackVmInstance.'
- 'ssh_client', return_value=ssh_client):
- self.assertEquals(testcase.TestCase.EX_OK, self.vping_ssh.run())
-
-
-if __name__ == "__main__":
- logging.disable(logging.CRITICAL)
- unittest.main(verbosity=2)
diff --git a/functest/tests/unit/openstack/vping/test_vping_ssh.py b/functest/tests/unit/openstack/vping/test_vping_ssh.py
new file mode 100644
index 000000000..a07148aab
--- /dev/null
+++ b/functest/tests/unit/openstack/vping/test_vping_ssh.py
@@ -0,0 +1,147 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018 Orange 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
+
+# pylint: disable=missing-docstring
+
+import logging
+import unittest
+
+from paramiko import ssh_exception
+import mock
+import munch
+import shade
+
+from functest.opnfv_tests.openstack.vping import vping_ssh
+from functest.utils import config
+
+
+class VpingSSHTesting(unittest.TestCase):
+
+ def setUp(self):
+ with mock.patch('functest.core.singlevm.SingleVm2.__init__'):
+ self.vping = vping_ssh.VPingSSH()
+ self.vping.cloud = mock.Mock()
+ self.vping.case_name = 'vping'
+ self.vping.guid = '1'
+
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare',
+ side_effect=Exception)
+ def test_prepare_exc1(self, *args):
+ with self.assertRaises(Exception):
+ self.vping.prepare()
+ args[0].assert_called_once_with()
+
+ @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.VPingSSH.'
+ 'boot_vm',
+ side_effect=Exception)
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare')
+ def test_prepare_exc2(self, *args):
+ self.vping.sec = munch.Munch(id='foo')
+ with self.assertRaises(Exception):
+ self.vping.prepare()
+ args[0].assert_called_once_with()
+ args[1].assert_called_once_with(
+ f'{self.vping.case_name}-vm2_{self.vping.guid}',
+ security_groups=[self.vping.sec.id])
+
+ @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.VPingSSH.'
+ 'boot_vm')
+ @mock.patch('functest.core.singlevm.SingleVm2.prepare')
+ def test_prepare(self, *args):
+ self.vping.sec = munch.Munch(id='foo')
+ self.vping.prepare()
+ args[0].assert_called_once_with()
+ args[1].assert_called_once_with(
+ f'{self.vping.case_name}-vm2_{self.vping.guid}',
+ security_groups=[self.vping.sec.id])
+
+ @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.VPingSSH.'
+ 'check_regex_in_console', return_value=True)
+ def test_execute_exc(self, *args):
+ self.vping.vm2 = munch.Munch(private_v4='127.0.0.1', name='foo')
+ self.vping.ssh = mock.Mock()
+ self.vping.ssh.exec_command.side_effect = ssh_exception.SSHException
+ with self.assertRaises(ssh_exception.SSHException):
+ self.vping.execute()
+ self.vping.ssh.exec_command.assert_called_once_with(
+ f'ping -c 1 {self.vping.vm2.private_v4}')
+ args[0].assert_called_once_with('foo')
+
+ @mock.patch('functest.opnfv_tests.openstack.vping.vping_ssh.VPingSSH.'
+ 'check_regex_in_console', return_value=False)
+ def test_execute_exc2(self, *args):
+ self.vping.vm2 = munch.Munch(private_v4='127.0.0.1', name='foo')
+ self.vping.ssh = mock.Mock()
+ self.vping.execute()
+ self.vping.ssh.exec_command.assert_not_called()
+ args[0].assert_called_once_with('foo')
+
+ def _test_execute(self, ret=0):
+ self.vping.vm2 = munch.Munch(private_v4='127.0.0.1', name='foo')
+ self.vping.ssh = mock.Mock()
+ stdout = mock.Mock()
+ stdout.channel.recv_exit_status.return_value = ret
+ self.vping.ssh.exec_command.return_value = (None, stdout, mock.Mock())
+ with mock.patch(
+ 'functest.opnfv_tests.openstack.vping.vping_ssh.VPingSSH.'
+ 'check_regex_in_console', return_value=True) as mock_check:
+ self.assertEqual(self.vping.execute(), ret)
+ mock_check.assert_called_once_with('foo')
+ self.vping.ssh.exec_command.assert_called_once_with(
+ f'ping -c 1 {self.vping.vm2.private_v4}')
+
+ def test_execute1(self):
+ self._test_execute()
+
+ def test_execute2(self):
+ self._test_execute(1)
+
+ def test_clean_exc1(self):
+ self.vping.cloud = None
+ with self.assertRaises(AssertionError):
+ self.vping.clean()
+
+ def test_clean_exc2(self):
+ self.vping.vm2 = munch.Munch(id='vm2')
+ mdelete_server = self.vping.cloud.delete_server
+ mdelete_server.side_effect = shade.OpenStackCloudException(None)
+ with self.assertRaises(shade.OpenStackCloudException):
+ self.vping.clean()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean',
+ side_effect=Exception)
+ def test_clean_exc3(self, *args):
+ self.vping.vm2 = munch.Munch(id='vm2')
+ with self.assertRaises(Exception):
+ self.vping.clean()
+ self.vping.cloud.delete_server.assert_called_once_with(
+ self.vping.vm2, wait=True,
+ timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+ args[0].assert_called_once_with()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean')
+ def test_clean1(self, *args):
+ self.vping.vm2 = None
+ self.vping.clean()
+ self.vping.cloud.delete_server.assert_not_called()
+ args[0].assert_called_once_with()
+
+ @mock.patch('functest.core.singlevm.SingleVm2.clean')
+ def test_clean2(self, *args):
+ self.vping.vm2 = munch.Munch(id='vm2')
+ self.vping.clean()
+ self.vping.cloud.delete_server.assert_called_once_with(
+ self.vping.vm2, wait=True,
+ timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+ args[0].assert_called_once_with()
+
+
+if __name__ == '__main__':
+ logging.disable(logging.CRITICAL)
+ unittest.main(verbosity=2)
diff --git a/functest/tests/unit/utils/test_functest_utils.py b/functest/tests/unit/utils/test_functest_utils.py
index d35ed8ced..4b642ff9d 100644
--- a/functest/tests/unit/utils/test_functest_utils.py
+++ b/functest/tests/unit/utils/test_functest_utils.py
@@ -15,12 +15,13 @@ import unittest
import mock
import pkg_resources
+import six
from functest.utils import functest_utils
class FunctestUtilsTesting(unittest.TestCase):
- # pylint: disable=too-many-instance-attributes
+ # pylint: disable=too-many-instance-attributes,too-many-public-methods
readline = 0
test_ip = ['10.1.23.4', '10.1.14.15', '10.1.16.15']
@@ -81,7 +82,7 @@ class FunctestUtilsTesting(unittest.TestCase):
def _get_environ(self, var, *args): # pylint: disable=unused-argument
if var == 'INSTALLER_TYPE':
return self.installer
- elif var == 'DEPLOY_SCENARIO':
+ if var == 'DEPLOY_SCENARIO':
return self.scenario
return var
@@ -97,27 +98,20 @@ class FunctestUtilsTesting(unittest.TestCase):
as mock_subproc_open, \
mock.patch('six.moves.builtins.open',
mock.mock_open()) as mopen:
-
- FunctestUtilsTesting.readline = 0
-
- mock_obj = mock.Mock()
- attrs = {'readline.side_effect': self.cmd_readline()}
- mock_obj.configure_mock(**attrs)
-
- mock_obj2 = mock.Mock()
- attrs = {'stdout': mock_obj, 'wait.return_value': 1}
- mock_obj2.configure_mock(**attrs)
-
- mock_subproc_open.return_value = mock_obj2
-
- resp = functest_utils.execute_command(self.cmd, info=True,
- error_msg=self.error_msg,
- verbose=True,
- output_file=self.output_file)
+ stream = six.BytesIO()
+ stream.write(self.cmd_readline().encode("utf-8"))
+ attrs = {
+ 'return_value.__enter__.return_value.stdout': stream,
+ 'return_value.__enter__.return_value.wait.return_value': 1}
+ mock_subproc_open.configure_mock(**attrs)
+ resp = functest_utils.execute_command(
+ self.cmd, info=True, error_msg=self.error_msg, verbose=True,
+ output_file=self.output_file)
self.assertEqual(resp, 1)
- msg_exec = ("Executing command: '%s'" % self.cmd)
+ msg_exec = f"Executing command: '{self.cmd}'"
mock_logger_info.assert_called_once_with(msg_exec)
- mopen.assert_called_once_with(self.output_file, "w")
+ mopen.assert_called_once_with(
+ self.output_file, "w", encoding='utf-8')
mock_logger_error.assert_called_once_with(self.error_msg)
@mock.patch('functest.utils.functest_utils.LOGGER.info')
@@ -126,50 +120,35 @@ class FunctestUtilsTesting(unittest.TestCase):
as mock_subproc_open, \
mock.patch('six.moves.builtins.open',
mock.mock_open()) as mopen:
-
- FunctestUtilsTesting.readline = 0
-
- mock_obj = mock.Mock()
- attrs = {'readline.side_effect': self.cmd_readline()}
- mock_obj.configure_mock(**attrs)
-
- mock_obj2 = mock.Mock()
- attrs = {'stdout': mock_obj, 'wait.return_value': 0}
- mock_obj2.configure_mock(**attrs)
-
- mock_subproc_open.return_value = mock_obj2
-
- resp = functest_utils.execute_command(self.cmd, info=True,
- error_msg=self.error_msg,
- verbose=True,
- output_file=self.output_file)
+ stream = six.BytesIO()
+ stream.write(self.cmd_readline().encode("utf-8"))
+ attrs = {
+ 'return_value.__enter__.return_value.stdout': stream,
+ 'return_value.__enter__.return_value.wait.return_value': 0}
+ mock_subproc_open.configure_mock(**attrs)
+ resp = functest_utils.execute_command(
+ self.cmd, info=True, error_msg=self.error_msg, verbose=True,
+ output_file=self.output_file)
self.assertEqual(resp, 0)
- msg_exec = ("Executing command: '%s'" % self.cmd)
+ msg_exec = (f"Executing command: '{self.cmd}'")
mock_logger_info.assert_called_once_with(msg_exec)
- mopen.assert_called_once_with(self.output_file, "w")
+ mopen.assert_called_once_with(
+ self.output_file, "w", encoding='utf-8')
@mock.patch('sys.stdout')
def test_exec_cmd_args_missing_ok(self, stdout=None):
# pylint: disable=unused-argument
with mock.patch('functest.utils.functest_utils.subprocess.Popen') \
as mock_subproc_open:
-
- FunctestUtilsTesting.readline = 2
-
- mock_obj = mock.Mock()
- attrs = {'readline.side_effect': self.cmd_readline()}
- mock_obj.configure_mock(**attrs)
-
- mock_obj2 = mock.Mock()
- attrs = {'stdout': mock_obj, 'wait.return_value': 0}
- mock_obj2.configure_mock(**attrs)
-
- mock_subproc_open.return_value = mock_obj2
-
- resp = functest_utils.execute_command(self.cmd, info=False,
- error_msg="",
- verbose=False,
- output_file=None)
+ stream = six.BytesIO()
+ stream.write(self.cmd_readline().encode("utf-8"))
+ attrs = {
+ 'return_value.__enter__.return_value.stdout': stream,
+ 'return_value.__enter__.return_value.wait.return_value': 0}
+ mock_subproc_open.configure_mock(**attrs)
+ resp = functest_utils.execute_command(
+ self.cmd, info=False, error_msg="", verbose=False,
+ output_file=None)
self.assertEqual(resp, 0)
@mock.patch('sys.stdout')
@@ -177,22 +156,16 @@ class FunctestUtilsTesting(unittest.TestCase):
# pylint: disable=unused-argument
with mock.patch('functest.utils.functest_utils.subprocess.Popen') \
as mock_subproc_open:
-
- FunctestUtilsTesting.readline = 2
- mock_obj = mock.Mock()
- attrs = {'readline.side_effect': self.cmd_readline()}
- mock_obj.configure_mock(**attrs)
-
- mock_obj2 = mock.Mock()
- attrs = {'stdout': mock_obj, 'wait.return_value': 1}
- mock_obj2.configure_mock(**attrs)
-
- mock_subproc_open.return_value = mock_obj2
-
- resp = functest_utils.execute_command(self.cmd, info=False,
- error_msg="",
- verbose=False,
- output_file=None)
+ attrs = {}
+ stream = six.BytesIO()
+ stream.write(self.cmd_readline().encode("utf-8"))
+ attrs = {
+ 'return_value.__enter__.return_value.stdout': stream,
+ 'return_value.__enter__.return_value.wait.return_value': 1}
+ mock_subproc_open.configure_mock(**attrs)
+ resp = functest_utils.execute_command(
+ self.cmd, info=False, error_msg="", verbose=False,
+ output_file=None)
self.assertEqual(resp, 1)
def test_get_param_from_yaml_failed(self):
@@ -204,9 +177,9 @@ class FunctestUtilsTesting(unittest.TestCase):
mock_yaml.return_value = self.file_yaml
functest_utils.get_parameter_from_yaml(self.parameter,
self.test_file)
- self.assertTrue(("The parameter %s is not"
- " defined in config_functest.yaml" %
- self.parameter) in excep.exception)
+ self.assertTrue((f"The parameter {self.parameter} is not"
+ " defined in config_functest.yaml"
+ ) in excep.exception)
def test_get_param_from_yaml_def(self):
with mock.patch('six.moves.builtins.open', mock.mock_open()), \
@@ -218,6 +191,218 @@ class FunctestUtilsTesting(unittest.TestCase):
self.test_file),
'test_image_name')
+ def test_nova_version_exc1(self):
+ # pylint: disable=protected-access
+ cloud = mock.Mock()
+ cloud._compute_client.request.return_value = None
+ self.assertEqual(functest_utils.get_nova_version(cloud), None)
+ cloud._compute_client.request.assert_called_once_with('/', 'GET')
+
+ def test_nova_version_exc2(self):
+ # pylint: disable=protected-access
+ cloud = mock.Mock()
+ cloud._compute_client.request.return_value = {"version": None}
+ self.assertEqual(functest_utils.get_nova_version(cloud), None)
+ cloud._compute_client.request.assert_called_once_with('/', 'GET')
+
+ def test_nova_version_exc3(self):
+ # pylint: disable=protected-access
+ cloud = mock.Mock()
+ cloud._compute_client.request.return_value = {
+ "version": {"version": None}}
+ self.assertEqual(functest_utils.get_nova_version(cloud), None)
+ cloud._compute_client.request.assert_called_once_with('/', 'GET')
+
+ def test_nova_version_exc4(self):
+ # pylint: disable=protected-access
+ cloud = mock.Mock()
+ cloud._compute_client.request.return_value = {
+ "version": {"version": "a.b"}}
+ self.assertEqual(functest_utils.get_nova_version(cloud), None)
+ cloud._compute_client.request.assert_called_once_with('/', 'GET')
+
+ def test_nova_version(self):
+ # pylint: disable=protected-access
+ cloud = mock.Mock()
+ cloud._compute_client.request.return_value = {
+ "version": {"version": "2.1"}}
+ self.assertEqual(functest_utils.get_nova_version(cloud), (2, 1))
+ cloud._compute_client.request.assert_called_once_with('/', 'GET')
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 61))
+ def test_openstack_version1(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Rocky")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 60))
+ def test_openstack_version2(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Queens")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 43))
+ def test_openstack_version3(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Pike")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 39))
+ def test_openstack_version4(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Ocata")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 26))
+ def test_openstack_version5(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Newton")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 13))
+ def test_openstack_version6(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Mitaka")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 4))
+ def test_openstack_version7(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(
+ functest_utils.get_openstack_version(cloud), "Liberty")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 1))
+ def test_openstack_version8(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(cloud), "Kilo")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(1, 9))
+ def test_openstack_version9(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(
+ functest_utils.get_openstack_version(cloud), "Unknown")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(3, 1))
+ def test_openstack_version10(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(
+ functest_utils.get_openstack_version(cloud), "Master")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 66))
+ def test_openstack_version11(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Stein")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 78))
+ def test_openstack_version12(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Train")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 87))
+ def test_openstack_version13(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Ussuri")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 88))
+ def test_openstack_version14(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Wallaby")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 89))
+ def test_openstack_version15(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Xena")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=(2, 92))
+ def test_openstack_version16(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(functest_utils.get_openstack_version(
+ cloud), "Zed")
+ args[0].assert_called_once_with(cloud)
+
+ @mock.patch('functest.utils.functest_utils.get_nova_version',
+ return_value=None)
+ def test_openstack_version_exc(self, *args):
+ cloud = mock.Mock()
+ self.assertEqual(
+ functest_utils.get_openstack_version(cloud), "Unknown")
+ args[0].assert_called_once_with(cloud)
+
+ def test_convert_dict_to_ini(self):
+ self.assertEqual(
+ functest_utils.convert_dict_to_ini({}), "")
+ self.assertEqual(
+ functest_utils.convert_dict_to_ini({"a": "b"}), "a:b")
+ value = functest_utils.convert_dict_to_ini({"a": "b", "c": "d"})
+ self.assertTrue(value in ('a:b,c:d', 'c:d,a:b'))
+ with self.assertRaises(AssertionError):
+ functest_utils.convert_list_to_ini("")
+
+ def test_convert_list_to_ini(self):
+ self.assertEqual(
+ functest_utils.convert_list_to_ini([]), "")
+ self.assertEqual(
+ functest_utils.convert_list_to_ini(["a"]), "a")
+ self.assertEqual(
+ functest_utils.convert_list_to_ini(["a", "b"]), "a,b")
+ with self.assertRaises(AssertionError):
+ functest_utils.convert_list_to_ini("")
+
+ def test_convert_ini_to_dict(self):
+ self.assertEqual(
+ functest_utils.convert_ini_to_dict(""), {})
+ self.assertEqual(
+ functest_utils.convert_ini_to_dict("a:b"), {"a": "b"})
+ self.assertEqual(
+ functest_utils.convert_ini_to_dict(
+ "a:b,c:d"), {"a": "b", "c": "d"})
+ self.assertEqual(
+ functest_utils.convert_ini_to_dict(
+ "a:b:c,d:e:f"), {"a:b": "c", "d:e": "f"})
+ with self.assertRaises(AssertionError):
+ functest_utils.convert_list_to_ini({})
+
+ def test_convert_ini_to_list(self):
+ self.assertEqual(
+ functest_utils.convert_ini_to_list(""), [])
+ self.assertEqual(
+ functest_utils.convert_ini_to_list("a"), ["a"])
+ self.assertEqual(
+ functest_utils.convert_ini_to_list("a,b"), ["a", "b"])
+ with self.assertRaises(AssertionError):
+ functest_utils.convert_ini_to_list([])
+
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
diff --git a/functest/tests/unit/vnf/epc/test_juju_epc.py b/functest/tests/unit/vnf/epc/test_juju_epc.py
index 6b4137069..a72c61586 100644
--- a/functest/tests/unit/vnf/epc/test_juju_epc.py
+++ b/functest/tests/unit/vnf/epc/test_juju_epc.py
@@ -62,7 +62,6 @@ class JujuEpcTesting(unittest.TestCase):
'test_vnf': {}}
@unittest.skip("It must be fixed. Please see JIRA FUNCTEST-915")
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
@mock.patch('os.system')
def test_prepare_default(self, *args):
""" Unittest for Prepare testcase """
diff --git a/functest/tests/unit/vnf/ims/test_ims_base.py b/functest/tests/unit/vnf/ims/test_clearwater.py
index 97654748a..f590a2857 100644
--- a/functest/tests/unit/vnf/ims/test_ims_base.py
+++ b/functest/tests/unit/vnf/ims/test_clearwater.py
@@ -12,15 +12,16 @@ import unittest
import mock
-from functest.opnfv_tests.vnf.ims import clearwater_ims_base as ims_base
+from functest.opnfv_tests.vnf.ims import clearwater
-class ClearwaterOnBoardingBaseTesting(unittest.TestCase):
+class ClearwaterTesting(unittest.TestCase):
def setUp(self):
with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
'os.makedirs'):
- self.ims_vnf = ims_base.ClearwaterOnBoardingBase()
+ self.ims_vnf = clearwater.ClearwaterTesting(
+ "foo", "0.0.0.0", "0.0.0.0")
self.mock_post = mock.Mock()
attrs = {'status_code': 201,
@@ -37,6 +38,7 @@ class ClearwaterOnBoardingBaseTesting(unittest.TestCase):
'cookies': ""}
self.mock_post_200.configure_mock(**attrs)
+
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
unittest.main(verbosity=2)
diff --git a/functest/tests/unit/vnf/ims/test_cloudify_ims.py b/functest/tests/unit/vnf/ims/test_cloudify_ims.py
index 79069a5de..c84adf0ff 100644
--- a/functest/tests/unit/vnf/ims/test_cloudify_ims.py
+++ b/functest/tests/unit/vnf/ims/test_cloudify_ims.py
@@ -10,56 +10,9 @@
import logging
import unittest
-import mock
-
-from functest.core import vnf
-from functest.opnfv_tests.vnf.ims import cloudify_ims
-
class CloudifyImsTesting(unittest.TestCase):
-
- def setUp(self):
-
- self.tenant = 'cloudify_ims'
- self.creds = {'username': 'user',
- 'password': 'pwd'}
- self.orchestrator = {'name': 'cloudify',
- 'version': '4.0',
- 'object': 'foo',
- 'requirements': {'flavor': {'name': 'm1.medium',
- 'ram_min': 4096},
- 'os_image': 'manager_4.0'}}
-
- self.vnf = {'name': 'clearwater',
- 'descriptor': {'version': '108',
- 'file_name': 'openstack-blueprint.yaml',
- 'name': 'clearwater-opnfv',
- 'url': 'https://foo',
- 'requirements': {'flavor':
- {'name': 'm1.medium',
- 'ram_min': 2048}}}}
-
- with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
- 'os.makedirs'), \
- mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
- 'get_config', return_value={
- 'tenant_images': 'foo',
- 'orchestrator': self.orchestrator,
- 'vnf': self.vnf,
- 'vnf_test_suite': '',
- 'version': 'whatever'}):
-
- self.ims_vnf = cloudify_ims.CloudifyIms()
-
- self.images = {'image1': 'url1',
- 'image2': 'url2'}
- self.details = {'orchestrator': {'status': 'PASS', 'duration': 120},
- 'vnf': {},
- 'test_vnf': {}}
-
- def test_prepare_missing_param(self):
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
+ pass
if __name__ == "__main__":
diff --git a/functest/tests/unit/vnf/router/test_cloudify_vrouter.py b/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
index db03d716c..b3f83e946 100644
--- a/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
+++ b/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
@@ -12,61 +12,10 @@
import logging
import unittest
-import mock
-
-from functest.core import vnf
-from functest.opnfv_tests.vnf.router import cloudify_vrouter
-
class CloudifyVrouterTesting(unittest.TestCase):
- def setUp(self):
-
- self.tenant = 'cloudify_vrouter'
- self.creds = {'username': 'user',
- 'password': 'pwd'}
- self.orchestrator = {'name': 'cloudify',
- 'version': '4.0',
- 'object': 'foo',
- 'requirements': {'flavor': {'name': 'm1.medium',
- 'ram_min': 4096},
- 'os_image': 'manager_4.0'}}
-
- self.vnf = {'name': 'vrouter',
- 'descriptor': {'version': '100',
- 'file_name': 'function-test-' +
- 'openstack-blueprint.yaml',
- 'name': 'vrouter-opnfv',
- 'url': 'https://foo',
- 'requirements': {'flavor':
- {'name': 'm1.medium',
- 'ram_min': 2048}}}}
-
- # pylint: disable=bad-continuation
- with mock.patch(
- 'functest.opnfv_tests.vnf.router.cloudify_vrouter.Utilvnf'), \
- mock.patch('functest.opnfv_tests.vnf.router.'
- 'cloudify_vrouter.vrouter_base.Utilvnf'), \
- mock.patch('os.makedirs'), \
- mock.patch(
- 'functest.utils.functest_utils.get_parameter_from_yaml',
- return_value={
- 'tenant_images': 'foo',
- 'orchestrator': self.orchestrator,
- 'vnf': self.vnf, 'vnf_test_suite': '',
- 'version': 'whatever'}):
-
- self.router_vnf = cloudify_vrouter.CloudifyVrouter()
-
- self.images = {'image1': 'url1',
- 'image2': 'url2'}
- self.details = {'orchestrator': {'status': 'PASS', 'duration': 120},
- 'vnf': {},
- 'test_vnf': {}}
-
- def test_prepare_missing_param(self):
- with self.assertRaises(vnf.VnfPreparationException):
- self.router_vnf.prepare()
+ pass
if __name__ == "__main__":
diff --git a/functest/tests/unit/vnf/router/test_vrouter_base.py b/functest/tests/unit/vnf/router/test_vrouter_base.py
index 1851b201a..330093658 100644
--- a/functest/tests/unit/vnf/router/test_vrouter_base.py
+++ b/functest/tests/unit/vnf/router/test_vrouter_base.py
@@ -12,17 +12,9 @@
import logging
import unittest
-import mock
-
-from functest.opnfv_tests.vnf.router import vrouter_base
-
class VrouterOnBoardingBaseTesting(unittest.TestCase):
-
- def setUp(self):
- with mock.patch('functest.opnfv_tests.vnf.router.cloudify_vrouter.'
- 'os.makedirs'):
- self.vrouter_vnf = vrouter_base.VrouterOnBoardingBase()
+ pass
if __name__ == "__main__":