summaryrefslogtreecommitdiffstats
path: root/dovetail/tests
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail/tests')
-rw-r--r--dovetail/tests/unit/cli/commands/test_cli_testcase.py6
-rw-r--r--dovetail/tests/unit/cli/test_cli_base.py8
-rw-r--r--dovetail/tests/unit/cmd_config.yml17
-rw-r--r--dovetail/tests/unit/test_container.py387
-rw-r--r--dovetail/tests/unit/test_parser.py10
-rw-r--r--dovetail/tests/unit/test_report.py840
-rw-r--r--dovetail/tests/unit/test_run.py136
-rw-r--r--dovetail/tests/unit/test_test_runner.py233
-rw-r--r--dovetail/tests/unit/test_testcase.py203
-rw-r--r--dovetail/tests/unit/test_testcase.yaml11
-rw-r--r--dovetail/tests/unit/utils/test_dovetail_config.py2
-rw-r--r--dovetail/tests/unit/utils/test_dovetail_logger.py8
-rw-r--r--dovetail/tests/unit/utils/test_dovetail_utils.py219
13 files changed, 1273 insertions, 807 deletions
diff --git a/dovetail/tests/unit/cli/commands/test_cli_testcase.py b/dovetail/tests/unit/cli/commands/test_cli_testcase.py
index 2a1feb64..324db640 100644
--- a/dovetail/tests/unit/cli/commands/test_cli_testcase.py
+++ b/dovetail/tests/unit/cli/commands/test_cli_testcase.py
@@ -34,7 +34,7 @@ class CliTestcaseTesting(unittest.TestCase):
testcase.run(options)
mock_path.dirname.assert_called_once()
- cmd = 'python %s/run.py %s' % (repo_dir, options)
+ cmd = 'python3 %s/run.py %s' % (repo_dir, options)
mock_utils.exec_cmd.assert_called_once_with(
cmd, exit_on_error=True, exec_msg_on=False, info=True)
@@ -60,7 +60,7 @@ class CliTestcaseTesting(unittest.TestCase):
mock_click.echo.assert_called_once_with(
'testcase %s not exist or not supported' % testcase_name)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.cli.commands.cli_testcase.constants')
@patch('os.path')
@patch('dovetail.cli.commands.cli_testcase.click')
@@ -85,7 +85,7 @@ class CliTestcaseTesting(unittest.TestCase):
mock_path.isfile.assert_called_once_with(testcase_whole_path)
mock_click.echo.assert_called_once_with(file_data)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.cli.commands.cli_testcase.constants')
@patch('os.path')
@patch('dovetail.cli.commands.cli_testcase.click')
diff --git a/dovetail/tests/unit/cli/test_cli_base.py b/dovetail/tests/unit/cli/test_cli_base.py
index 80b7e7b3..9b06426c 100644
--- a/dovetail/tests/unit/cli/test_cli_base.py
+++ b/dovetail/tests/unit/cli/test_cli_base.py
@@ -24,7 +24,7 @@ class CliBaseTesting(unittest.TestCase):
runner = CliRunner()
result = runner.invoke(cli_base.cli, [])
- self.assertEquals(result.exit_code, 0)
+ self.assertEqual(result.exit_code, 0)
def test_testcase_list(self, mock_testcase):
testsuite = 'suite'
@@ -33,7 +33,7 @@ class CliBaseTesting(unittest.TestCase):
result = runner.invoke(cli_base.testcase_list, [testsuite])
mock_testcase.list_testsuites.assert_called_once_with(testsuite)
- self.assertEquals(result.exit_code, 0)
+ self.assertEqual(result.exit_code, 0)
def test_testcase_show(self, mock_testcase):
testcase = 'case'
@@ -42,7 +42,7 @@ class CliBaseTesting(unittest.TestCase):
result = runner.invoke(cli_base.testcase_show, [testcase])
mock_testcase.show_testcase.assert_called_once_with(testcase)
- self.assertEquals(result.exit_code, 0)
+ self.assertEqual(result.exit_code, 0)
def test_testcase_run(self, mock_testcase):
run_args = ('arga', 'argb')
@@ -52,4 +52,4 @@ class CliBaseTesting(unittest.TestCase):
expected = ' '.join(run_args)
mock_testcase.run.assert_called_once_with(expected)
- self.assertEquals(result.exit_code, 0)
+ self.assertEqual(result.exit_code, 0)
diff --git a/dovetail/tests/unit/cmd_config.yml b/dovetail/tests/unit/cmd_config.yml
index 4a1439f6..405aabce 100644
--- a/dovetail/tests/unit/cmd_config.yml
+++ b/dovetail/tests/unit/cmd_config.yml
@@ -1,3 +1,12 @@
+##############################################################################
+# Copyright (c) 2019 opnfv.
+#
+# 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
+##############################################################################
+
---
cli:
arguments:
@@ -22,3 +31,11 @@ cli:
flags:
- '--report'
is_flag: 'True'
+ opnfvci:
+ flags:
+ - '--opnfv-ci'
+ is_flag: 'True'
+ noapivalidation:
+ flags:
+ - '--no-api-validation'
+ is_flag: 'True'
diff --git a/dovetail/tests/unit/test_container.py b/dovetail/tests/unit/test_container.py
index 70e01d8e..86da9d3c 100644
--- a/dovetail/tests/unit/test_container.py
+++ b/dovetail/tests/unit/test_container.py
@@ -10,6 +10,7 @@
import unittest
from mock import patch, call, Mock
+import docker
from dovetail.container import Container
@@ -19,6 +20,7 @@ __author__ = 'Stamatis Katsaounis <mokats@intracom-telecom.com>'
class ContainerTesting(unittest.TestCase):
def setUp(self):
+ self.patcher1 = patch.object(docker, 'from_env')
testcase = patch.object(Container, 'testcase')
testcase.testcase = {'validate': {
'type': 'bottlenecks'}}
@@ -28,28 +30,13 @@ class ContainerTesting(unittest.TestCase):
val_type_obj = Mock()
val_type_obj.return_value = 'bottlenecks'
testcase.validate_type = val_type_obj
+ self.client = self.patcher1.start().return_value
self.container = Container(testcase)
self.logger = Mock()
self.container.logger = self.logger
def tearDown(self):
- pass
-
- @patch('dovetail.container.dt_cfg')
- @patch.object(Container, 'docker_copy')
- def test_set_vnftest_conf_file(self, mock_copy, mock_config):
- source_file = 'source'
- destination_file = 'destination_file'
- mock_config.dovetail_config = {
- 'vnftest': {
- 'vnftest_conf': [{
- 'src_file': source_file,
- 'dest_file': destination_file}]}}
-
- self.container.set_vnftest_conf_file()
-
- mock_copy.assert_called_once_with(
- source_file, destination_file)
+ self.patcher1.stop()
@patch('dovetail.container.dt_cfg')
@patch.object(Container, 'copy_file')
@@ -88,22 +75,6 @@ class ContainerTesting(unittest.TestCase):
mock_copy.assert_not_called()
- def test_docker_copy_error(self):
- expected = (1, 'src_path or dest_path is empty')
- result = self.container.docker_copy(None, None)
-
- self.assertEqual(expected, result)
-
- @patch('dovetail.container.dt_utils')
- def test_docker_copy(self, mock_utils):
- expected = (0, 'success')
- mock_utils.exec_cmd.return_value = expected
- result = self.container.docker_copy('source', 'dest')
-
- mock_utils.exec_cmd.assert_called_once_with(
- 'docker cp source None:dest', self.logger)
- self.assertEqual(expected, result)
-
def test_copy_file_error(self):
expected = (1, 'src_path or dest_path is empty')
result = self.container.copy_file(None, None)
@@ -126,59 +97,115 @@ class ContainerTesting(unittest.TestCase):
self.assertEqual(expected, result)
+ @patch('dovetail.container.dt_cfg')
@patch('dovetail.container.dt_utils')
- def test_exec_cmd(self, mock_utils):
+ def test_exec_cmd(self, mock_utils, mock_config):
expected = (0, 'success')
+ mock_utils.get_value_from_dict.return_value = 'shell'
+ mock_config.dovetail_config = {'bottlenecks': 'value'}
+ container_obj = Mock()
+ container_obj.exec_run.return_value = expected
+ self.container.container = container_obj
+
+ result = self.container.exec_cmd('command')
+
+ self.assertEqual(expected, result)
+
+ @patch('dovetail.container.dt_cfg')
+ @patch('dovetail.container.dt_utils')
+ @patch('sys.exit')
+ def test_exec_cmd_exception(self, mock_exit, mock_utils, mock_config):
+ mock_utils.get_value_from_dict.return_value = 'shell'
+ mock_config.dovetail_config = {'bottlenecks': 'value'}
+ container_obj = Mock()
+ response_obj = Mock()
+ response_obj.status_code = 1
+ container_obj.exec_run.side_effect = \
+ docker.errors.APIError('error', response=response_obj)
+ self.container.container = container_obj
+
+ expected = (1, 'error')
+ result = self.container.exec_cmd('command', exit_on_error=True)
+
+ self.assertEqual(expected, result)
+ mock_exit.assert_called_once_with(1)
+
+ @patch('dovetail.container.dt_cfg')
+ @patch('dovetail.container.dt_utils')
+ def test_exec_cmd_no_shell(self, mock_utils, mock_config):
+ expected = (1, 'shell is empty')
mock_utils.exec_cmd.return_value = expected
+ mock_utils.get_value_from_dict.return_value = None
+ mock_config.dovetail_config = {'bottlenecks': 'value'}
result = self.container.exec_cmd('command')
- mock_utils.exec_cmd.assert_called_once_with(
- 'sudo docker exec None /bin/bash -c "command"', self.logger, False)
self.assertEqual(expected, result)
@patch('dovetail.container.dt_cfg')
@patch('dovetail.container.dt_utils')
- @patch.object(Container, 'check_container_exist')
+ @patch.object(Container, 'get_container')
def test_clean(self, mock_check, mock_utils, mock_config):
container_name = 'container'
mock_config.dovetail_config = {'bottlenecks': 'value'}
mock_utils.get_value_from_dict.return_value = [container_name]
- mock_check.return_value = True
+ self.container.container = Mock()
+ mock_check.return_value = Mock()
self.container.clean()
mock_utils.get_value_from_dict.assert_called_once_with(
'extra_container', 'value')
mock_check.assert_called_once_with(container_name)
- mock_utils.exec_cmd.assert_has_calls([
- call('sudo docker rm -f None', self.logger),
- call('sudo docker rm -f container', self.logger)])
+ @patch('dovetail.container.dt_cfg')
@patch('dovetail.container.dt_utils')
- def test_check_container_exist_true(self, mock_utils):
+ @patch.object(Container, 'get_container')
+ def test_clean_extra_error(self, mock_check, mock_utils, mock_config):
container_name = 'container'
- cmd = ('sudo docker ps -aq -f name={}'.format(container_name))
- mock_utils.exec_cmd.return_value = (0, 'msg')
+ mock_config.dovetail_config = {'bottlenecks': 'value'}
+ mock_utils.get_value_from_dict.return_value = [container_name]
+ container_obj = Mock()
+ container_obj.remove.side_effect = docker.errors.APIError('error')
+ self.container.container = Mock()
+ mock_check.return_value = container_obj
- result = self.container.check_container_exist(container_name)
+ self.container.clean()
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
- self.assertEquals(True, result)
+ mock_utils.get_value_from_dict.assert_called_once_with(
+ 'extra_container', 'value')
+ mock_check.assert_called_once_with(container_name)
+ @patch('dovetail.container.dt_cfg')
@patch('dovetail.container.dt_utils')
- def test_check_container_exist_false(self, mock_utils):
+ def test_clean_no_extra_container(self, mock_utils, mock_config):
+ mock_utils.get_value_from_dict.return_value = None
+ container_obj = Mock()
+ container_obj.remove.side_effect = docker.errors.APIError('error')
+ self.container.container = container_obj
+ self.container.clean()
+ mock_utils.get_value_from_dict.assert_called_once()
+
+ def test_get_container_exist_true(self):
+ container_name = 'container'
+ expected = Mock()
+ self.client.containers.get.return_value = expected
+
+ result = self.container.get_container(container_name)
+
+ self.assertEqual(expected, result)
+
+ def test_get_container_none(self):
container_name = 'container'
- cmd = ('sudo docker ps -aq -f name={}'.format(container_name))
- mock_utils.exec_cmd.return_value = (1, 'msg')
+ self.client.containers.get.side_effect = \
+ docker.errors.APIError('error')
- result = self.container.check_container_exist(container_name)
+ result = self.container.get_container(container_name)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
- self.assertEquals(False, result)
+ self.assertEqual(None, result)
def test_pull_image_none(self):
result = self.container.pull_image(None)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch.object(Container, 'pull_image_only')
@patch.object(Container, 'get_image_id')
@@ -190,7 +217,7 @@ class ContainerTesting(unittest.TestCase):
mock_get.assert_called_once_with(docker_image)
mock_pull.assert_called_once_with(docker_image)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch.object(Container, 'pull_image_only')
@patch.object(Container, 'get_image_id')
@@ -206,7 +233,7 @@ class ContainerTesting(unittest.TestCase):
call(docker_image), call(docker_image)])
self.logger.error.assert_called_once_with(
'Failed to get the id of image {}.'.format(docker_image))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch.object(Container, 'pull_image_only')
@patch.object(Container, 'get_image_id')
@@ -220,7 +247,7 @@ class ContainerTesting(unittest.TestCase):
mock_pull.assert_called_once_with(docker_image)
mock_get.assert_has_calls([
call(docker_image), call(docker_image)])
- self.assertEquals(docker_image, result)
+ self.assertEqual(docker_image, result)
@patch.object(Container, 'pull_image_only')
@patch.object(Container, 'get_image_id')
@@ -236,7 +263,7 @@ class ContainerTesting(unittest.TestCase):
call(docker_image), call(docker_image)])
self.logger.debug.assert_called_once_with(
'Image {} has no changes, no need to remove.'.format(docker_image))
- self.assertEquals(docker_image, result)
+ self.assertEqual(docker_image, result)
@patch.object(Container, 'remove_image')
@patch.object(Container, 'pull_image_only')
@@ -253,101 +280,81 @@ class ContainerTesting(unittest.TestCase):
mock_get.assert_has_calls([
call(docker_image), call(docker_image)])
mock_remove.assert_called_once_with(old_obj)
- self.assertEquals(docker_image, result)
+ self.assertEqual(docker_image, result)
- @patch('dovetail.container.dt_utils')
- def test_pull_image_only(self, mock_utils):
+ def test_pull_image_only(self):
docker_image = 'image'
- mock_utils.exec_cmd.return_value = (0, 'msg')
result = self.container.pull_image_only(docker_image)
- cmd = 'sudo docker pull %s' % (docker_image)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
self.logger.debug.assert_called_once_with(
'Success to pull docker image {}!'.format(docker_image))
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
- @patch('dovetail.container.dt_utils')
- def test_pull_image_only_error(self, mock_utils):
+ def test_pull_image_only_error(self):
docker_image = 'image'
- mock_utils.exec_cmd.return_value = (1, 'error')
+ self.client.images.pull.side_effect = docker.errors.APIError('error')
result = self.container.pull_image_only(docker_image)
- cmd = 'sudo docker pull %s' % (docker_image)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
self.logger.error.assert_called_once_with(
'Failed to pull docker image {}!'.format(docker_image))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
- @patch('dovetail.container.dt_utils')
- def test_remove_image(self, mock_utils):
+ def test_remove_image(self):
image_id = 'image_id'
- mock_utils.exec_cmd.side_effect = [(1, 'error'), (0, 'msg')]
+ self.client.containers.list.side_effect = \
+ docker.errors.APIError('error')
result = self.container.remove_image(image_id)
- mock_utils.exec_cmd.assert_has_calls([
- call("sudo docker ps -aq -f 'ancestor=%s'" % (image_id),
- self.logger),
- call('sudo docker rmi %s' % (image_id), self.logger)])
self.logger.debug.assert_has_calls([
call('Remove image {}.'.format(image_id)),
call('Remove image {} successfully.'.format(image_id))])
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
- @patch('dovetail.container.dt_utils')
- def test_remove_image_ancestors(self, mock_utils):
+ def test_remove_image_ancestors(self):
image_id = 'image_id'
- mock_utils.exec_cmd.return_value = (0, 'msg')
+ self.client.containers.list.return_value = ['cont_a']
result = self.container.remove_image(image_id)
- cmd = "sudo docker ps -aq -f 'ancestor=%s'" % (image_id)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
self.logger.debug.assert_called_once_with(
'Image {} has containers, skip.'.format(image_id))
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
- @patch('dovetail.container.dt_utils')
- def test_remove_image_error(self, mock_utils):
+ def test_remove_image_error(self):
image_id = 'image_id'
- mock_utils.exec_cmd.return_value = (1, 'error')
+ self.client.containers.list.return_value = []
+ self.client.images.remove.side_effect = \
+ docker.errors.ImageNotFound('error')
result = self.container.remove_image(image_id)
- mock_utils.exec_cmd.assert_has_calls([
- call("sudo docker ps -aq -f 'ancestor=%s'" % (image_id),
- self.logger),
- call('sudo docker rmi %s' % (image_id), self.logger)])
self.logger.debug.assert_called_once_with(
'Remove image {}.'.format(image_id))
self.logger.error.assert_called_once_with(
'Failed to remove image {}.'.format(image_id))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
- @patch('dovetail.container.dt_utils')
- def test_get_image_id(self, mock_utils):
+ def test_get_image_id(self):
image_name = 'image_id'
- mock_utils.exec_cmd.return_value = (0, image_name)
+ mock_img = Mock()
+ mock_img.id = image_name
+ self.client.images.get.return_value = mock_img
result = self.container.get_image_id(image_name)
- cmd = 'sudo docker images -q %s' % (image_name)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
- self.assertEquals(image_name, result)
+ self.assertEqual(image_name, result)
- @patch('dovetail.container.dt_utils')
- def test_get_image_id_error(self, mock_utils):
+ def test_get_image_id_error(self):
image_name = 'image_id'
- mock_utils.exec_cmd.return_value = (1, 'error')
+ self.client.images.get.side_effect = \
+ docker.errors.ImageNotFound('error')
result = self.container.get_image_id(image_name)
- cmd = 'sudo docker images -q %s' % (image_name)
- mock_utils.exec_cmd.assert_called_once_with(cmd, self.logger)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.container.dt_utils')
def test_get_config(self, mock_utils):
@@ -357,7 +364,7 @@ class ContainerTesting(unittest.TestCase):
result = self.container._get_config('a', 'b', 'c')
mock_utils.get_value_from_dict.assert_called_once_with('a', 'c')
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
@patch('dovetail.container.dt_utils')
def test_get_config_none(self, mock_utils):
@@ -369,7 +376,7 @@ class ContainerTesting(unittest.TestCase):
call('a', 'c'), call('a', 'b')])
self.logger.error.assert_called_once_with(
"Couldn't find key {}.".format('a'))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.container.dt_cfg')
@patch.object(Container, '_get_config')
@@ -383,7 +390,7 @@ class ContainerTesting(unittest.TestCase):
mock_get_conf.assert_has_calls([
call('image_name', 'value', {'type': 'bottlenecks'}),
call('docker_tag', 'value', {'type': 'bottlenecks'})])
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
@patch('dovetail.container.dt_logger')
def test_create_log(self, mock_logger):
@@ -393,54 +400,7 @@ class ContainerTesting(unittest.TestCase):
self.container.create_log()
- self.assertEquals(self.logger, self.container.logger)
-
- @patch('dovetail.container.dt_cfg')
- @patch('dovetail.container.os.path')
- def test_set_vnftest_config_no_file(self, mock_path, mock_config):
- v_one = 'v_one'
- v_two = 'v_two'
- v_three = 'v_three'
- v_four = 'v_four'
- v_five = 'v_five'
- mock_path.join.return_value = '/'.join([v_two, v_three])
- mock_path.isfile.return_value = False
- mock_config.dovetail_config = {
- 'result_dir': v_one, 'config_dir': v_two,
- 'pri_key': v_three, 'vnftest': {
- 'result': {'log': v_four, 'key_path': v_five}}}
-
- expected = '-v {}:{} '.format(v_one, v_four)
- result = self.container.set_vnftest_config()
-
- mock_path.join.assert_called_once_with(v_two, v_three)
- mock_path.isfile.assert_called_once_with('/'.join([v_two, v_three]))
- self.logger.debug.assert_called_once_with(
- 'Key file {} is not found'.format('/'.join([v_two, v_three])))
- self.assertEquals(expected, result)
-
- @patch('dovetail.container.dt_cfg')
- @patch('dovetail.container.os.path')
- def test_set_vnftest_config(self, mock_path, mock_config):
- v_one = 'v_one'
- v_two = 'v_two'
- v_three = 'v_three'
- v_four = 'v_four'
- v_five = 'v_five'
- mock_path.join.return_value = '/'.join([v_two, v_three])
- mock_path.isfile.return_value = True
- mock_config.dovetail_config = {
- 'result_dir': v_one, 'config_dir': v_two,
- 'pri_key': v_three, 'vnftest': {
- 'result': {'log': v_four, 'key_path': v_five}}}
-
- expected = '-v {}:{} -v {}/{}:{} '.format(v_one, v_four, v_two,
- v_three, v_five)
- result = self.container.set_vnftest_config()
-
- mock_path.join.assert_called_once_with(v_two, v_three)
- mock_path.isfile.assert_called_once_with('/'.join([v_two, v_three]))
- self.assertEquals(expected, result)
+ self.assertEqual(self.logger, self.container.logger)
@patch('dovetail.container.dt_utils')
@patch('dovetail.container.dt_cfg')
@@ -448,109 +408,82 @@ class ContainerTesting(unittest.TestCase):
docker_image = 'docker_image'
container_id = 'container_id'
mock_utils.get_value_from_dict.side_effect = [
- 'opts', 'envs', ['volume_one', 'volume_two']]
+ {'key': 'value'}, 'shell', 'envs', ['volume_one', 'volume_two']]
+ mock_utils.get_mount_list.side_effect = [['mount', 'list'], 'success']
mock_utils.get_hosts_info.return_value = 'host_info'
- mock_utils.exec_cmd.return_value = (0, container_id)
+ container_obj = Mock()
+ container_obj.id = container_id
+ self.client.containers.run.return_value = container_obj
project_config = {}
mock_config.dovetail_config = {'bottlenecks': project_config}
expected = container_id
- result = self.container.create(docker_image)
+ result, msg = self.container.create(docker_image)
mock_utils.get_value_from_dict.assert_has_calls([
call('opts', project_config),
+ call('shell', project_config),
call('envs', project_config),
call('volumes', project_config)])
mock_utils.get_hosts_info.assert_called_once_with(self.logger)
- mock_utils.exec_cmd.assert_called_once_with(
- 'sudo docker run opts envs volume_one volume_two host_info '
- 'docker_image /bin/bash', self.logger)
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
+ self.assertEqual('Successfully to create container.', msg)
@patch('dovetail.container.dt_utils')
@patch('dovetail.container.dt_cfg')
- @patch('dovetail.container.os.getenv')
- def test_create_error(self, mock_getenv, mock_config, mock_utils):
+ def test_create_no_shell(self, mock_config, mock_utils):
docker_image = 'docker_image'
- mock_utils.get_value_from_dict.side_effect = [
- 'opts', 'envs', ['volume_one']]
- mock_getenv.side_effect = ['True', 'dovetail_home', None, 'True']
+ mock_config.dovetail_config = {'bottlenecks': 'value'}
+ mock_utils.get_value_from_dict.side_effect = ['opts', None]
mock_utils.get_hosts_info.return_value = 'host_info'
- mock_utils.check_https_enabled.return_value = True
- mock_utils.exec_cmd.return_value = (1, 'error')
- project_config = {}
- mock_config.dovetail_config = {'bottlenecks': project_config}
- result = self.container.create(docker_image)
+
+ result, msg = self.container.create(docker_image)
mock_utils.get_value_from_dict.assert_has_calls([
- call('opts', project_config),
- call('envs', project_config),
- call('volumes', project_config)])
- mock_utils.get_hosts_info.assert_called_once_with(self.logger)
- mock_utils.exec_cmd.assert_called_once_with(
- 'sudo docker run opts envs volume_one host_info '
- 'docker_image /bin/bash', self.logger)
- self.assertEquals(None, result)
+ call('opts', 'value'),
+ call('shell', 'value')])
+ self.assertEqual(None, result)
+ self.assertEqual("Lacking of key word 'shell' in config file.", msg)
@patch('dovetail.container.dt_utils')
@patch('dovetail.container.dt_cfg')
- @patch('dovetail.container.os.getenv')
- @patch.object(Container, 'set_vnftest_config')
- @patch.object(Container, 'set_vnftest_conf_file')
- def test_create_vnftest(self, mock_setvnffile, mock_setvnfconf,
- mock_getenv, mock_config, mock_utils):
+ def test_create_mounts_none(self, mock_config, mock_utils):
docker_image = 'docker_image'
- container_id = 'container_id'
+ project_config = {}
+ mock_config.dovetail_config = {'bottlenecks': project_config}
mock_utils.get_value_from_dict.side_effect = [
- 'opts', 'envs', ['volume_one']]
- mock_getenv.side_effect = ['False', 'dovetail_home', 'cacert', 'True']
- mock_setvnfconf.return_value = 'vnftest_config'
+ {'key': 'value'}, 'shell', ['envs'], ['volume_one']]
+ mock_utils.get_mount_list.side_effect = [[None, 'error']]
mock_utils.get_hosts_info.return_value = 'host_info'
- mock_utils.exec_cmd.return_value = (0, container_id)
- project_config = {}
- mock_config.dovetail_config = {'vnftest': project_config}
- expected = container_id
- self.container.valid_type = 'vnftest'
- result = self.container.create(docker_image)
- self.container.valid_type = 'bottlenecks'
+ result, msg = self.container.create(docker_image)
mock_utils.get_value_from_dict.assert_has_calls([
- call('opts', project_config),
- call('envs', project_config),
- call('volumes', project_config)])
- mock_utils.get_hosts_info.assert_called_once_with(self.logger)
- mock_setvnfconf.assert_called_once_with()
- mock_setvnffile.assert_called_once_with(container_id)
- mock_utils.exec_cmd.assert_called_once_with(
- 'sudo docker run opts envs volume_one vnftest_config host_info '
- 'docker_image /bin/bash',
- self.logger)
- self.assertEquals(expected, result)
+ call('opts', project_config), call('shell', project_config),
+ call('envs', project_config), call('volumes', project_config)])
+ self.assertEqual(None, result)
+ self.assertEqual('error', msg)
@patch('dovetail.container.dt_utils')
@patch('dovetail.container.dt_cfg')
- @patch('dovetail.container.os.getenv')
- @patch.object(Container, 'set_vnftest_config')
- def test_create_vnftest_error(self, mock_setvnfconf,
- mock_getenv, mock_config, mock_utils):
+ def test_create_error(self, mock_config, mock_utils):
docker_image = 'docker_image'
mock_utils.get_value_from_dict.side_effect = [
- 'opts', 'envs', ['volume_one']]
- mock_getenv.return_value = 'True'
- mock_setvnfconf.return_value = None
- mock_config.dovetail_config = {
- 'vnftest': 'value',
- 'build_tag': 'v_one'}
-
- self.container.valid_type = 'vnftest'
- result = self.container.create(docker_image)
- self.container.valid_type = 'bottlenecks'
+ {'key': 'value'}, 'shell', ['envs'], ['volume_one']]
+ mock_utils.get_mount_list.side_effect = [['mount', 'list'], 'success']
+ mock_utils.get_hosts_info.return_value = 'host_info'
+ mock_utils.check_https_enabled.return_value = True
+ self.client.containers.run.side_effect = \
+ docker.errors.ImageNotFound('error')
+ project_config = {}
+ mock_config.dovetail_config = {'bottlenecks': project_config}
+ result, msg = self.container.create(docker_image)
mock_utils.get_value_from_dict.assert_has_calls([
- call('opts', 'value'),
- call('envs', 'value'),
- call('volumes', 'value')])
+ call('opts', project_config),
+ call('shell', project_config),
+ call('envs', project_config),
+ call('volumes', project_config)])
mock_utils.get_hosts_info.assert_called_once_with(self.logger)
- mock_setvnfconf.assert_called_once_with()
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
+ self.assertEqual('error', str(docker.errors.ImageNotFound('error')))
diff --git a/dovetail/tests/unit/test_parser.py b/dovetail/tests/unit/test_parser.py
index acfd25cf..4f164772 100644
--- a/dovetail/tests/unit/test_parser.py
+++ b/dovetail/tests/unit/test_parser.py
@@ -39,28 +39,28 @@ class TestParser(unittest.TestCase):
def test_parser_cmd(self, mock_logger):
"""Test whether the command is correctly parsed."""
- mock_cmd = "python /functest/ci/run_tests.py "\
+ mock_cmd = "python3 /functest/ci/run_tests.py "\
"-t {{validate_testcase}} -r"
with open(os.path.join(self.test_path, 'test_testcase.yaml')) as f:
mock_testcase_yaml = yaml.safe_load(f)
MockTestcase = type('Testcase', (object,), {})
mock_testcase = MockTestcase()
- mock_testcase.testcase = mock_testcase_yaml.values()[0]
+ mock_testcase.testcase = list(mock_testcase_yaml.values())[0]
output = parser.Parser.parse_cmd(mock_cmd, mock_testcase)
- expected_output = ("python /functest/ci/run_tests.py -t "
+ expected_output = ("python3 /functest/ci/run_tests.py -t "
"tempest_smoke_serial -r")
self.assertEqual(expected_output, output)
def test_parser_cmd_fail(self, mock_logger):
"""Test whether the command is correctly parsed."""
- mock_cmd = "python /functest/ci/run_tests.py "\
+ mock_cmd = "python3 /functest/ci/run_tests.py "\
"-t {{validate_testcase}} -r"
mock_testcase_yaml = {}
MockTestcase = type('Testcase', (object,), {})
mock_testcase = MockTestcase()
mock_testcase.testcase = mock_testcase_yaml.values()
output = parser.Parser.parse_cmd(mock_cmd, mock_testcase)
- expected_output = ("python /functest/ci/run_tests.py -t "
+ expected_output = ("python3 /functest/ci/run_tests.py -t "
"None -r")
self.assertEqual(expected_output, output)
diff --git a/dovetail/tests/unit/test_report.py b/dovetail/tests/unit/test_report.py
index fa5a02e0..41d70d2f 100644
--- a/dovetail/tests/unit/test_report.py
+++ b/dovetail/tests/unit/test_report.py
@@ -8,6 +8,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
##
+import json
import os
import unittest
import yaml
@@ -33,16 +34,19 @@ class ReportTesting(unittest.TestCase):
dt_report.FunctestK8sCrawler.logger = None
dt_report.YardstickCrawler.logger = None
dt_report.BottlenecksCrawler.logger = None
- dt_report.VnftestCrawler.logger = None
+ dt_report.OnapVtpCrawler.logger = None
+ dt_report.OnapVvpCrawler.logger = None
dt_report.FunctestChecker.logger = None
dt_report.FunctestK8sChecker.logger = None
dt_report.YardstickChecker.logger = None
dt_report.BottlenecksChecker.logger = None
- dt_report.VnftestChecker.logger = None
+ dt_report.OnapVtpChecker.logger = None
+ dt_report.OnapVvpChecker.logger = None
dt_report.Report.logger = None
dt_report.Report.results = {
'functest': {}, 'yardstick': {}, 'functest-k8s': {},
- 'bottlenecks': {}, 'shell': {}, 'vnftest': {}}
+ 'bottlenecks': {}, 'shell': {}, 'onap-vtp': {},
+ 'onap-vvp': {}}
def _produce_report_initial_text(self, report_data):
report_txt = ''
@@ -62,7 +66,7 @@ class ReportTesting(unittest.TestCase):
dt_report.Report.create_log()
- self.assertEquals(getlogger_obj, dt_report.Report.logger)
+ self.assertEqual(getlogger_obj, dt_report.Report.logger)
@patch('dovetail.report.os.path')
@patch('dovetail.report.dt_cfg')
@@ -78,7 +82,7 @@ class ReportTesting(unittest.TestCase):
inner_testcase_obj = Mock()
testcase_obj.testcase = inner_testcase_obj
mock_config.dovetail_config = {'result_dir': 'result_dir'}
- mock_utils.get_value_from_dict.return_value = 'check_results_file'
+ mock_utils.get_value_from_dict.return_value = ['check_results_file']
mock_path.join.return_value = 'results_file'
mock_path.isfile.return_value = True
mock_get.return_value = 'result'
@@ -86,15 +90,15 @@ class ReportTesting(unittest.TestCase):
result = report.check_tc_result(testcase_obj)
mock_utils.get_value_from_dict.assert_called_once_with(
- 'report.check_results_file', inner_testcase_obj)
+ 'report.check_results_files', inner_testcase_obj)
mock_path.join.assert_called_once_with(
'result_dir', 'check_results_file')
mock_path.isfile.assert_called_once_with('results_file')
logger_obj.info.assert_called_once_with(
- 'Results have been stored with file results_file.')
- mock_get.assert_called_once_with(testcase_obj, 'results_file')
+ 'Results have been stored with files: [\'results_file\'].')
+ mock_get.assert_called_once_with(testcase_obj, ['results_file'])
mock_check.assert_called_once_with(testcase_obj, 'result')
- self.assertEquals('result', result)
+ self.assertEqual('result', result)
@patch('dovetail.report.os.path')
@patch('dovetail.report.dt_cfg')
@@ -110,21 +114,21 @@ class ReportTesting(unittest.TestCase):
inner_testcase_obj = Mock()
testcase_obj.testcase = inner_testcase_obj
mock_config.dovetail_config = {'result_dir': 'result_dir'}
- mock_utils.get_value_from_dict.return_value = 'check_results_file'
+ mock_utils.get_value_from_dict.return_value = ['check_results_file']
mock_path.join.return_value = 'results_file'
mock_path.isfile.return_value = False
result = report.check_tc_result(testcase_obj)
mock_utils.get_value_from_dict.assert_called_once_with(
- 'report.check_results_file', inner_testcase_obj)
+ 'report.check_results_files', inner_testcase_obj)
mock_path.join.assert_called_once_with(
'result_dir', 'check_results_file')
mock_path.isfile.assert_called_once_with('results_file')
logger_obj.error.assert_called_once_with(
'Failed to store results with file results_file.')
mock_check.assert_called_once_with(testcase_obj)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.os.path')
@patch('dovetail.report.dt_cfg')
@@ -146,12 +150,12 @@ class ReportTesting(unittest.TestCase):
result = report.check_tc_result(testcase_obj)
mock_utils.get_value_from_dict.assert_called_once_with(
- 'report.check_results_file', inner_testcase_obj)
+ 'report.check_results_files', inner_testcase_obj)
logger_obj.error.assert_called_once_with(
- "Failed to get 'check_results_file' from config "
+ "Failed to get 'check_results_files' from config "
"file of test case name")
mock_check.assert_called_once_with(testcase_obj)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.CheckerFactory')
def test_check_result(self, mock_factory):
@@ -166,25 +170,33 @@ class ReportTesting(unittest.TestCase):
mock_factory.create.assert_called_once_with('type')
checker_obj.check.assert_called_once_with(testcase_obj, None)
+ @patch('dovetail.report.os.getenv')
+ @patch.object(dt_report.Report, 'get_checksum')
@patch('dovetail.report.Testcase')
@patch('dovetail.report.datetime.datetime')
@patch('dovetail.report.dt_cfg')
- def test_generate_json(self, mock_config, mock_datetime, mock_testcase):
+ def test_generate_json(self, mock_config, mock_datetime, mock_testcase,
+ mock_checksum, mock_env):
logger_obj = Mock()
report = dt_report.Report()
report.logger = logger_obj
- testcase_list = ['t_a', 't_b']
+ testcase_list = ['ta.tb.tc', 'td.te.tf']
duration = 42
mock_config.dovetail_config = {
- 'build_tag': 'build_tag'
+ 'build_tag': 'build_tag',
+ 'version': '2018.09'
}
+ mock_env.return_value = 'enabled'
utc_obj = Mock()
utc_obj.strftime.return_value = '2018-01-13 13:13:13 UTC'
mock_datetime.utcnow.return_value = utc_obj
testcase_obj = Mock()
testcase_obj.passed.return_value = 'PASS'
testcase_obj.objective.return_value = 'objective'
+ mock_checksum.return_value = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
testcase_obj.is_mandatory = True
+ testcase_obj.portal_key_file.return_value = 'a/b.log'
+ testcase_obj.vnf_type.return_value = 'tosca'
testcase_obj.sub_testcase.return_value = ['subt_a']
testcase_obj.sub_testcase_passed.return_value = 'PASS'
mock_testcase.get.side_effect = [testcase_obj, None]
@@ -193,137 +205,234 @@ class ReportTesting(unittest.TestCase):
expected = {
'version': '2018.09',
'build_tag': 'build_tag',
+ 'vnf_type': 'tosca',
+ 'vnf_checksum': 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
'test_date': '2018-01-13 13:13:13 UTC',
'duration': duration,
+ 'validation': 'enabled',
'testcases_list': [
{
- 'name': 't_a',
+ 'name': 'ta.tb.tc',
'result': 'PASS',
'objective': 'objective',
'mandatory': True,
+ 'portal_key_file': 'a/b.log',
'sub_testcase': [{
'name': 'subt_a',
'result': 'PASS'
}]
},
{
- 'name': 't_b',
+ 'name': 'td.te.tf',
'result': 'Undefined',
'objective': '',
'mandatory': False,
+ 'portal_key_file': '',
'sub_testcase': []
}
]
}
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
+ @patch('dovetail.report.os.getenv')
+ @patch('dovetail.report.Testcase')
@patch('dovetail.report.datetime.datetime')
@patch('dovetail.report.dt_cfg')
- def test_generate_json_no_list(self, mock_config, mock_datetime):
+ def test_generate_json_noVNF(self, mock_config, mock_datetime,
+ mock_testcase, mock_env):
logger_obj = Mock()
report = dt_report.Report()
report.logger = logger_obj
+ testcase_list = ['ta.tb.tc', 'td.te.tf']
duration = 42
mock_config.dovetail_config = {
- 'build_tag': 'build_tag'
+ 'build_tag': 'build_tag',
+ 'version': '2018.09'
}
+ mock_env.return_value = 'disabled'
utc_obj = Mock()
utc_obj.strftime.return_value = '2018-01-13 13:13:13 UTC'
mock_datetime.utcnow.return_value = utc_obj
+ testcase_obj = Mock()
+ testcase_obj.passed.return_value = 'PASS'
+ testcase_obj.objective.return_value = 'objective'
+ testcase_obj.is_mandatory = True
+ testcase_obj.vnf_type.return_value = None
+ testcase_obj.portal_key_file.return_value = 'a/b.log'
+ testcase_obj.sub_testcase.return_value = ['subt_a']
+ testcase_obj.sub_testcase_passed.return_value = 'PASS'
+ mock_testcase.get.side_effect = [testcase_obj, None]
- result = report.generate_json([], duration)
+ result = report.generate_json(testcase_list, duration)
expected = {
'version': '2018.09',
'build_tag': 'build_tag',
'test_date': '2018-01-13 13:13:13 UTC',
'duration': duration,
- 'testcases_list': []
+ 'validation': 'disabled',
+ 'testcases_list': [
+ {
+ 'name': 'ta.tb.tc',
+ 'result': 'PASS',
+ 'objective': 'objective',
+ 'mandatory': True,
+ 'portal_key_file': 'a/b.log',
+ 'sub_testcase': [{
+ 'name': 'subt_a',
+ 'result': 'PASS'
+ }]
+ },
+ {
+ 'name': 'td.te.tf',
+ 'result': 'Undefined',
+ 'objective': '',
+ 'mandatory': False,
+ 'portal_key_file': '',
+ 'sub_testcase': []
+ }
+ ]
}
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
+ @patch('dovetail.report.os.getenv')
+ @patch('dovetail.report.Testcase')
+ @patch('dovetail.report.datetime.datetime')
@patch('dovetail.report.dt_cfg')
- @patch.object(dt_report.Report, 'generate_json')
- @patch.object(dt_report.Report, 'save_json_results')
- def test_generate(self, mock_save, mock_generate, mock_config):
+ def test_generate_json_noVNF_inTestCase(self, mock_config, mock_datetime,
+ mock_testcase, mock_env):
logger_obj = Mock()
report = dt_report.Report()
report.logger = logger_obj
- testcase_list = ['t_a', 't_b']
+ testcase_list = ['ta.tb.tc', 'td.te.tf']
+ duration = 42
mock_config.dovetail_config = {
- 'testarea_supported': testcase_list
+ 'build_tag': 'build_tag',
+ 'version': '2018.09'
}
- duration = 42
- report_data = {
- 'version': 'v2',
- 'build_tag': '2.0.0',
+ mock_env.return_value = 'enabled'
+ utc_obj = Mock()
+ utc_obj.strftime.return_value = '2018-01-13 13:13:13 UTC'
+ mock_datetime.utcnow.return_value = utc_obj
+ testcase_obj = Mock()
+ testcase_obj.passed.return_value = 'PASS'
+ testcase_obj.objective.return_value = 'objective'
+ testcase_obj.is_mandatory = True
+ testcase_obj.portal_key_file.return_value = 'a/b.log'
+ testcase_obj.vnf_type.side_effect = Exception()
+ testcase_obj.sub_testcase.return_value = ['subt_a']
+ testcase_obj.sub_testcase_passed.return_value = 'PASS'
+ mock_testcase.get.side_effect = [testcase_obj, None]
+
+ result = report.generate_json(testcase_list, duration)
+ expected = {
+ 'version': '2018.09',
+ 'build_tag': 'build_tag',
'test_date': '2018-01-13 13:13:13 UTC',
- 'duration': 42.42,
+ 'duration': duration,
+ 'validation': 'enabled',
'testcases_list': [
{
- 'name': 't_a',
+ 'name': 'ta.tb.tc',
'result': 'PASS',
+ 'objective': 'objective',
+ 'mandatory': True,
+ 'portal_key_file': 'a/b.log',
'sub_testcase': [{
'name': 'subt_a',
'result': 'PASS'
}]
},
{
- 'name': 't_b',
- 'result': 'SKIP'
+ 'name': 'td.te.tf',
+ 'result': 'Undefined',
+ 'objective': '',
+ 'mandatory': False,
+ 'portal_key_file': '',
+ 'sub_testcase': []
}
]
}
- mock_generate.return_value = report_data
- result = report.generate(testcase_list, duration)
- expected = self._produce_report_initial_text(report_data)
- expected += 'Pass Rate: 100.00% (1/1)\n'
- expected += '%-25s pass rate %.2f%%\n' % ('t_a:', 100)
- expected += '-%-25s %s\n' % ('t_a', 'PASS')
- expected += '\t%-110s %s\n' % ('subt_a', 'PASS')
- expected += '%-25s all skipped\n' % 't_b'
- expected += '-%-25s %s\n' % ('t_b', 'SKIP')
+ self.assertEqual(expected, result)
- mock_generate.assert_called_once_with(testcase_list, duration)
- mock_save.assert_called_once_with(report_data)
- report.logger.info.assert_called_once_with(expected)
- self.assertEquals(expected, result)
+ @patch('dovetail.report.datetime.datetime')
+ @patch('dovetail.report.dt_cfg')
+ @patch.object(dt_report.Report, 'get_checksum')
+ def test_generate_json_no_list(self, mock_checksum, mock_config,
+ mock_datetime):
+ logger_obj = Mock()
+ report = dt_report.Report()
+ report.logger = logger_obj
+ duration = 42
+ mock_config.dovetail_config = {
+ 'build_tag': 'build_tag',
+ 'version': '2018.09',
+ 'vnf_type': 'tosca'
+ }
+ utc_obj = Mock()
+ utc_obj.strftime.return_value = '2018-01-13 13:13:13 UTC'
+ mock_datetime.utcnow.return_value = utc_obj
+ mock_checksum.return_value = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
+
+ result = report.generate_json([], duration)
+ expected = {
+ 'version': '2018.09',
+ 'build_tag': 'build_tag',
+ 'vnf_type': 'tosca',
+ 'vnf_checksum': 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
+ 'test_date': '2018-01-13 13:13:13 UTC',
+ 'duration': duration,
+ 'testcases_list': []
+ }
+
+ self.assertEqual(expected, result)
@patch('dovetail.report.dt_cfg')
@patch.object(dt_report.Report, 'generate_json')
@patch.object(dt_report.Report, 'save_json_results')
- def test_generate_error(self, mock_save, mock_generate, mock_config):
+ def test_generate(self, mock_save, mock_generate, mock_config):
logger_obj = Mock()
report = dt_report.Report()
report.logger = logger_obj
- mock_config.dovetail_config = {
- 'testarea_supported': []
- }
- testcase_list = ['t_a']
+ testcase_list = ['ta.tb.tc', 'td.te.tf']
duration = 42
report_data = {
'version': 'v2',
'build_tag': '2.0.0',
'test_date': '2018-01-13 13:13:13 UTC',
'duration': 42.42,
- 'testcases_list': [{
- 'name': 't_a',
- 'result': 'PASS'
- }]
+ 'testcases_list': [
+ {
+ 'name': 'ta.tb.tc',
+ 'result': 'PASS',
+ 'sub_testcase': [{
+ 'name': 'subt_a',
+ 'result': 'PASS'
+ }]
+ },
+ {
+ 'name': 'td.te.tf',
+ 'result': 'SKIP'
+ }
+ ]
}
mock_generate.return_value = report_data
result = report.generate(testcase_list, duration)
- expected = None
+ expected = self._produce_report_initial_text(report_data)
+ expected += 'Pass Rate: 100.00% (1/1)\n'
+ expected += '%-25s pass rate %.2f%%\n' % ('tb:', 100)
+ expected += '-%-25s %s\n' % ('ta.tb.tc', 'PASS')
+ expected += '\t%-110s %s\n' % ('subt_a', 'PASS')
+ expected += '%-25s all skipped\n' % 'te'
+ expected += '-%-25s %s\n' % ('td.te.tf', 'SKIP')
mock_generate.assert_called_once_with(testcase_list, duration)
mock_save.assert_called_once_with(report_data)
- report.logger.error.assert_called_once_with(
- 'Test case {} not in supported testarea.'
- .format(report_data['testcases_list'][0]['name']))
- self.assertEquals(expected, result)
+ report.logger.info.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
@patch('dovetail.report.dt_cfg')
@patch.object(dt_report.Report, 'generate_json')
@@ -332,9 +441,6 @@ class ReportTesting(unittest.TestCase):
logger_obj = Mock()
report = dt_report.Report()
report.logger = logger_obj
- mock_config.dovetail_config = {
- 'testarea_supported': []
- }
duration = 42
report_data = {
'version': 'v2',
@@ -352,9 +458,9 @@ class ReportTesting(unittest.TestCase):
mock_generate.assert_called_once_with([], duration)
mock_save.assert_called_once_with(report_data)
report.logger.info.assert_called_once_with(expected)
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json')
@patch('dovetail.report.os.path')
@patch('dovetail.report.dt_cfg')
@@ -377,7 +483,7 @@ class ReportTesting(unittest.TestCase):
mock_json.dumps.assert_called_once_with('results')
file_obj.write.assert_called_once_with('results text\n')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json')
@patch('dovetail.report.os.path')
@patch('dovetail.report.dt_cfg')
@@ -443,18 +549,18 @@ class ReportTesting(unittest.TestCase):
mock_crawler.create.return_value = crawler_obj
crawler_obj.crawl.return_value = 'result'
- result = report.get_result(testcase_obj, 'check_results_file')
+ result = report.get_result(testcase_obj, 'check_results_files')
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.validate_type.assert_called_once_with()
mock_crawler.create.assert_called_once_with('functest')
crawler_obj.crawl.assert_called_once_with(
- testcase_obj, 'check_results_file')
+ testcase_obj, 'check_results_files')
logger_obj.debug.assert_called_once_with(
'Test case: validate -> result acquired')
- self.assertEquals({'validate': 'result'},
- dt_report.Report.results['functest'])
- self.assertEquals('result', result)
+ self.assertEqual({'validate': 'result'},
+ dt_report.Report.results['functest'])
+ self.assertEqual('result', result)
@patch('dovetail.report.CrawlerFactory')
def test_get_result_no_result(self, mock_crawler):
@@ -469,17 +575,17 @@ class ReportTesting(unittest.TestCase):
mock_crawler.create.return_value = crawler_obj
crawler_obj.crawl.return_value = None
- result = report.get_result(testcase_obj, 'check_results_file')
+ result = report.get_result(testcase_obj, 'check_results_files')
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.validate_type.assert_called_once_with()
mock_crawler.create.assert_called_once_with('functest')
crawler_obj.crawl.assert_called_once_with(
- testcase_obj, 'check_results_file')
+ testcase_obj, 'check_results_files')
testcase_obj.increase_retry.assert_called_once_with()
logger_obj.debug.assert_called_once_with(
'Test case: validate -> result acquired retry: retry')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.CrawlerFactory')
def test_get_result_no_crawler(self, mock_crawler):
@@ -492,14 +598,14 @@ class ReportTesting(unittest.TestCase):
testcase_obj.validate_type.return_value = 'functest'
mock_crawler.create.return_value = None
- result = report.get_result(testcase_obj, 'check_results_file')
+ result = report.get_result(testcase_obj, 'check_results_files')
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.validate_type.assert_called_once_with()
mock_crawler.create.assert_called_once_with('functest')
logger_obj.error.assert_called_once_with(
'Crawler is None: name')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.dt_logger')
def test_functest_crawler_create_log(self, mock_logger):
@@ -510,7 +616,7 @@ class ReportTesting(unittest.TestCase):
dt_report.FunctestCrawler.create_log()
- self.assertEquals(getlogger_obj, dt_report.FunctestCrawler.logger)
+ self.assertEqual(getlogger_obj, dt_report.FunctestCrawler.logger)
@patch('dovetail.report.dt_cfg')
@patch('dovetail.report.os.path')
@@ -525,16 +631,38 @@ class ReportTesting(unittest.TestCase):
testcase_obj.name.return_value = 'name'
crawler = dt_report.FunctestCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
mock_path.exists.assert_called_once_with(file_path)
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.name.assert_called_once_with()
logger_obj.error.assert_called_once_with(
'Result file not found: {}'.format(file_path))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ def test_functest_crawler_get_details_exception(self):
+ logger_obj = Mock()
+ dt_report.FunctestCrawler.logger = logger_obj
+ data = None
+ crawler = dt_report.FunctestCrawler()
+
+ excepted = None
+ result = crawler.get_details(data)
+ logger_obj.exception.assert_called_once()
+ self.assertEqual(excepted, result)
+
+ def test_functest_crawler_get_rally_details_exception(self):
+ logger_obj = Mock()
+ dt_report.FunctestCrawler.logger = logger_obj
+ data = None
+ crawler = dt_report.FunctestCrawler()
+
+ excepted = None
+ result = crawler.get_rally_details(data)
+ logger_obj.exception.assert_called_once()
+ self.assertEqual(excepted, result)
+
+ @patch('builtins.open')
@patch('dovetail.report.json')
@patch('dovetail.report.dt_cfg')
@patch('dovetail.report.dt_utils')
@@ -570,7 +698,7 @@ class ReportTesting(unittest.TestCase):
mock_utils.get_duration.return_value = 'duration'
crawler = dt_report.FunctestCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'criteria', 'timestart': 'start_date',
'timestop': 'stop_date', 'duration': 'duration',
'details': {
@@ -587,9 +715,69 @@ class ReportTesting(unittest.TestCase):
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.sub_testcase.assert_called_once_with()
testcase_obj.name.assert_called_once_with()
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.json')
+ @patch('dovetail.report.dt_cfg')
+ @patch('dovetail.report.dt_utils')
+ @patch('dovetail.report.os.path')
+ def test_functest_rally_crawler_crawl(self, mock_path, mock_utils,
+ mock_config, mock_json, mock_open):
+ logger_obj = Mock()
+ mock_config.dovetail_config = {'build_tag': 'tag'}
+ dt_report.FunctestCrawler.logger = logger_obj
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ testcase_obj.validate_testcase.return_value = 'rally_full'
+ testcase_obj.name.return_value = 'name'
+ testcase_obj.sub_testcase.return_value = ['subt_a', 'subt_b', 'subt_c']
+ file_obj = Mock()
+ mock_open.return_value.__enter__.side_effect = [[file_obj], file_obj]
+ data_dict = {
+ 'case_name': 'rally_full',
+ 'build_tag': 'tag-name',
+ 'criteria': 'criteria',
+ 'start_date': 'start_date',
+ 'stop_date': 'stop_date',
+ 'details': {
+ 'modules': [
+ {
+ 'details': {
+ 'success': ['subt_a'],
+ 'failures': ['subt_b', 'subt_c']
+ },
+ 'module': 'module'
+ }
+ ]
+ }
+ }
+
+ mock_json.loads.return_value = data_dict
+ mock_utils.get_duration.return_value = 'duration'
+
+ crawler = dt_report.FunctestCrawler()
+ result = crawler.crawl(testcase_obj, [file_path, file_path])
+ expected = {'criteria': 'criteria', 'timestart': 'start_date',
+ 'timestop': 'stop_date', 'duration': 'duration',
+ 'details': {
+ 'tests': 3, 'failures': 2,
+ 'success': ['subt_a'], 'errors': ['subt_b', 'subt_c'],
+ 'skipped': []}}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_with(file_path, 'r')
+ mock_json.loads.assert_called_with(file_obj)
+ mock_utils.get_duration.assert_called_once_with(
+ 'start_date', 'stop_date', logger_obj)
+ testcase_obj.set_results.assert_called_with(expected)
+ testcase_obj.validate_testcase.assert_called_once_with()
+ testcase_obj.sub_testcase.assert_called_once_with()
+ testcase_obj.name.assert_called_once_with()
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.dt_cfg')
@patch('dovetail.report.dt_utils')
@@ -612,7 +800,7 @@ class ReportTesting(unittest.TestCase):
mock_utils.get_duration.return_value = 'duration'
crawler = dt_report.FunctestCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
@@ -622,7 +810,7 @@ class ReportTesting(unittest.TestCase):
testcase_obj.name.assert_called_once_with()
logger_obj.exception.assert_called_once_with(
"Result data don't have key 'case_name'.")
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.dt_logger')
def test_functestk8s_crawler_create_log(self, mock_logger):
@@ -633,7 +821,7 @@ class ReportTesting(unittest.TestCase):
dt_report.FunctestK8sCrawler.create_log()
- self.assertEquals(getlogger_obj, dt_report.FunctestK8sCrawler.logger)
+ self.assertEqual(getlogger_obj, dt_report.FunctestK8sCrawler.logger)
@patch('dovetail.report.FunctestK8sCrawler.crawl_from_file')
@patch('dovetail.report.dt_cfg')
@@ -648,11 +836,11 @@ class ReportTesting(unittest.TestCase):
crawler = dt_report.FunctestK8sCrawler()
- result = crawler.crawl(testcase, file_path)
+ result = crawler.crawl(testcase, [file_path])
dt_report.FunctestK8sCrawler.crawl_from_file.assert_called_once_with(
'testcase', 'file_path')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.report.dt_logger')
def test_yardstick_crawler_create_log(self, mock_logger):
@@ -663,7 +851,7 @@ class ReportTesting(unittest.TestCase):
dt_report.YardstickCrawler.create_log()
- self.assertEquals(getlogger_obj, dt_report.YardstickCrawler.logger)
+ self.assertEqual(getlogger_obj, dt_report.YardstickCrawler.logger)
@patch('dovetail.report.os.path')
def test_yardstick_crawler_crawl_not_exists(self, mock_path):
@@ -673,14 +861,14 @@ class ReportTesting(unittest.TestCase):
file_path = 'file_path'
crawler = dt_report.YardstickCrawler()
- result = crawler.crawl(None, file_path)
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
logger_obj.error.assert_called_once_with(
'Result file not found: {}'.format(file_path))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.dt_utils')
@patch('dovetail.report.os.path')
@@ -710,7 +898,7 @@ class ReportTesting(unittest.TestCase):
mock_utils.get_value_from_dict.return_value = 'PASS'
crawler = dt_report.YardstickCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'FAIL'}
mock_path.exists.assert_called_once_with(file_path)
@@ -720,9 +908,9 @@ class ReportTesting(unittest.TestCase):
'result.criteria', data_dict)
testcase_obj.validate_testcase.assert_called_once_with()
testcase_obj.set_results.assert_called_once_with(expected)
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.dt_utils')
@patch('dovetail.report.os.path')
@@ -741,7 +929,7 @@ class ReportTesting(unittest.TestCase):
mock_utils.get_value_from_dict.return_value = 'PASS'
crawler = dt_report.YardstickCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'PASS'}
mock_path.exists.assert_called_once_with(file_path)
@@ -753,7 +941,7 @@ class ReportTesting(unittest.TestCase):
testcase_obj.set_results.assert_called_once_with(expected)
logger_obj.exception.assert_called_once_with(
"Pass flag not found 'result'")
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
@patch('dovetail.report.dt_logger')
def test_bottlenecks_crawler_create_log(self, mock_logger):
@@ -764,7 +952,7 @@ class ReportTesting(unittest.TestCase):
dt_report.BottlenecksCrawler.create_log()
- self.assertEquals(getlogger_obj, dt_report.BottlenecksCrawler.logger)
+ self.assertEqual(getlogger_obj, dt_report.BottlenecksCrawler.logger)
@patch('dovetail.report.os.path')
def test_bottlenecks_crawler_crawl_not_exists(self, mock_path):
@@ -774,14 +962,14 @@ class ReportTesting(unittest.TestCase):
file_path = 'file_path'
crawler = dt_report.BottlenecksCrawler()
- result = crawler.crawl(None, file_path)
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
logger_obj.error.assert_called_once_with(
'Result file not found: {}'.format(file_path))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.os.path')
def test_bottlenecks_crawler_crawl_pass(self, mock_path, mock_loads,
@@ -800,16 +988,16 @@ class ReportTesting(unittest.TestCase):
mock_loads.return_value = data_dict
crawler = dt_report.BottlenecksCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'PASS'}
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
mock_loads.assert_called_once_with(file_obj)
testcase_obj.set_results.assert_called_once_with(expected)
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.os.path')
def test_bottlenecks_crawler_crawl_fail(self, mock_path, mock_loads,
@@ -828,16 +1016,16 @@ class ReportTesting(unittest.TestCase):
mock_loads.return_value = data_dict
crawler = dt_report.BottlenecksCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'FAIL'}
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
mock_loads.assert_called_once_with(file_obj)
testcase_obj.set_results.assert_called_once_with(expected)
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.os.path')
def test_bottlenecks_crawler_crawl_key_error(self, mock_path, mock_loads,
@@ -853,7 +1041,7 @@ class ReportTesting(unittest.TestCase):
mock_loads.return_value = {}
crawler = dt_report.BottlenecksCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'FAIL'}
mock_path.exists.assert_called_once_with(file_path)
@@ -862,7 +1050,7 @@ class ReportTesting(unittest.TestCase):
testcase_obj.set_results.assert_called_once_with(expected)
logger_obj.exception.assert_called_once_with(
"Pass flag not found 'data_body'")
- self.assertEquals(expected, result)
+ self.assertEqual(expected, result)
@patch('dovetail.report.os.path')
def test_shell_crawler_crawl_not_exists(self, mock_path):
@@ -870,12 +1058,12 @@ class ReportTesting(unittest.TestCase):
file_path = 'file_path'
crawler = dt_report.ShellCrawler()
- result = crawler.crawl(None, file_path)
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.os.path')
def test_shell_crawler_crawl_exception(self, mock_path, mock_open):
mock_path.exists.return_value = True
@@ -883,13 +1071,13 @@ class ReportTesting(unittest.TestCase):
mock_open.return_value.__enter__.return_value = Exception()
crawler = dt_report.ShellCrawler()
- result = crawler.crawl(None, file_path)
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.load')
@patch('dovetail.report.os.path')
def test_shell_crawler_crawl(self, mock_path, mock_load,
@@ -901,101 +1089,313 @@ class ReportTesting(unittest.TestCase):
mock_load.return_value = 'result'
crawler = dt_report.ShellCrawler()
- result = crawler.crawl(None, file_path)
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
mock_load.assert_called_once_with(file_obj)
- self.assertEquals('result', result)
+ self.assertEqual('result', result)
+
+ @patch('dovetail.report.dt_logger')
+ def test_onapvtp_crawler_create_log(self, mock_logger):
+ getlogger_obj = Mock()
+ logger_obj = Mock()
+ logger_obj.getLogger.return_value = getlogger_obj
+ mock_logger.Logger.return_value = logger_obj
+
+ dt_report.OnapVtpCrawler.create_log()
+
+ self.assertEqual(getlogger_obj, dt_report.OnapVtpCrawler.logger)
@patch('dovetail.report.dt_logger')
- def test_vnftest_crawler_create_log(self, mock_logger):
+ def test_onapvvp_crawler_create_log(self, mock_logger):
getlogger_obj = Mock()
logger_obj = Mock()
logger_obj.getLogger.return_value = getlogger_obj
mock_logger.Logger.return_value = logger_obj
- dt_report.VnftestCrawler.create_log()
+ dt_report.OnapVvpCrawler.create_log()
- self.assertEquals(getlogger_obj, dt_report.VnftestCrawler.logger)
+ self.assertEqual(getlogger_obj, dt_report.OnapVvpCrawler.logger)
@patch('dovetail.report.os.path')
- def test_vnftest_crawler_crawl_not_exists(self, mock_path):
+ def test_onapvtp_crawler_crawl_not_exists(self, mock_path):
logger_obj = Mock()
- dt_report.VnftestCrawler.logger = logger_obj
+ dt_report.OnapVtpCrawler.logger = logger_obj
mock_path.exists.return_value = False
file_path = 'file_path'
- crawler = dt_report.VnftestCrawler()
- result = crawler.crawl(None, file_path)
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(None, [file_path])
mock_path.exists.assert_called_once_with(file_path)
logger_obj.error.assert_called_once_with(
'Result file not found: {}'.format(file_path))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('dovetail.report.os.path')
+ def test_onapvvp_crawler_crawl_not_exists(self, mock_path):
+ logger_obj = Mock()
+ dt_report.OnapVvpCrawler.logger = logger_obj
+ mock_path.exists.return_value = False
+ file_path = 'file_path'
+
+ crawler = dt_report.OnapVvpCrawler()
+ result = crawler.crawl(None, [file_path])
+
+ mock_path.exists.assert_called_once_with(file_path)
+ logger_obj.error.assert_called_once_with(
+ 'Result file not found: {}'.format(file_path))
+ self.assertEqual(None, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.os.path')
+ def test_onapvvp_crawler_crawl_pass(self, mock_path,
+ mock_open):
+ dt_report.OnapVvpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ file_obj.read.return_value = json.dumps({'outcome': 'PASS'})
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ crawler = dt_report.OnapVvpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'PASS'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ file_obj.read.assert_called_once_with()
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.os.path')
+ def test_onapvvp_crawler_crawl_fail(self, mock_path,
+ mock_open):
+ dt_report.OnapVvpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ file_obj.read.return_value = json.dumps({'outcome': 'FAIL'})
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ crawler = dt_report.OnapVvpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ file_obj.read.assert_called_once_with()
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.os.path')
+ def test_onapvvp_crawler_crawl_value_exception(self, mock_path,
+ mock_open):
+ dt_report.OnapVvpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ file_obj.read.return_value = 'error'
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ crawler = dt_report.OnapVvpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ file_obj.read.assert_called_once_with()
+ dt_report.OnapVvpCrawler.logger.exception.assert_called_once_with(
+ 'Result file has invalid format')
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.os.path')
+ def test_onapvvp_crawler_crawl_key_exception(self, mock_path,
+ mock_open):
+ dt_report.OnapVvpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ file_obj.read.return_value = json.dumps({'key': 'value'})
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ crawler = dt_report.OnapVvpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ file_obj.read.assert_called_once_with()
+ dt_report.OnapVvpCrawler.logger.exception.assert_called_once_with(
+ "Outcome field not found 'outcome'")
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.os.path')
- def test_vnftest_crawler_crawl(self, mock_path, mock_loads,
- mock_open):
- dt_report.VnftestCrawler.logger = Mock()
+ def test_onapvtp_crawler_crawl_pass(self, mock_path, mock_loads,
+ mock_open):
+ dt_report.OnapVtpCrawler.logger = Mock()
mock_path.exists.return_value = True
file_path = 'file_path'
testcase_obj = Mock()
file_obj = Mock()
mock_open.return_value.__enter__.return_value = [file_obj]
data_dict = {
- 'result': {
- 'criteria': 'PASS'
- }
+ 'results': [
+ {"property": "results", "value": "{value=SUCCESS}"},
+ {"property": "build_tag", "value": "test-name"},
+ {"property": "criteria", "value": "PASS"}
+ ]
}
mock_loads.return_value = data_dict
- crawler = dt_report.VnftestCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'PASS'}
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
mock_loads.assert_called_once_with(file_obj)
- self.assertEquals(expected, result)
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.json.loads')
+ @patch('dovetail.report.os.path')
+ def test_onapvtp_crawler_crawl_fail(self, mock_path, mock_loads,
+ mock_open):
+ dt_report.OnapVtpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = [file_obj]
+ data_dict = {
+ 'results': [
+ {"property": "results", "value": "{value=file doesn't exist}"},
+ {"property": "build_tag", "value": "test-name"},
+ {"property": "criteria", "value": "FAILED"}
+ ]
+ }
+ mock_loads.return_value = data_dict
+
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ mock_loads.assert_called_once_with(file_obj)
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.json.loads')
+ @patch('dovetail.report.os.path')
+ def test_onapvtp_crawler_crawl_no_criteria(self, mock_path, mock_loads,
+ mock_open):
+ dt_report.OnapVtpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = [file_obj]
+ data_dict = {
+ 'results': [
+ {"property": "results", "value": "{value=file doesn't exist}"},
+ {"property": "build_tag", "value": "test-name"},
+ {"property": "error_criteria", "value": "FAILED"}
+ ]
+ }
+ mock_loads.return_value = data_dict
+
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
+
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ mock_loads.assert_called_once_with(file_obj)
+ dt_report.OnapVtpCrawler.logger.error.assert_called_once_with(
+ 'There is no property criteria.')
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.report.json.loads')
@patch('dovetail.report.os.path')
- def test_vnftest_crawler_crawl_key_error(self, mock_path, mock_loads,
+ def test_onapvtp_crawler_crawl_exception(self, mock_path, mock_loads,
mock_open):
- logger_obj = Mock()
- dt_report.VnftestCrawler.logger = logger_obj
+ dt_report.OnapVtpCrawler.logger = Mock()
mock_path.exists.return_value = True
file_path = 'file_path'
testcase_obj = Mock()
file_obj = Mock()
mock_open.return_value.__enter__.return_value = [file_obj]
+ data_dict = {
+ 'error_results': [
+ {"property": "results", "value": "{value=file doesn't exist}"},
+ {"property": "build_tag", "value": "test-name"},
+ {"property": "error_criteria", "value": "FAILED"}
+ ]
+ }
+ mock_loads.return_value = data_dict
- mock_loads.return_value = {}
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
+ expected = {'criteria': 'FAIL'}
- crawler = dt_report.VnftestCrawler()
- result = crawler.crawl(testcase_obj, file_path)
+ mock_path.exists.assert_called_once_with(file_path)
+ mock_open.assert_called_once_with(file_path, 'r')
+ mock_loads.assert_called_once_with(file_obj)
+ dt_report.OnapVtpCrawler.logger.exception.assert_called_once_with(
+ "Pass flag not found 'results'")
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
+
+ @patch('builtins.open')
+ @patch('dovetail.report.json.loads')
+ @patch('dovetail.report.os.path')
+ def test_onapvtp_crawler_crawl_value_error(self, mock_path, mock_loads,
+ mock_open):
+ dt_report.OnapVtpCrawler.logger = Mock()
+ mock_path.exists.return_value = True
+ file_path = 'file_path'
+ testcase_obj = Mock()
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = [file_obj]
+ mock_loads.side_effect = ValueError('No JSON object could be decoded')
+
+ crawler = dt_report.OnapVtpCrawler()
+ result = crawler.crawl(testcase_obj, [file_path])
expected = {'criteria': 'FAIL'}
mock_path.exists.assert_called_once_with(file_path)
mock_open.assert_called_once_with(file_path, 'r')
mock_loads.assert_called_once_with(file_obj)
- logger_obj.exception.assert_called_once_with(
- "Pass flag not found 'result'")
- self.assertEquals(expected, result)
+ testcase_obj.set_results.assert_called_once_with(expected)
+ self.assertEqual(expected, result)
def test_crawler_factory(self):
result = dt_report.CrawlerFactory.create('shell')
- self.assertEquals(dt_report.ShellCrawler, result.__class__)
+ self.assertEqual(dt_report.ShellCrawler, result.__class__)
def test_crawler_factory_none(self):
- self.assertEquals(None, dt_report.CrawlerFactory.create('other'))
+ self.assertEqual(None, dt_report.CrawlerFactory.create('other'))
def test_result_checker(self):
- self.assertEquals('PASS', dt_report.ResultChecker.check())
+ self.assertEqual('PASS', dt_report.ResultChecker.check())
@patch('dovetail.report.dt_logger')
def test_functest_checker_create_log(self, mock_logger):
@@ -1006,26 +1406,40 @@ class ReportTesting(unittest.TestCase):
dt_report.FunctestChecker.create_log()
- self.assertEquals(getlogger_obj, dt_report.FunctestChecker.logger)
+ self.assertEqual(getlogger_obj, dt_report.FunctestChecker.logger)
def test_functest_get_sub_testcase_no_result(self):
- self.assertEquals(
+ self.assertEqual(
False, dt_report.FunctestChecker.get_sub_testcase(None, None))
def test_functest_get_sub_testcase_simple_match(self):
- self.assertEquals(
+ self.assertEqual(
True,
dt_report.FunctestChecker.get_sub_testcase('subt_a',
['subt_b', 'subt_a']))
def test_functest_get_sub_testcase_extended_match(self):
- self.assertEquals(
+ self.assertEqual(
True,
dt_report.FunctestChecker.get_sub_testcase('subt_a',
['subt_b', 'subt_a+']))
+ def test_functest_get_sub_testcase_class_match(self):
+ self.assertEqual(
+ True,
+ dt_report.FunctestChecker.get_sub_testcase('subclass_a.subt_a',
+ ['subclass_a',
+ 'subclass_b.subt_b']))
+
+ def test_functest_get_sub_testcase_class_no_match(self):
+ self.assertEqual(
+ False,
+ dt_report.FunctestChecker.get_sub_testcase('subclass_a.subt_a',
+ ['subclass_a.subt_a_a',
+ 'subclass_b.subt_b']))
+
def test_functest_get_sub_no_match(self):
- self.assertEquals(
+ self.assertEqual(
False,
dt_report.FunctestChecker.get_sub_testcase('subt_a',
['subt_b']))
@@ -1071,16 +1485,6 @@ class ReportTesting(unittest.TestCase):
checker.check(testcase_obj, db_result)
testcase_obj.sub_testcase.assert_called_once_with()
- logger_obj.debug.assert_has_calls([
- call('Check sub_testcase: subt_a'),
- call('Check sub_testcase: subt_b'),
- call('Check sub_testcase: subt_c'),
- call('Check sub_testcase: subt_d')])
- testcase_obj.sub_testcase_passed.assert_has_calls([
- call('subt_a', 'PASS'),
- call('subt_b', 'SKIP'),
- call('subt_c', 'FAIL'),
- call('subt_d', 'FAIL')])
testcase_obj.passed.assert_has_calls([call('PASS'), call('FAIL')])
@patch('dovetail.report.dt_logger')
@@ -1092,7 +1496,7 @@ class ReportTesting(unittest.TestCase):
dt_report.FunctestK8sChecker.create_log()
- self.assertEquals(getlogger_obj, dt_report.FunctestK8sChecker.logger)
+ self.assertEqual(getlogger_obj, dt_report.FunctestK8sChecker.logger)
@patch('dovetail.report.dt_logger')
def test_yardstick_checker_create_log(self, mock_logger):
@@ -1103,7 +1507,7 @@ class ReportTesting(unittest.TestCase):
dt_report.YardstickChecker.create_log()
- self.assertEquals(getlogger_obj, dt_report.YardstickChecker.logger)
+ self.assertEqual(getlogger_obj, dt_report.YardstickChecker.logger)
def test_yardstick_check_result(self):
testcase_obj = Mock()
@@ -1130,7 +1534,7 @@ class ReportTesting(unittest.TestCase):
dt_report.BottlenecksChecker.create_log()
- self.assertEquals(getlogger_obj, dt_report.BottlenecksChecker.logger)
+ self.assertEqual(getlogger_obj, dt_report.BottlenecksChecker.logger)
def test_bottlenecks_check_result(self):
testcase_obj = Mock()
@@ -1164,36 +1568,104 @@ class ReportTesting(unittest.TestCase):
testcase_obj.passed.assert_called_once_with(False)
+ def test_checker_factory(self):
+ result = dt_report.CheckerFactory.create('shell')
+ self.assertEqual(dt_report.ShellChecker, result.__class__)
+
+ def test_checker_factory_none(self):
+ self.assertEqual(None, dt_report.CheckerFactory.create('other'))
+
@patch('dovetail.report.dt_logger')
- def test_vnftest_checker_create_log(self, mock_logger):
+ def test_onapvtp_checker_create_log(self, mock_logger):
getlogger_obj = Mock()
logger_obj = Mock()
logger_obj.getLogger.return_value = getlogger_obj
mock_logger.Logger.return_value = logger_obj
- dt_report.VnftestChecker.create_log()
+ dt_report.OnapVtpChecker.create_log()
+
+ self.assertEqual(getlogger_obj, dt_report.OnapVtpChecker.logger)
+
+ def test_onapvtp_check_result_none(self):
+ testcase_obj = Mock()
+ result = {}
+
+ dt_report.OnapVtpChecker.check(testcase_obj, result)
- self.assertEquals(getlogger_obj, dt_report.VnftestChecker.logger)
+ testcase_obj.passed.assert_called_once_with('FAIL')
- def test_vnftest_check_result(self):
+ def test_onapvtp_check_result(self):
testcase_obj = Mock()
result = {'criteria': 'PASS'}
- dt_report.VnftestChecker.check(testcase_obj, result)
+ dt_report.OnapVtpChecker.check(testcase_obj, result)
testcase_obj.passed.assert_called_once_with('PASS')
- def test_vnftest_check_result_none(self):
+ @patch('dovetail.report.dt_logger')
+ def test_onapvvp_checker_create_log(self, mock_logger):
+ getlogger_obj = Mock()
+ logger_obj = Mock()
+ logger_obj.getLogger.return_value = getlogger_obj
+ mock_logger.Logger.return_value = logger_obj
+
+ dt_report.OnapVvpChecker.create_log()
+
+ self.assertEqual(getlogger_obj, dt_report.OnapVvpChecker.logger)
+
+ def test_onapvvp_check_result_none(self):
testcase_obj = Mock()
result = {}
- dt_report.VnftestChecker.check(testcase_obj, result)
+ dt_report.OnapVvpChecker.check(testcase_obj, result)
testcase_obj.passed.assert_called_once_with('FAIL')
- def test_checker_factory(self):
- result = dt_report.CheckerFactory.create('shell')
- self.assertEquals(dt_report.ShellChecker, result.__class__)
+ def test_onapvvp_check_result(self):
+ testcase_obj = Mock()
+ result = {'criteria': 'PASS'}
- def test_checker_factory_none(self):
- self.assertEquals(None, dt_report.CheckerFactory.create('other'))
+ dt_report.OnapVvpChecker.check(testcase_obj, result)
+
+ testcase_obj.passed.assert_called_once_with('PASS')
+
+ @patch('dovetail.report.dt_cfg')
+ @patch('dovetail.report.os.path')
+ @patch('builtins.open')
+ @patch('dovetail.report.os.getenv')
+ def test_get_checksum_tosca(self, mock_env, mock_open, mock_path,
+ mock_config):
+ mock_config.dovetail_config = {
+ 'config_dir': 'config_dir'
+ }
+ mock_env.return_value = 'csar_file'
+ file_obj = Mock()
+ file_obj.read.return_value = 'info'
+ file_obj.__exit__ = Mock()
+ file_obj.__enter__ = Mock()
+ mock_open.return_value = file_obj
+ mock_path.isdir.return_value = False
+ mock_path.isfile.return_value = True
+
+ dt_report.Report.get_checksum('tosca')
+
+ @patch('dovetail.report.dt_cfg')
+ @patch('dovetail.report.os.path')
+ @patch('dovetail.report.os.walk')
+ @patch('builtins.open')
+ @patch('dovetail.report.os.getenv')
+ def test_get_checksum_heat(self, mock_env, mock_open, mock_walk, mock_path,
+ mock_config):
+ mock_config.dovetail_config = {
+ 'config_dir': 'config_dir'
+ }
+ mock_env.return_value = 'heat_templates_archive'
+ file_obj = Mock()
+ file_obj.read.return_value = 'info'
+ file_obj.__exit__ = Mock()
+ file_obj.__enter__ = Mock()
+ mock_open.return_value = file_obj
+ mock_path.isdir.return_value = True
+ mock_walk.return_value = [('root', ['dir'], ['file'])]
+
+ dt_report.Report.get_checksum('heat')
diff --git a/dovetail/tests/unit/test_run.py b/dovetail/tests/unit/test_run.py
index c7fe4d6d..c1e37116 100644
--- a/dovetail/tests/unit/test_run.py
+++ b/dovetail/tests/unit/test_run.py
@@ -46,7 +46,7 @@ class RunTesting(unittest.TestCase):
mock_testsuite.load.assert_called_once_with()
mock_testsuite.get.assert_called_once_with('testsuite')
- self.assertEquals('suite_a', result)
+ self.assertEqual('suite_a', result)
@patch('dovetail.run.dt_report.Report')
def test_run_test_no_list(self, mock_report):
@@ -57,30 +57,45 @@ class RunTesting(unittest.TestCase):
logger.warning.assert_called_once_with(
"No test case will be executed.")
+ @patch('dovetail.run.datetime')
+ @patch('dovetail.run.dt_utils')
@patch('dovetail.run.dt_cfg')
@patch('dovetail.run.dt_report.Report')
@patch('dovetail.run.dt_testcase.Testcase')
@patch('dovetail.run.time')
- def test_run_test(self, mock_time, mock_testcase, mock_report,
- mock_config):
+ @patch('os.getenv')
+ def test_run_test(self, mock_getenv, mock_time, mock_testcase, mock_report,
+ mock_config, mock_utils, mock_datetime):
logger = Mock()
report_obj = Mock()
mock_report.return_value = report_obj
- mock_time.time.side_effect = [42, 84]
+ mock_time.time.side_effect = [42, 43, 83, 84]
+ datetime_obj = Mock()
+ mock_datetime.fromtimestamp.return_value = datetime_obj
+ datetime_obj.strftime.side_effect = ['1969-12-31 19:00:43',
+ '1969-12-31 19:01:23']
testcase_name = 'testcase'
testcase_obj = Mock()
mock_testcase.get.return_value = testcase_obj
mock_config.dovetail_config = {'stop': True}
+ mock_getenv.return_value = 'true'
report_obj.check_tc_result.return_value = {'criteria': 'PASS'}
+ mock_utils.push_results_to_db.return_value = True
dt_run.run_test([testcase_name], True, logger)
- mock_time.time.assert_has_calls([call(), call()])
+ mock_time.time.assert_has_calls([call(), call(), call(), call()])
logger.info.assert_called_once_with(
'>>[testcase]: {}'.format(testcase_name))
mock_testcase.get.assert_called_once_with(testcase_name)
testcase_obj.run.assert_called_once_with()
report_obj.check_tc_result.assert_called_once_with(testcase_obj)
+ mock_utils.push_results_to_db.assert_called_once_with(
+ case_name=testcase_name,
+ start_date='1969-12-31 19:00:43',
+ stop_date='1969-12-31 19:01:23',
+ details={'criteria': 'PASS'},
+ logger=logger)
report_obj.generate.assert_called_once_with([testcase_name], 42)
report_obj.save_logs.assert_called_once_with()
@@ -101,7 +116,8 @@ class RunTesting(unittest.TestCase):
dt_run.run_test([testcase_name], True, logger)
- mock_time.time.assert_called_once_with()
+ mock_time.time.assert_has_calls([call(), call(), call().__float__(),
+ call(), call().__float__()])
logger.info.assert_has_calls([
call('>>[testcase]: {}'.format(testcase_name)),
call('Stop because {} failed'.format(testcase_name))])
@@ -127,7 +143,7 @@ class RunTesting(unittest.TestCase):
dt_run.run_test([testcase_name], True, logger)
- mock_time.time.assert_called_once_with()
+ mock_time.time.assert_has_calls([call(), call(), call()])
logger.info.assert_has_calls([
call('>>[testcase]: {}'.format(testcase_name)),
call('Stop because {} failed'.format(testcase_name))])
@@ -166,14 +182,14 @@ class RunTesting(unittest.TestCase):
result = dt_run.filter_config(input_dict, Mock())
- self.assertEquals(expected_dict, result)
+ self.assertEqual(expected_dict, result)
@patch('dovetail.run.dt_cfg')
def test_filter_config_none(self, mock_config):
mock_config.dovetail_config = {'cli': {}}
result = dt_run.filter_config({}, Mock())
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.run.dt_cfg')
def test_filter_config_keyerror(self, mock_config):
@@ -211,11 +227,9 @@ class RunTesting(unittest.TestCase):
mock_report.Report.create_log.assert_called_once_with()
mock_report.FunctestCrawler.create_log.assert_called_once_with()
mock_report.YardstickCrawler.create_log.assert_called_once_with()
- mock_report.VnftestCrawler.create_log.assert_called_once_with()
mock_report.BottlenecksCrawler.create_log.assert_called_once_with()
mock_report.FunctestChecker.create_log.assert_called_once_with()
mock_report.YardstickChecker.create_log.assert_called_once_with()
- mock_report.VnftestChecker.create_log.assert_called_once_with()
mock_report.BottlenecksChecker.create_log.assert_called_once_with()
mock_testcase.Testcase.create_log.assert_called_once_with()
mock_testcase.Testsuite.create_log.assert_called_once_with()
@@ -235,7 +249,7 @@ class RunTesting(unittest.TestCase):
mock_os.path.exists.assert_called_once_with('value')
mock_os.path.isdir.assert_called_once_with('value')
mock_utils.exec_cmd.assert_called_once_with(
- 'sudo rm -rf value/*', exit_on_error=False, exec_msg_on=False)
+ 'rm -rf value/*', exit_on_error=False, exec_msg_on=False)
@patch('dovetail.run.dt_utils')
@patch('dovetail.run.dt_cfg')
@@ -259,7 +273,8 @@ class RunTesting(unittest.TestCase):
dovetail_home = 'dovetail_home'
mock_os.environ = {'DOVETAIL_HOME': dovetail_home}
mock_os.path.join.side_effect = [
- 'result_path', 'images_dir', 'pre_config_path', 'patch_set_path']
+ 'result_path', 'images_dir', 'pre_config_path', 'patch_set_path',
+ 'userconfig_dir']
mock_config.dovetail_config = {}
result = dt_run.get_result_path()
@@ -268,14 +283,16 @@ class RunTesting(unittest.TestCase):
call(dovetail_home, 'results'),
call(dovetail_home, 'images'),
call(dovetail_home, 'pre_config'),
- call(dovetail_home, 'patches')])
+ call(dovetail_home, 'patches'),
+ call(dovetail_home, 'userconfig')])
expected_dict = {
'result_dir': 'result_path',
'images_dir': 'images_dir',
'config_dir': 'pre_config_path',
- 'patch_dir': 'patch_set_path'}
- self.assertEquals(expected_dict, mock_config.dovetail_config)
- self.assertEquals(dovetail_home, result)
+ 'patch_dir': 'patch_set_path',
+ 'userconfig_dir': 'userconfig_dir'}
+ self.assertEqual(expected_dict, mock_config.dovetail_config)
+ self.assertEqual(dovetail_home, result)
@patch('dovetail.run.os')
def test_get_result_path_exception(self, mock_os):
@@ -283,7 +300,7 @@ class RunTesting(unittest.TestCase):
result = dt_run.get_result_path()
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.run.constants')
@patch('dovetail.run.dt_cfg')
@@ -291,7 +308,7 @@ class RunTesting(unittest.TestCase):
@patch('dovetail.run.os')
def test_copy_userconfig_files(self, mock_os, mock_utils, mock_config,
mock_constants):
- mock_config.dovetail_config = {'config_dir': 'value'}
+ mock_config.dovetail_config = {'userconfig_dir': 'value'}
mock_os.path.isdir.return_value = False
mock_constants.USERCONF_PATH = 'value'
logger = Mock()
@@ -301,7 +318,7 @@ class RunTesting(unittest.TestCase):
mock_os.path.isdir.assert_called_once_with('value')
mock_os.makedirs.assert_called_once_with('value')
mock_utils.exec_cmd.assert_called_once_with(
- 'sudo cp -r value/* value', logger, exit_on_error=False)
+ 'cp -r value/* value', logger, exit_on_error=False)
@patch('dovetail.run.constants')
@patch('dovetail.run.dt_cfg')
@@ -319,7 +336,7 @@ class RunTesting(unittest.TestCase):
mock_os.path.isdir.assert_called_once_with('value')
mock_os.makedirs.assert_called_once_with('value')
mock_utils.exec_cmd.assert_called_once_with(
- 'sudo cp -a -r value/* value', logger, exit_on_error=False)
+ 'cp -a -r value/* value', logger, exit_on_error=False)
@patch('dovetail.run.os')
def test_update_deploy_scenario(self, mock_os):
@@ -329,7 +346,7 @@ class RunTesting(unittest.TestCase):
dt_run.update_deploy_scenario(logger, deploy_scenario='a')
logger.info.assert_called_once_with('DEPLOY_SCENARIO : %s', 'a')
- self.assertEquals({'DEPLOY_SCENARIO': 'a'}, mock_os.environ)
+ self.assertEqual({'DEPLOY_SCENARIO': 'a'}, mock_os.environ)
@patch('dovetail.run.dt_cfg')
@patch.object(dt_run, 'filter_config')
@@ -355,7 +372,7 @@ class RunTesting(unittest.TestCase):
logger.warning.assert_called_once_with(
'Strict API response validation DISABLED.')
- self.assertEquals(expected_dict, mock_config.dovetail_config)
+ self.assertEqual(expected_dict, mock_config.dovetail_config)
@patch('dovetail.run.dt_cfg')
@patch.object(dt_run, 'filter_config')
@@ -377,7 +394,7 @@ class RunTesting(unittest.TestCase):
'no_api_validation': False
}
- self.assertEquals(expected_dict, mock_config.dovetail_config)
+ self.assertEqual(expected_dict, mock_config.dovetail_config)
def test_check_testcase_list_not_in_list(self):
logger = Mock()
@@ -386,7 +403,7 @@ class RunTesting(unittest.TestCase):
logger.error.assert_called_once_with(
'Test case testcase is not defined.')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
def test_check_testcase_list_none(self):
logger = Mock()
@@ -394,7 +411,7 @@ class RunTesting(unittest.TestCase):
logger.error.assert_called_once_with(
'There is no test case to be executed.')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.run.dt_testcase.Testcase')
def test_check_testcase_list(self, mock_testcase):
@@ -403,7 +420,7 @@ class RunTesting(unittest.TestCase):
result = dt_run.check_testcase_list(testcase_list)
- self.assertEquals(testcase_list, result)
+ self.assertEqual(testcase_list, result)
@patch('dovetail.run.dt_testcase.Testcase')
@patch.object(dt_run, 'check_testcase_list')
@@ -415,7 +432,7 @@ class RunTesting(unittest.TestCase):
mock_check.assert_called_once_with(testcase_list, None)
mock_testcase.load.assert_called_once_with()
- self.assertEquals(testcase_list, result)
+ self.assertEqual(testcase_list, result)
@patch('dovetail.run.dt_cfg')
@patch('dovetail.run.dt_testcase.Testcase')
@@ -439,7 +456,7 @@ class RunTesting(unittest.TestCase):
mock_testcase.get_testcases_for_testsuite.assert_called_once_with(
'testsuite_yaml', 'area')
mock_check.assert_called_once_with(testcase_list, None)
- self.assertEquals(testcase_list, result)
+ self.assertEqual(testcase_list, result)
@patch('dovetail.run.dt_cfg')
@patch('dovetail.run.dt_testcase.Testcase')
@@ -455,7 +472,7 @@ class RunTesting(unittest.TestCase):
mock_testcase.check_testarea.assert_called_once_with('area')
logger.error.assert_called_once_with(
'Test suite suite is not defined.')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.run.dt_cfg')
@patch('dovetail.run.dt_testcase.Testcase')
@@ -471,9 +488,11 @@ class RunTesting(unittest.TestCase):
mock_testcase.check_testarea.assert_called_once_with('area')
logger.error.assert_called_once_with(
'Test area area is not defined.')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
+ @patch('builtins.open')
@patch('dovetail.run.os')
+ @patch('dovetail.run.json')
@patch('dovetail.run.uuid')
@patch('dovetail.run.dt_logger')
@patch('dovetail.run.dt_cfg')
@@ -490,37 +509,44 @@ class RunTesting(unittest.TestCase):
def test_main(self, mock_create_logs, mock_run, mock_get_list,
mock_copy_patch, mock_copy_userconf, mock_update, mock_parse,
mock_clean, mock_get_result, mock_utils, mock_config,
- mock_logger, mock_uuid, mock_os):
+ mock_logger, mock_uuid, mock_json, mock_os, mock_open):
mock_config.dovetail_config = {}
- mock_os.environ = {}
+ mock_os.environ = {'DOVETAIL_HOME': 'dovetail_home'}
logger_obj = Mock()
logger_temp_obj = Mock()
+ file_obj = Mock()
logger_temp_obj.getLogger.return_value = logger_obj
mock_logger.Logger.return_value = logger_temp_obj
+ mock_open.return_value.__enter__.return_value = file_obj
+ mock_json.dumps.return_value = 'results text'
mock_uuid.uuid1.return_value = 42
mock_get_result.return_value = True
testcase_list = ['testcase']
mock_get_list.return_value = testcase_list
kwargs_dict = {
'debug': True,
+ 'opnfv_ci': True,
'report': True,
'testsuite': 'testsuite',
- 'docker_tag': '2.0.0'
+ 'docker_tag': '2.0.0',
+ 'no_api_validation': False
}
with self.assertRaises(SystemExit) as cm:
- dt_run.main([
- '--testsuite=testsuite', '--debug', '--report', '2.0.0'])
+ dt_run.main(['--testsuite=testsuite', '--debug', '--report',
+ '2.0.0', '--opnfv-ci'])
expected = cm.exception
logger_temp_obj.getLogger.assert_called_once_with()
mock_logger.Logger.assert_called_once_with('run')
mock_uuid.uuid1.assert_called_once_with()
- self.assertEquals({'build_tag': 'daily-master-42'},
- mock_config.dovetail_config)
+ self.assertEqual({'build_tag': 'daily-master-42'},
+ mock_config.dovetail_config)
mock_get_result.assert_called_once_with()
mock_clean.assert_called_once_with()
- self.assertEquals({'DEBUG': 'true'}, mock_os.environ)
+ self.assertEqual({'DOVETAIL_HOME': 'dovetail_home', 'DEBUG': 'true',
+ 'OPNFV_CI': 'true', 'validation': 'enabled'},
+ mock_os.environ)
mock_create_logs.assert_called_once_with()
logger_obj.info.assert_has_calls([
call('================================================'),
@@ -535,7 +561,7 @@ class RunTesting(unittest.TestCase):
mock_get_list.assert_called_once_with(logger_obj, **kwargs_dict)
mock_run.assert_called_once_with(
testcase_list, kwargs_dict['report'], logger_obj)
- self.assertEquals(expected.code, 0)
+ self.assertEqual(expected.code, 0)
@patch('dovetail.run.uuid')
@patch('dovetail.run.dt_cfg')
@@ -551,11 +577,13 @@ class RunTesting(unittest.TestCase):
expected = cm.exception
mock_uuid.uuid1.assert_called_once_with()
- self.assertEquals({'build_tag': 'daily-master-42'},
- mock_config.dovetail_config)
+ self.assertEqual({'build_tag': 'daily-master-42'},
+ mock_config.dovetail_config)
mock_get_result.assert_called_once_with()
- self.assertEquals(expected.code, 0)
+ self.assertEqual(expected.code, 0)
+ @patch('builtins.open')
+ @patch('dovetail.run.json')
@patch('dovetail.run.os')
@patch('dovetail.run.uuid')
@patch('dovetail.run.dt_logger')
@@ -574,37 +602,45 @@ class RunTesting(unittest.TestCase):
mock_get_list, mock_copy_patch,
mock_copy_userconf, mock_update, mock_clean,
mock_get_result, mock_utils, mock_config,
- mock_logger, mock_uuid, mock_os):
+ mock_logger, mock_uuid, mock_os, mock_json,
+ mock_open):
mock_config.dovetail_config = {}
- mock_os.environ = {}
+ mock_os.environ = {'DOVETAIL_HOME': 'dovetail_home'}
logger_obj = Mock()
logger_temp_obj = Mock()
+ file_obj = Mock()
logger_temp_obj.getLogger.return_value = logger_obj
mock_logger.Logger.return_value = logger_temp_obj
+ mock_open.return_value.__enter__.return_value = file_obj
+ mock_json.dumps.return_value = 'results text'
mock_uuid.uuid1.return_value = 42
mock_get_result.return_value = True
mock_get_list.return_value = None
kwargs_dict = {
'debug': True,
+ 'opnfv_ci': False,
'report': True,
'testsuite': 'testsuite',
- 'docker_tag': '2.0.0'
+ 'docker_tag': '2.0.0',
+ 'no_api_validation': False
}
with self.assertRaises(SystemExit) as cm:
dt_run.main([
'--testsuite=testsuite', '--debug', '--report', '2.0.0'])
expected = cm.exception
- self.assertEquals(expected.code, 2)
+ self.assertEqual(expected.code, 2)
logger_temp_obj.getLogger.assert_called_once_with()
mock_logger.Logger.assert_called_once_with('run')
mock_uuid.uuid1.assert_called_once_with()
- self.assertEquals({'build_tag': 'daily-master-42'},
- mock_config.dovetail_config)
+ self.assertEqual({'build_tag': 'daily-master-42'},
+ mock_config.dovetail_config)
mock_get_result.assert_called_once_with()
mock_clean.assert_called_once_with()
- self.assertEquals({'DEBUG': 'true'}, mock_os.environ)
+ self.assertEqual({'DOVETAIL_HOME': 'dovetail_home', 'DEBUG': 'true',
+ 'OPNFV_CI': 'false', 'validation': 'enabled'},
+ mock_os.environ)
mock_create_logs.assert_called_once_with()
logger_obj.info.assert_has_calls([
call('================================================'),
diff --git a/dovetail/tests/unit/test_test_runner.py b/dovetail/tests/unit/test_test_runner.py
index 08dbde69..232de7b1 100644
--- a/dovetail/tests/unit/test_test_runner.py
+++ b/dovetail/tests/unit/test_test_runner.py
@@ -43,65 +43,6 @@ class TestRunnerTesting(unittest.TestCase):
@patch('dovetail.test_runner.dt_utils')
@patch('dovetail.test_runner.dt_cfg')
- def test_pre_copy_no_container(self, mock_config, mock_utils):
- t_runner.FunctestRunner.create_log()
- mock_config.dovetail_config = {'result_dir': 'result_dir'}
- docker_runner = t_runner.FunctestRunner(self.testcase)
-
- result = docker_runner.pre_copy(
- container=None, dest_path=None,
- src_file=None, exist_file=None)
-
- docker_runner.logger.error.assert_called_once_with(
- 'Container instance is None.')
- self.assertEquals(None, result)
-
- @patch('dovetail.test_runner.dt_utils')
- @patch('dovetail.test_runner.dt_cfg')
- def test_pre_copy_no_dest_path(self, mock_config, mock_utils):
- t_runner.FunctestRunner.create_log()
- mock_config.dovetail_config = {'result_dir': 'result_dir'}
- docker_runner = t_runner.FunctestRunner(self.testcase)
-
- result = docker_runner.pre_copy(
- container='container', dest_path=None,
- src_file=None, exist_file=None)
-
- docker_runner.logger.error.assert_called_once_with(
- 'There has no dest_path in {} config file.'.format(
- self.testcase_name))
- self.assertEquals(None, result)
-
- @patch('dovetail.test_runner.dt_cfg')
- @patch('dovetail.test_runner.os.path')
- def test_pre_copy(self, mock_path, mock_config):
- t_runner.FunctestRunner.create_log()
- docker_runner = t_runner.FunctestRunner(self.testcase)
- mock_config.dovetail_config = {
- 'functest': {
- 'result': {
- 'dir': 'result_dir'
- },
- 'config': {
- 'dir': 'config_dir'
- }
- }
- }
- container_obj = Mock()
- mock_path.join.return_value = 'join'
-
- result = docker_runner.pre_copy(
- container=container_obj, dest_path='dest_path',
- src_file='src_file', exist_file='exist_file')
-
- mock_path.join.assert_has_calls([
- call('result_dir', 'src_file'),
- call('config_dir', 'pre_config', 'exist_file')])
- container_obj.copy_file.assert_called_once_with('join', 'dest_path')
- self.assertEquals('dest_path', result)
-
- @patch('dovetail.test_runner.dt_utils')
- @patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.Container')
def test_run_offline_not_exist(self, mock_container, mock_config,
mock_utils):
@@ -166,41 +107,8 @@ class TestRunnerTesting(unittest.TestCase):
docker_img_obj = Mock()
container_obj.get_docker_image.return_value = docker_img_obj
container_obj.pull_image.return_value = True
- container_obj.create.return_value = False
- mock_container.return_value = container_obj
-
- docker_runner.run()
-
- mock_container.assert_called_once_with(self.testcase)
- container_obj.get_docker_image.assert_called_once_with()
- container_obj.pull_image.assert_called_once_with(docker_img_obj)
- container_obj.create.assert_called_once_with(docker_img_obj)
- docker_runner.logger.error.assert_called_once_with(
- 'Failed to create container.')
-
- @patch('dovetail.test_runner.dt_cfg')
- @patch('dovetail.test_runner.Container')
- @patch.object(t_runner.DockerRunner, 'pre_copy')
- def test_run__not_offline_src_file_no_precopy(self, mock_precopy,
- mock_container, mock_config):
- t_runner.VnftestRunner.create_log()
- docker_runner = t_runner.VnftestRunner(self.testcase)
- mock_config.dovetail_config = {
- 'offline': False
- }
- container_obj = Mock()
- docker_img_obj = Mock()
- container_obj.get_docker_image.return_value = docker_img_obj
- container_obj.pull_image.return_value = True
- container_id = '12345'
- container_obj.create.return_value = container_id
+ container_obj.create.return_value = [None, 'error']
mock_container.return_value = container_obj
- dest_path = 'dest_path'
- src_file_name = 'src_file'
- exist_file_name = 'exist_src_file'
- self.testcase.pre_copy_path.side_effect = [
- dest_path, src_file_name, exist_file_name]
- mock_precopy.return_value = False
docker_runner.run()
@@ -208,20 +116,13 @@ class TestRunnerTesting(unittest.TestCase):
container_obj.get_docker_image.assert_called_once_with()
container_obj.pull_image.assert_called_once_with(docker_img_obj)
container_obj.create.assert_called_once_with(docker_img_obj)
- docker_runner.logger.debug.assert_called_with(
- 'container id: {}'.format(container_id))
- self.testcase.pre_copy_path.assert_has_calls([
- call(dest_path),
- call(src_file_name),
- call(exist_file_name)])
- mock_precopy.assert_called_once_with(
- container_obj, dest_path, src_file_name, exist_file_name)
+ docker_runner.logger.error.assert_has_calls([
+ call('Failed to create container.'), call('error')])
@patch('dovetail.test_runner.dt_utils')
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.Container')
- @patch.object(t_runner.DockerRunner, 'pre_copy')
- def test_run__not_offline_no_prepare(self, mock_precopy, mock_container,
+ def test_run__not_offline_no_prepare(self, mock_container,
mock_config, mock_utils):
t_runner.FunctestRunner.create_log()
mock_config.dovetail_config = {
@@ -236,14 +137,13 @@ class TestRunnerTesting(unittest.TestCase):
container_obj.get_docker_image.return_value = docker_img_obj
container_obj.pull_image.return_value = True
container_id = '12345'
- container_obj.create.return_value = container_id
+ container_msg = 'Successfully to create container.'
+ container_obj.create.return_value = [container_id, container_msg]
mock_container.return_value = container_obj
- self.testcase.pre_copy_path.return_value = None
self.testcase.pre_condition.return_value = ['cmd']
self.testcase.prepare_cmd.return_value = False
self.testcase.post_condition.return_value = ['cmd']
container_obj.exec_cmd.return_value = (1, 'error')
- mock_precopy.return_value = False
docker_runner.run()
@@ -253,10 +153,6 @@ class TestRunnerTesting(unittest.TestCase):
container_obj.create.assert_called_once_with(docker_img_obj)
docker_runner.logger.debug.assert_called_with(
'container id: {}'.format(container_id))
- self.testcase.pre_copy_path.assert_has_calls([
- call('dest_path'),
- call('src_file'),
- call('exist_src_file')])
self.testcase.pre_condition.assert_called_once_with()
container_obj.exec_cmd.assert_has_calls([
call('cmd'), call('cmd')])
@@ -271,8 +167,7 @@ class TestRunnerTesting(unittest.TestCase):
@patch('dovetail.test_runner.dt_utils')
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.Container')
- @patch.object(t_runner.DockerRunner, 'pre_copy')
- def test_run__not_offline_prepare(self, mock_precopy, mock_container,
+ def test_run__not_offline_prepare(self, mock_container,
mock_config, mock_utils):
t_runner.FunctestRunner.create_log()
mock_config.dovetail_config = {
@@ -286,15 +181,14 @@ class TestRunnerTesting(unittest.TestCase):
container_obj.get_docker_image.return_value = docker_img_obj
container_obj.pull_image.return_value = True
container_id = '12345'
- container_obj.create.return_value = container_id
+ container_msg = 'Successfully to create container.'
+ container_obj.create.return_value = [container_id, container_msg]
mock_container.return_value = container_obj
- self.testcase.pre_copy_path.return_value = None
self.testcase.pre_condition.return_value = ['cmd']
self.testcase.prepare_cmd.return_value = True
self.testcase.post_condition.return_value = ['cmd']
self.testcase.cmds = ['cmd']
container_obj.exec_cmd.return_value = (1, 'error')
- mock_precopy.return_value = False
docker_runner.run()
@@ -304,10 +198,6 @@ class TestRunnerTesting(unittest.TestCase):
container_obj.create.assert_called_once_with(docker_img_obj)
docker_runner.logger.debug.assert_called_with(
'container id: {}'.format(container_id))
- self.testcase.pre_copy_path.assert_has_calls([
- call('dest_path'),
- call('src_file'),
- call('exist_src_file')])
self.testcase.pre_condition.assert_called_once_with()
container_obj.exec_cmd.assert_has_calls([
call('cmd'), call('cmd'), call('cmd')])
@@ -335,7 +225,7 @@ class TestRunnerTesting(unittest.TestCase):
mock_utils.get_value_from_dict.assert_has_calls([
call('report.source_archive_files', self.testcase_dict),
call('report.dest_archive_files', self.testcase_dict)])
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.dt_utils')
@@ -358,7 +248,7 @@ class TestRunnerTesting(unittest.TestCase):
"Can't find corresponding 'result_dest_files' "
"for 'result_source_files' with testcase {}"
.format(self.testcase_name))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.dt_utils')
@@ -387,7 +277,7 @@ class TestRunnerTesting(unittest.TestCase):
mock_os.path.isfile.assert_has_calls([call('src_file_path')])
docker_runner.logger.error.assert_called_once_with(
"Can't find file {}.".format('src_file_path'))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.dt_utils')
@@ -416,7 +306,7 @@ class TestRunnerTesting(unittest.TestCase):
mock_os.path.isfile.assert_has_calls([call('src_file_path')])
mock_os.renames.assert_called_once_with(
'src_file_path', 'dest_file_path')
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
@patch('dovetail.test_runner.jinja2')
def test_render(self, mock_jinja):
@@ -429,13 +319,14 @@ class TestRunnerTesting(unittest.TestCase):
mock_jinja.Template.assert_called_once_with('task_template')
template_obj.render.assert_called_with()
- self.assertEquals(render_obj, result)
+ self.assertEqual(render_obj, result)
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.os')
def test_add_testcase_info(self, mock_os, mock_config):
mock_os.getenv.side_effect = ['os_insecure', 'dovetail_home', 'debug',
- 'os_cacert']
+ 'os_cacert', 'host_url', 'csar_file',
+ 'heat_templates_archive']
mock_os.environ = {'DEPLOY_SCENARIO': 'deploy_scenario'}
mock_config.dovetail_config = {'build_tag': 'build_tag'}
@@ -444,15 +335,19 @@ class TestRunnerTesting(unittest.TestCase):
'testcase': 'testcase_name', 'os_insecure': 'os_insecure',
'deploy_scenario': 'deploy_scenario',
'dovetail_home': 'dovetail_home', 'debug': 'debug',
- 'build_tag': 'build_tag', 'cacert': 'os_cacert'}
+ 'build_tag': 'build_tag', 'cacert': 'os_cacert',
+ 'host_url': 'host_url', 'csar_file': 'csar_file',
+ 'heat_templates_archive': 'heat_templates_archive'
+ }
result = t_runner.FunctestRunner._add_testcase_info(self.testcase)
self.testcase.validate_testcase.assert_called_once_with()
self.testcase.name.assert_called_once_with()
mock_os.getenv.assert_has_calls([
call('OS_INSECURE'), call('DOVETAIL_HOME'), call('DEBUG'),
- call('OS_CACERT')])
- self.assertEquals(expected, result)
+ call('OS_CACERT'), call('HOST_URL'), call('CSAR_FILE'),
+ call('VNF_ARCHIVE_NAME')])
+ self.assertEqual(expected, result)
@patch('dovetail.test_runner.dt_utils')
@patch('dovetail.test_runner.dt_cfg')
@@ -478,7 +373,7 @@ class TestRunnerTesting(unittest.TestCase):
call('conf_path', docker_runner.config_file_name)])
mock_utils.read_plain_file.assert_called_once_with(
'config_file', docker_runner.logger)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.test_runner.yaml.safe_load')
@patch('dovetail.test_runner.dt_utils')
@@ -513,7 +408,7 @@ class TestRunnerTesting(unittest.TestCase):
mock_add_info.assert_called_once_with(self.testcase)
mock_render.assert_called_once_with(True, config_item='item')
mock_load.assert_called_once_with('full_task')
- self.assertEquals(
+ self.assertEqual(
{'config_dir': 'one',
'pod_file': 'two',
'full_task_yaml': 'full_value',
@@ -553,7 +448,7 @@ class TestRunnerTesting(unittest.TestCase):
mock_add_info.assert_called_once_with(self.testcase)
mock_render.assert_called_once_with(True, config_item='item')
mock_load.assert_called_once_with('full_task')
- self.assertEquals(
+ self.assertEqual(
{'config_dir': 'one',
'pod_file': 'two',
'full_task_yaml': 'full_value',
@@ -599,14 +494,14 @@ class TestRunnerTesting(unittest.TestCase):
"Need key '{}' in {}".format('testcase_name', {'key': 'value'}))
mock_render.assert_called_once_with(True, config_item='item')
mock_load.assert_called_once_with('full_task')
- self.assertEquals(
+ self.assertEqual(
{'config_dir': 'one',
'pod_file': 'two',
'full_task_yaml': 'full_value',
'result_dir': 'three'},
result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.test_runner.json')
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.dt_utils')
@@ -651,7 +546,7 @@ class TestRunnerTesting(unittest.TestCase):
'pass': 'FAIL'})
file_obj.write.assert_called_once_with(dump_obj)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.test_runner.dt_cfg')
@patch('dovetail.test_runner.dt_utils')
@patch('dovetail.test_runner.os.path')
@@ -692,7 +587,7 @@ class TestRunnerTesting(unittest.TestCase):
result = docker_runner.create(self.testcase)
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.test_runner.constants')
@patch('dovetail.test_runner.dt_utils')
@@ -713,7 +608,7 @@ class TestRunnerTesting(unittest.TestCase):
call('conf_path', docker_runner.config_file_name)])
mock_utils.read_plain_file.assert_has_calls([
call('config_file', docker_runner.logger)])
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.test_runner.yaml.safe_load')
@patch('dovetail.test_runner.constants')
@@ -746,8 +641,72 @@ class TestRunnerTesting(unittest.TestCase):
mock_add_info.assert_has_calls([call(self.testcase)])
mock_render.assert_has_calls([call(True, config_item='item')])
mock_load.assert_has_calls([call('full_task')])
- self.assertEquals(
+ self.assertEqual(
{'config_dir': 'one',
'pod_file': 'two',
'full_task_yaml': 'full_value'},
result)
+
+ @patch('dovetail.test_runner.dt_utils')
+ @patch('dovetail.test_runner.os.path')
+ @patch('dovetail.test_runner.dt_cfg')
+ def test_init_onapvtprunner_no_env_file(self, mock_config, mock_path,
+ mock_utils):
+ t_runner.OnapVtpRunner.create_log()
+ mock_path.join.side_effect = ['env_file']
+ mock_config.dovetail_config = {'config_dir': 'one', 'env_file': 'two'}
+ mock_path.isfile.return_value = False
+
+ docker_runner = t_runner.OnapVtpRunner(self.testcase)
+
+ mock_path.join.assert_has_calls([call('one', 'two')])
+ mock_path.isfile.assert_called_once()
+ docker_runner.logger.error.assert_called_once_with(
+ 'File env_file does not exist.')
+
+ @patch('dovetail.test_runner.dt_utils')
+ @patch('dovetail.test_runner.os.path')
+ @patch('dovetail.test_runner.dt_cfg')
+ def test_init_onapvtprunner(self, mock_config, mock_path, mock_utils):
+ t_runner.OnapVtpRunner.create_log()
+ mock_path.join.side_effect = ['env_file']
+ mock_config.dovetail_config = {'config_dir': 'one', 'env_file': 'two'}
+ mock_path.isfile.return_value = True
+
+ t_runner.OnapVtpRunner(self.testcase)
+
+ mock_path.join.assert_has_calls([call('one', 'two')])
+ mock_path.isfile.assert_called_once()
+ mock_utils.source_env.assert_called_once_with('env_file')
+
+ @patch('dovetail.test_runner.dt_utils')
+ @patch('dovetail.test_runner.os.path')
+ @patch('dovetail.test_runner.dt_cfg')
+ def test_init_onapvvprunner_no_env_file(self, mock_config, mock_path,
+ mock_utils):
+ t_runner.OnapVvpRunner.create_log()
+ mock_path.join.side_effect = ['env_file']
+ mock_config.dovetail_config = {'config_dir': 'one', 'env_file': 'two'}
+ mock_path.isfile.return_value = False
+
+ docker_runner = t_runner.OnapVvpRunner(self.testcase)
+
+ mock_path.join.assert_has_calls([call('one', 'two')])
+ mock_path.isfile.assert_called_once()
+ docker_runner.logger.error.assert_called_once_with(
+ 'File env_file does not exist.')
+
+ @patch('dovetail.test_runner.dt_utils')
+ @patch('dovetail.test_runner.os.path')
+ @patch('dovetail.test_runner.dt_cfg')
+ def test_init_onapvvprunner(self, mock_config, mock_path, mock_utils):
+ t_runner.OnapVvpRunner.create_log()
+ mock_path.join.side_effect = ['env_file']
+ mock_config.dovetail_config = {'config_dir': 'one', 'env_file': 'two'}
+ mock_path.isfile.return_value = True
+
+ t_runner.OnapVvpRunner(self.testcase)
+
+ mock_path.join.assert_has_calls([call('one', 'two')])
+ mock_path.isfile.assert_called_once()
+ mock_utils.source_env.assert_called_once_with('env_file')
diff --git a/dovetail/tests/unit/test_testcase.py b/dovetail/tests/unit/test_testcase.py
index 0d303206..81a8de39 100644
--- a/dovetail/tests/unit/test_testcase.py
+++ b/dovetail/tests/unit/test_testcase.py
@@ -43,7 +43,7 @@ class TestcaseTesting(unittest.TestCase):
tcase.Testcase.create_log()
- self.assertEquals(getlogger_obj, tcase.Testcase.logger)
+ self.assertEqual(getlogger_obj, tcase.Testcase.logger)
@patch('dovetail.testcase.Parser')
def test_parse_cmd_no_lines(self, mock_parser):
@@ -55,7 +55,7 @@ class TestcaseTesting(unittest.TestCase):
mock_parser.parse_cmd.assert_called_once_with(
'cmd', testcase)
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
@patch('dovetail.testcase.Parser')
def test_parse_cmd(self, mock_parser):
@@ -70,8 +70,8 @@ class TestcaseTesting(unittest.TestCase):
mock_parser.parse_cmd.assert_called_once_with(
'cmd', testcase)
logger_obj.debug.assert_called_once_with("cmds: ['cmd_lines']")
- self.assertEquals(['cmd_lines'], testcase.cmds)
- self.assertEquals(True, result)
+ self.assertEqual(['cmd_lines'], testcase.cmds)
+ self.assertEqual(True, result)
@patch('dovetail.testcase.dt_cfg')
def test_prepare_cmd_no_cmds(self, mock_config):
@@ -84,12 +84,12 @@ class TestcaseTesting(unittest.TestCase):
logger_obj.error.assert_called_once_with(
'Test case {} has no cmds.'.format(testcase.name()))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
@patch('dovetail.testcase.dt_cfg')
@patch.object(tcase.Testcase, 'parse_cmd')
def test_prepare_cmd_testcase_cmd(self, mock_parse, mock_config):
- testcase = tcase.VnftestTestcase(self.testcase_yaml)
+ testcase = tcase.ShellTestcase(self.testcase_yaml)
testcase.testcase['validate']['cmds'] = ['cmd']
mock_config.dovetail_config = {}
mock_parse.return_value = True
@@ -97,7 +97,7 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.prepare_cmd('type')
mock_parse.assert_called_once_with(['cmd'])
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
@patch('dovetail.testcase.dt_cfg')
@patch.object(tcase.Testcase, 'parse_cmd')
@@ -110,22 +110,22 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.prepare_cmd('type')
mock_parse.assert_called_once_with(['cmd'])
- self.assertEquals(True, result)
+ self.assertEqual(True, result)
def test_str(self):
- testcase = tcase.Testcase(self.testcase_yaml)
+ testcase = tcase.OnapVtpTestcase(self.testcase_yaml)
result = testcase.__str__()
- self.assertEquals(testcase.testcase, result)
+ self.assertEqual(testcase.testcase, result)
def test_objective(self):
- testcase = tcase.Testcase(self.testcase_yaml)
+ testcase = tcase.OnapVvpTestcase(self.testcase_yaml)
testcase.testcase['objective'] = 'objective'
result = testcase.objective()
- self.assertEquals('objective', result)
+ self.assertEqual('objective', result)
@patch('dovetail.testcase.dt_utils')
def test_sub_testcase(self, mock_utils):
@@ -136,7 +136,7 @@ class TestcaseTesting(unittest.TestCase):
mock_utils.get_value_from_dict.assert_called_once_with(
'report.sub_testcase_list', testcase.testcase)
- self.assertEquals('value', result)
+ self.assertEqual('value', result)
def test_sub_testcase_passed(self):
testcase = tcase.Testcase(self.testcase_yaml)
@@ -145,37 +145,49 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.sub_testcase_passed('name', 'passed')
- logger_obj.debug.assert_called_once_with(
- 'sub_testcase_passed: name passed')
- self.assertEquals('passed', result)
+ self.assertEqual('passed', result)
def test_validate_type(self):
testcase = tcase.Testcase(self.testcase_yaml)
result = testcase.validate_type()
- self.assertEquals('functest', result)
+ self.assertEqual('functest', result)
def test_validate_testcase(self):
testcase = tcase.Testcase(self.testcase_yaml)
result = testcase.validate_testcase()
- self.assertEquals('tempest_smoke_serial', result)
+ self.assertEqual('tempest_smoke_serial', result)
+
+ def test_portal_key_file(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.portal_key_file()
+
+ self.assertEqual('tempest_logs/tempest_smoke_serial.html', result)
+
+ def test_vnf_type(self):
+ testcase = tcase.OnapVtpTestcase(self.testcase_yaml)
+
+ result = testcase.vnf_type()
+
+ self.assertEqual('tosca', result)
def test_passed(self):
testcase = tcase.Testcase(self.testcase_yaml)
result = testcase.passed('passed')
- self.assertEquals('passed', result)
+ self.assertEqual('passed', result)
def test_set_get_results(self):
testcase = tcase.Testcase(self.testcase_yaml)
testcase.set_results('results')
- self.assertEquals('results', testcase.get_results())
+ self.assertEqual('results', testcase.get_results())
def test_pre_condition_exists(self):
testcase = tcase.Testcase(self.testcase_yaml)
@@ -183,7 +195,7 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.pre_condition()
- self.assertEquals('pre_condition', result)
+ self.assertEqual('pre_condition', result)
@patch.object(tcase.Testcase, 'pre_condition_cls')
def test_pre_condition_not_exists(self, mock_pre_condition):
@@ -197,7 +209,7 @@ class TestcaseTesting(unittest.TestCase):
mock_pre_condition.assert_called_once_with('functest')
logger_obj.debug.assert_called_once_with(
'Test case: {} pre_condition is empty.'.format(testcase.name()))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
def test_pre_copy_path(self):
testcase = tcase.Testcase(self.testcase_yaml)
@@ -205,14 +217,14 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.pre_copy_path('key')
- self.assertEquals('value', result)
+ self.assertEqual('value', result)
def test_pre_copy_path_error(self):
testcase = tcase.Testcase(self.testcase_yaml)
result = testcase.pre_copy_path('key')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
def test_post_condition_exists(self):
testcase = tcase.Testcase(self.testcase_yaml)
@@ -220,7 +232,7 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.post_condition()
- self.assertEquals('post_condition', result)
+ self.assertEqual('post_condition', result)
@patch.object(tcase.Testcase, 'post_condition_cls')
def test_post_condition_not_exists(self, mock_post_condition):
@@ -234,14 +246,13 @@ class TestcaseTesting(unittest.TestCase):
mock_post_condition.assert_called_once_with('functest')
logger_obj.debug.assert_called_once_with(
'Test case: {} post_condition is empty.'.format(testcase.name()))
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.testcase.os.path')
@patch('dovetail.testcase.dt_cfg')
- @patch.object(tcase.Testcase, 'pre_copy_path')
@patch.object(tcase.Testcase, 'sub_testcase')
- def test_mk_src_file(self, mock_sub_testcase, mock_pre_copy, mock_config,
+ def test_mk_src_file(self, mock_sub_testcase, mock_config,
mock_path, mock_open):
testcase = tcase.Testcase(self.testcase_yaml)
logger_obj = Mock()
@@ -249,8 +260,6 @@ class TestcaseTesting(unittest.TestCase):
mock_config.dovetail_config = {'result_dir': 'value'}
sub_test = 'sub_test'
file_path = 'file_path'
- testcase_src_file = 'testcase_src_file'
- mock_pre_copy.return_value = testcase_src_file
mock_path.join.return_value = file_path
mock_sub_testcase.return_value = [sub_test]
file_obj = Mock()
@@ -258,21 +267,18 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.mk_src_file()
- mock_pre_copy.assert_called_once_with('src_file')
- mock_path.join.assert_called_once_with('value', testcase_src_file)
+ mock_path.join.assert_called_once_with('value', 'tempest_custom.txt')
mock_open.assert_called_once_with(file_path, 'w+')
file_obj.write.assert_called_once_with(sub_test + '\n')
- logger_obj.debug.assert_has_calls([
- call('Save test cases {}'.format(sub_test)),
- call('Save test cases to {}'.format(file_path))])
- self.assertEquals(file_path, result)
+ logger_obj.debug.assert_called_once_with(
+ 'Save test cases to {}'.format(file_path))
+ self.assertEqual(file_path, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.testcase.os.path')
@patch('dovetail.testcase.dt_cfg')
- @patch.object(tcase.Testcase, 'pre_copy_path')
@patch.object(tcase.Testcase, 'sub_testcase')
- def test_mk_src_file_exception(self, mock_sub_testcase, mock_pre_copy,
+ def test_mk_src_file_exception(self, mock_sub_testcase,
mock_config, mock_path, mock_open):
testcase = tcase.Testcase(self.testcase_yaml)
logger_obj = Mock()
@@ -280,19 +286,16 @@ class TestcaseTesting(unittest.TestCase):
mock_config.dovetail_config = {'result_dir': 'value'}
sub_test = 'sub_test'
file_path = 'file_path'
- testcase_src_file = 'testcase_src_file'
- mock_pre_copy.return_value = testcase_src_file
mock_path.join.return_value = file_path
mock_sub_testcase.return_value = [sub_test]
mock_open.return_value.__enter__.side_effect = Exception()
result = testcase.mk_src_file()
- mock_pre_copy.assert_called_once_with('src_file')
- mock_path.join.assert_called_once_with('value', testcase_src_file)
+ mock_path.join.assert_called_once_with('value', 'tempest_custom.txt')
mock_open.assert_called_once_with(file_path, 'w+')
logger_obj.exception('Failed to save: {}'.format(file_path))
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.testcase.TestRunnerFactory')
def test_run(self, mock_factory):
@@ -316,28 +319,28 @@ class TestcaseTesting(unittest.TestCase):
mock_config.dovetail_config = {'type': {'pre_condition': 'value'}}
result = tcase.Testcase.pre_condition_cls('type')
- self.assertEquals('value', result)
+ self.assertEqual('value', result)
@patch('dovetail.testcase.dt_cfg')
def test_pre_condition_cls_key_error(self, mock_config):
mock_config.dovetail_config = {}
result = tcase.Testcase.pre_condition_cls('type')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.testcase.dt_cfg')
def test_post_condition_cls(self, mock_config):
mock_config.dovetail_config = {'type': {'post_condition': 'value'}}
result = tcase.Testcase.post_condition_cls('type')
- self.assertEquals('value', result)
+ self.assertEqual('value', result)
@patch('dovetail.testcase.dt_cfg')
def test_post_condition_cls_key_error(self, mock_config):
mock_config.dovetail_config = {}
result = tcase.Testcase.post_condition_cls('type')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
def test_increase_retry(self):
testcase = tcase.Testcase(self.testcase_yaml)
@@ -346,9 +349,9 @@ class TestcaseTesting(unittest.TestCase):
for _ in range(0, 42):
result = testcase.increase_retry()
- self.assertEquals(42, result)
+ self.assertEqual(42, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.testcase.yaml')
@patch('dovetail.testcase.os')
@patch('dovetail.testcase.TestcaseFactory')
@@ -373,9 +376,9 @@ class TestcaseTesting(unittest.TestCase):
mock_open.assert_called_once_with('testcase_path')
mock_yaml.safe_load.assert_called_once_with(file_obj)
mock_factory.create.assert_called_once_with('value', yaml_dict)
- self.assertEquals(runner_obj, tcase.Testcase.get('key'))
+ self.assertEqual(runner_obj, tcase.Testcase.get('key'))
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.testcase.yaml')
@patch('dovetail.testcase.os')
@patch('dovetail.testcase.TestcaseFactory')
@@ -404,41 +407,33 @@ class TestcaseTesting(unittest.TestCase):
'Failed to create test case: file')
def test_get_none(self):
- self.assertEquals(None, tcase.Testcase.get('unknown'))
+ self.assertEqual(None, tcase.Testcase.get('unknown'))
def test_check_testarea_none(self):
- self.assertEquals((True, ['full']),
- tcase.Testcase.check_testarea(None))
-
- @patch('dovetail.testcase.dt_cfg')
- def test_check_testarea_not_in_config(self, mock_config):
- mock_config.dovetail_config = {'testarea_supported': []}
- self.assertEquals((False, None),
- tcase.Testcase.check_testarea(['area']))
+ self.assertEqual((True, ['full']),
+ tcase.Testcase.check_testarea(None))
@patch('dovetail.testcase.dt_cfg')
def test_check_testarea_full(self, mock_config):
- mock_config.dovetail_config = {'testarea_supported': ['full']}
- self.assertEquals((True, ['full']),
- tcase.Testcase.check_testarea(['full']))
+ self.assertEqual((True, ['full']),
+ tcase.Testcase.check_testarea(['full']))
@patch('dovetail.testcase.dt_cfg')
def test_check_testarea(self, mock_config):
- mock_config.dovetail_config = {'testarea_supported': ['area']}
- self.assertEquals((True, ['area']),
- tcase.Testcase.check_testarea(['area']))
+ self.assertEqual((True, ['area']),
+ tcase.Testcase.check_testarea(['area']))
def test_check_testcase_area(self):
- self.assertEquals(False,
- tcase.Testcase.check_testcase_area(None, None))
+ self.assertEqual(False,
+ tcase.Testcase.check_testcase_area(None, None))
def test_check_testcase_area_full_or_in_testcase(self):
- self.assertEquals(True,
- tcase.Testcase.check_testcase_area(['full'], 'full'))
+ self.assertEqual(True,
+ tcase.Testcase.check_testcase_area(['full'], 'full'))
def test_check_testcase_area_not_in_testcase_or_full(self):
- self.assertEquals(False,
- tcase.Testcase.check_testcase_area(['full'], 'half'))
+ self.assertEqual(False,
+ tcase.Testcase.check_testcase_area(['full'], 'half'))
@patch('dovetail.testcase.dt_utils')
def test_get_testcases_for_testsuite_no_testcases(self, mock_utils):
@@ -450,7 +445,7 @@ class TestcaseTesting(unittest.TestCase):
call('testcases_list', 'suite'),
call('mandatory', None),
call('optional', None)])
- self.assertEquals([], result)
+ self.assertEqual([], result)
@patch('dovetail.testcase.dt_cfg')
@patch('dovetail.testcase.dt_utils')
@@ -479,7 +474,7 @@ class TestcaseTesting(unittest.TestCase):
.format(testsuite['name'])),
call('There is no optional test case in test suite {}'
.format(testsuite['name']))])
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
@patch('dovetail.testcase.dt_cfg')
@patch('dovetail.testcase.dt_utils')
@@ -513,10 +508,10 @@ class TestcaseTesting(unittest.TestCase):
mock_check.assert_has_calls([
call('mandatory', 'area'),
call('optional', 'area')])
- self.assertEquals(['mandatory', 'optional'], result)
- self.assertEquals(
+ self.assertEqual(['mandatory', 'optional'], result)
+ self.assertEqual(
True, tcase.Testcase.testcase_list['mandatory'].is_mandatory)
- self.assertEquals(
+ self.assertEqual(
False, tcase.Testcase.testcase_list['optional'].is_mandatory)
@patch('dovetail.testcase.dt_cfg')
@@ -551,13 +546,12 @@ class TestcaseTesting(unittest.TestCase):
mock_check.assert_has_calls([
call('mandatory', 'area'),
call('optional', 'area')])
- self.assertEquals(['mandatory', 'optional'], result)
- self.assertEquals(True,
- tcase.Testcase.testcase_list['mandatory']
- .is_mandatory)
- self.assertEquals(False,
- tcase.Testcase.testcase_list['optional']
- .is_mandatory)
+ self.assertEqual(['mandatory', 'optional'], result)
+ self.assertEqual(True,
+ tcase.Testcase.testcase_list['mandatory']
+ .is_mandatory)
+ self.assertEqual(False,
+ tcase.Testcase.testcase_list['optional'].is_mandatory)
@patch.object(tcase.Testcase, 'prepare_cmd')
def test_functest_case_prepare_cmd_false(self, mock_prepare):
@@ -567,7 +561,7 @@ class TestcaseTesting(unittest.TestCase):
result = testcase.prepare_cmd('type')
mock_prepare.assert_called_once_with('type')
- self.assertEquals(False, result)
+ self.assertEqual(False, result)
@patch('dovetail.testcase.os.path')
@patch('dovetail.testcase.dt_cfg')
@@ -580,30 +574,29 @@ class TestcaseTesting(unittest.TestCase):
mock_prepare.return_value = True
mock_config.dovetail_config = {
'no_api_validation': True,
- 'functest': {'config': {'dir': 'value'}}}
+ 'functest': {'patches_dir': 'value'}}
mock_path.join.return_value = 'patch_cmd'
result = testcase.prepare_cmd('type')
mock_path.join.assert_called_once_with(
- 'value', 'patches', 'functest', 'disable-api-validation',
- 'apply.sh')
+ 'value', 'functest', 'disable-api-validation', 'apply.sh')
logger_obj.debug.assert_called_once_with(
'Updated list of commands for test run with '
'disabled API response validation: {}'
.format(testcase.cmds))
- self.assertEquals(['patch_cmd'], testcase.cmds)
- self.assertEquals(True, result)
+ self.assertEqual(['patch_cmd'], testcase.cmds)
+ self.assertEqual(True, result)
def test_testfactory_error(self):
- self.assertEquals(None,
- tcase.TestcaseFactory.create('unknown',
- self.testcase_yaml))
+ self.assertEqual(None,
+ tcase.TestcaseFactory.create('unknown',
+ self.testcase_yaml))
def test_testfactory_k8s(self):
k8s_testcase = tcase.TestcaseFactory.create('functest-k8s',
self.testcase_yaml)
- self.assertEquals('functest-k8s', k8s_testcase.type)
+ self.assertEqual('functest-k8s', k8s_testcase.type)
@patch('dovetail.testcase.dt_logger')
def test_testsuite_create_log(self, mock_logger):
@@ -614,7 +607,7 @@ class TestcaseTesting(unittest.TestCase):
tcase.Testsuite.create_log()
- self.assertEquals(getlogger_obj, tcase.Testsuite.logger)
+ self.assertEqual(getlogger_obj, tcase.Testsuite.logger)
def test_testsuite_get_test(self):
suite = tcase.Testsuite('suite')
@@ -622,16 +615,16 @@ class TestcaseTesting(unittest.TestCase):
result = suite.get_test('testcase')
- self.assertEquals('value', result)
+ self.assertEqual('value', result)
def test_testsuite_get_test_not_exists(self):
suite = tcase.Testsuite('suite')
result = suite.get_test('testcase')
- self.assertEquals(None, result)
+ self.assertEqual(None, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('dovetail.testcase.yaml')
@patch('dovetail.testcase.os')
@patch('dovetail.testcase.constants')
@@ -650,16 +643,16 @@ class TestcaseTesting(unittest.TestCase):
mock_os.path.join.assert_called_with('root', 'file')
mock_open.assert_called_once_with('file_path')
mock_yaml.safe_load.assert_called_once_with(file_obj)
- self.assertEquals({'testsuite': 'value'},
- tcase.Testsuite.testsuite_list)
+ self.assertEqual({'testsuite': 'value'},
+ tcase.Testsuite.testsuite_list)
def test_testsuite_get_none(self):
- self.assertEquals(None, tcase.Testsuite.get('unknown'))
+ self.assertEqual(None, tcase.Testsuite.get('unknown'))
def test_testsuite_get(self):
tcase.Testsuite.testsuite_list.update({'key': 'value'})
- self.assertEquals('value', tcase.Testsuite.get('key'))
+ self.assertEqual('value', tcase.Testsuite.get('key'))
def test_testsuite_get_all(self):
tcase.Testsuite.testsuite_list.update({'key': 'value'})
- self.assertEquals({'key': 'value'}, tcase.Testsuite.get_all())
+ self.assertEqual({'key': 'value'}, tcase.Testsuite.get_all())
diff --git a/dovetail/tests/unit/test_testcase.yaml b/dovetail/tests/unit/test_testcase.yaml
index cb947cd9..b4cd3b1d 100644
--- a/dovetail/tests/unit/test_testcase.yaml
+++ b/dovetail/tests/unit/test_testcase.yaml
@@ -1,11 +1,22 @@
+##############################################################################
+# Copyright (c) 2019 opnfv.
+#
+# 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
+##############################################################################
+
---
dovetail.ipv6.tc001:
name: dovetail.ipv6.tc001
objective: VIM ipv6 operations, to create/delete network, port and subnet in bulk operation
+ vnf_type: tosca
validate:
type: functest
testcase: tempest_smoke_serial
report:
+ portal_key_file: tempest_logs/tempest_smoke_serial.html
sub_testcase_list:
- tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_network
- tempest.api.network.test_networks.BulkNetworkOpsIpV7Test.test_bulk_create_delete_port
diff --git a/dovetail/tests/unit/utils/test_dovetail_config.py b/dovetail/tests/unit/utils/test_dovetail_config.py
index c7ac5b96..8e835f49 100644
--- a/dovetail/tests/unit/utils/test_dovetail_config.py
+++ b/dovetail/tests/unit/utils/test_dovetail_config.py
@@ -39,7 +39,7 @@ class DovetailConfigTesting(unittest.TestCase):
dovetail_cfg.set_leaf_dict(dict_to_test, ['aa', 'bb', 'cc'], 'val')
- self.assertEquals({'aa': {'bb': {'cc': 'val'}}}, dict_to_test)
+ self.assertEqual({'aa': {'bb': {'cc': 'val'}}}, dict_to_test)
@patch.object(DovetailConfig, 'set_leaf_dict')
@patch.object(DovetailConfig, 'dovetail_config')
diff --git a/dovetail/tests/unit/utils/test_dovetail_logger.py b/dovetail/tests/unit/utils/test_dovetail_logger.py
index a8867890..a70c0503 100644
--- a/dovetail/tests/unit/utils/test_dovetail_logger.py
+++ b/dovetail/tests/unit/utils/test_dovetail_logger.py
@@ -49,7 +49,7 @@ class DovetailLoggerTesting(unittest.TestCase):
logger_name = 'name'
dovetail_logger = Logger(logger_name)
mock_logging.getLogger.assert_called_once_with(logger_name)
- self.assertEquals(dovetail_logger.logger.propagate, 0)
+ self.assertEqual(dovetail_logger.logger.propagate, 0)
logger.setLevel.assert_called_once_with(level_const_debug)
mock_os.path.exists.assert_called_once_with(file_path)
# mock_os.makedirs.assert_called_once_with(file_path)
@@ -60,7 +60,7 @@ class DovetailLoggerTesting(unittest.TestCase):
file_handler_obj.setLevel.assert_called_once_with(level_const_info)
logger.addHandler.assert_has_calls([
call(stream_handler_obj), call(file_handler_obj)])
- self.assertEquals(dovetail_logger.getLogger(), logger)
+ self.assertEqual(dovetail_logger.getLogger(), logger)
@patch('sys.stdout')
@patch('dovetail.utils.dovetail_logger.os')
@@ -84,7 +84,7 @@ class DovetailLoggerTesting(unittest.TestCase):
logger_name = 'name'
dovetail_logger = Logger(logger_name)
mock_logging.getLogger.assert_called_once_with(logger_name)
- self.assertEquals(dovetail_logger.logger.propagate, 0)
+ self.assertEqual(dovetail_logger.logger.propagate, 0)
logger.setLevel.assert_called_once_with(level_const_debug)
mock_os.path.exists.assert_called_once_with(file_path)
# mock_os.makedirs.assert_called_once_with(file_path)
@@ -95,4 +95,4 @@ class DovetailLoggerTesting(unittest.TestCase):
file_handler_obj.setLevel.assert_called_once_with(level_const_debug)
logger.addHandler.assert_has_calls([
call(stream_handler_obj), call(file_handler_obj)])
- self.assertEquals(dovetail_logger.getLogger(), logger)
+ self.assertEqual(dovetail_logger.getLogger(), logger)
diff --git a/dovetail/tests/unit/utils/test_dovetail_utils.py b/dovetail/tests/unit/utils/test_dovetail_utils.py
index 0f0e14f3..7d1fddc1 100644
--- a/dovetail/tests/unit/utils/test_dovetail_utils.py
+++ b/dovetail/tests/unit/utils/test_dovetail_utils.py
@@ -27,7 +27,7 @@ class DovetailUtilsTesting(unittest.TestCase):
pass
@patch('sys.stdout')
- @patch('__builtin__.print')
+ @patch('builtins.print')
def test_exec_log_no_verbose(self, mock_print, mock_stdout):
dovetail_utils.exec_log(verbose=False, logger=None, msg='',
level='info', flush=True)
@@ -36,7 +36,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_stdout.flush.assert_not_called()
@patch('sys.stdout')
- @patch('__builtin__.print')
+ @patch('builtins.print')
def test_exec_log_no_logger_flush(self, mock_print, mock_stdout):
message = 'message'
@@ -47,7 +47,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_stdout.flush.assert_called_once()
@patch('sys.stdout')
- @patch('__builtin__.print')
+ @patch('builtins.print')
def test_exec_log_no_logger_no_flush(self, mock_print, mock_stdout):
message = 'message'
@@ -134,7 +134,7 @@ class DovetailUtilsTesting(unittest.TestCase):
.format(file_path))
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_read_plain_file(self, mock_path, mock_open):
file_path = 'known_file'
@@ -149,7 +149,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_open.assert_called_once_with(file_path, 'r')
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_read_plain_file_raised_exception(self, mock_path, mock_open):
logger = Mock()
@@ -182,7 +182,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_read_yaml_file(self, mock_path, mock_open, mock_load):
file_obj = Mock()
@@ -200,7 +200,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_load.assert_called_once_with(file_obj)
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_read_yaml_file_raised_exception(self, mock_path, mock_open):
logger = Mock()
@@ -227,7 +227,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_path.isfile.return_value = False
logger = Mock()
- expected = ''
+ expected = {}
result = dovetail_utils.get_hosts_info(logger)
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
@@ -235,7 +235,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_get_hosts_info_not_yaml(self, mock_path, mock_open, mock_load):
file_path = 'file_path'
@@ -248,7 +248,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_load.return_value = None
logger = Mock()
- expected = ''
+ expected = {}
result = dovetail_utils.get_hosts_info(logger)
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
@@ -260,7 +260,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_get_hosts_info_no_hosts_info(self, mock_path, mock_open,
mock_load):
@@ -274,7 +274,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_load.return_value = {'a': 'b'}
logger = Mock()
- expected = ''
+ expected = {}
result = dovetail_utils.get_hosts_info(logger)
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
@@ -287,7 +287,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_get_hosts_info_no_hostname(self, mock_path, mock_open, mock_load):
file_path = 'file_path'
@@ -299,7 +299,7 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_open.return_value.__enter__.return_value = file_obj
mock_load.return_value = {'hosts_info': {'127.0.0.1': []}}
- expected = ''
+ expected = {}
result = dovetail_utils.get_hosts_info()
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
@@ -310,7 +310,7 @@ class DovetailUtilsTesting(unittest.TestCase):
@patch('dovetail.utils.dovetail_utils.add_hosts_info')
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_get_hosts_info_no_valid_hostname(self, mock_path, mock_open,
mock_load, mock_fn):
@@ -324,20 +324,20 @@ class DovetailUtilsTesting(unittest.TestCase):
hosts_info = {'127.0.0.1': [None]}
mock_load.return_value = {'hosts_info': hosts_info}
- expected = ''
+ expected = {}
result = dovetail_utils.get_hosts_info()
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
mock_path.isfile.assert_called_once_with(file_complete_name)
mock_open.assert_called_once_with(file_complete_name)
mock_load.assert_called_once_with(file_obj)
- mock_fn.assert_called_once_with(hosts_info.keys()[0],
- hosts_info.values()[0])
+ mock_fn.assert_called_once_with(list(hosts_info.keys())[0],
+ list(hosts_info.values())[0])
self.assertEqual(expected, result)
@patch('dovetail.utils.dovetail_utils.add_hosts_info')
@patch('yaml.safe_load')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path', autospec=True)
def test_get_hosts_info(self, mock_path, mock_open, mock_load, mock_fn):
file_path = 'file_path'
@@ -353,7 +353,7 @@ class DovetailUtilsTesting(unittest.TestCase):
logger = Mock()
names_str = ' '.join(hostnames)
- expected = ' --add-host=\'{}\':{} '.format(names_str, hosts_ip)
+ expected = {names_str: hosts_ip}
result = dovetail_utils.get_hosts_info(logger)
mock_path.join.assert_called_once_with(file_path, 'hosts.yaml')
@@ -430,7 +430,7 @@ class DovetailUtilsTesting(unittest.TestCase):
date = '2018-08-10 05:12:27'
logger = Mock()
- expected = '0m0s'
+ expected = '0.0m0s'
result = dovetail_utils.get_duration(date, date, logger)
self.assertEqual(expected, result)
@@ -510,15 +510,12 @@ class DovetailUtilsTesting(unittest.TestCase):
hosts_obj.add.assert_called_once_with([entry_obj])
hosts_obj.write.assert_called_once()
- @patch('dovetail.utils.dovetail_utils.objwalk')
- def test_get_obj_by_path(self, mock_walk):
- path = dist_path = 'path'
- obj = 'obj'
- mock_walk.return_value = [(path, obj)]
-
- expected = obj
- result = dovetail_utils.get_obj_by_path(obj, dist_path)
+ def test_get_obj_by_path(self):
+ obj = {'list': ['a', 'b'], 'name': 'name'}
+ dst_path = ('name',)
+ expected = 'name'
+ result = dovetail_utils.get_obj_by_path(obj, dst_path)
self.assertEqual(expected, result)
@patch('dovetail.utils.dovetail_utils.objwalk')
@@ -533,7 +530,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.environ')
def test_source_env(self, mock_env, mock_open):
file_path = 'file_path'
@@ -547,68 +544,47 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_open.assert_called_once_with(file_path, 'r')
mock_env.update.assert_called_once_with({env_name: env_value})
- @patch('dovetail.utils.dovetail_utils.exec_cmd')
- def test_check_docker_version(self, mock_exec):
- server_version = client_version = '1.12.3'
- server_ret = client_ret = 0
- mock_exec.side_effect = [(server_ret, server_version),
- (client_ret, client_version)]
+ @patch('dovetail.utils.dovetail_utils.docker')
+ def test_check_docker_version(self, mock_docker):
+ server_version = '1.12.3'
+ client_obj = Mock()
+ mock_docker.from_env.return_value = client_obj
+ client_obj.version.return_value = {'Version': server_version}
logger = Mock()
dovetail_utils.check_docker_version(logger)
- mock_exec.assert_has_calls(
- [call("sudo docker version -f'{{.Server.Version}}'",
- logger=logger),
- call("sudo docker version -f'{{.Client.Version}}'",
- logger=logger)])
logger.debug.assert_has_calls(
- [call('docker server version: {}'.format(server_version)),
- call('docker client version: {}'.format(client_version))])
+ [call('Docker server version: {}'.format(server_version))])
- @patch('dovetail.utils.dovetail_utils.exec_cmd')
- def test_check_docker_version_error(self, mock_exec):
- server_version = client_version = '1.12.3'
- server_ret = client_ret = 1
- mock_exec.side_effect = [(server_ret, server_version),
- (client_ret, client_version)]
+ @patch('dovetail.utils.dovetail_utils.docker')
+ def test_check_docker_version_error(self, mock_docker):
+ client_obj = Mock()
+ mock_docker.from_env.return_value = client_obj
+ client_obj.version.return_value = {}
logger = Mock()
dovetail_utils.check_docker_version(logger)
- mock_exec.assert_has_calls(
- [call("sudo docker version -f'{{.Server.Version}}'",
- logger=logger),
- call("sudo docker version -f'{{.Client.Version}}'",
- logger=logger)])
logger.error.assert_has_calls(
[call("Don't support this Docker server version. "
- "Docker server should be updated to at least 1.12.3."),
- call("Don't support this Docker client version. "
- "Docker client should be updated to at least 1.12.3.")])
-
- @patch('dovetail.utils.dovetail_utils.exec_cmd')
- def test_check_docker_version_less_than(self, mock_exec):
- server_version = client_version = '1.12.1'
- server_ret = client_ret = 0
- mock_exec.side_effect = [(server_ret, server_version),
- (client_ret, client_version)]
+ "Docker server should be updated to at least 1.12.3.")])
+
+ @patch('dovetail.utils.dovetail_utils.docker')
+ def test_check_docker_version_less_than(self, mock_docker):
+ server_version = '1.12.1'
+ client_obj = Mock()
+ mock_docker.from_env.return_value = client_obj
+ client_obj.version.return_value = {'Version': server_version}
logger = Mock()
dovetail_utils.check_docker_version(logger)
- mock_exec.assert_has_calls(
- [call("sudo docker version -f'{{.Server.Version}}'",
- logger=logger),
- call("sudo docker version -f'{{.Client.Version}}'",
- logger=logger)])
logger.error.assert_has_calls(
[call("Don't support this Docker server version. "
- "Docker server should be updated to at least 1.12.3."),
- call("Don't support this Docker client version. "
- "Docker client should be updated to at least 1.12.3.")])
+ "Docker server should be updated to at least 1.12.3.")])
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path')
@patch('os.listdir')
@patch('json.load')
@@ -640,7 +616,7 @@ class DovetailUtilsTesting(unittest.TestCase):
file_obj.write.assert_called_once_with(file_content_str)
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path')
@patch('os.listdir')
def test_combine_files_read_exception(self, mock_listdir, mock_path,
@@ -663,7 +639,7 @@ class DovetailUtilsTesting(unittest.TestCase):
'Failed to read file {}.'.format(file_complete_name))
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path')
@patch('os.listdir')
@patch('json.load')
@@ -699,7 +675,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('json.dump')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path')
@patch('dovetail.utils.dovetail_utils.check_https_enabled')
@patch('os.getenv')
@@ -818,7 +794,7 @@ class DovetailUtilsTesting(unittest.TestCase):
.format(services_exception_msg))
self.assertEqual(expected, result)
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('os.path')
@patch('dovetail.utils.dovetail_utils.check_https_enabled')
@patch('os.getenv')
@@ -1050,7 +1026,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('os.path')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('yaml.safe_load')
def test_get_inventory_password(self, mock_load, mock_open, mock_path):
name = 'name'
@@ -1089,7 +1065,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('os.path')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('yaml.safe_load')
def test_get_inventory_key_filename(self, mock_load, mock_open, mock_path):
name = 'name'
@@ -1133,7 +1109,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('os.path')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('yaml.safe_load')
def test_get_inventory_other(self, mock_load, mock_open, mock_path):
name = 'name'
@@ -1166,7 +1142,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('os.path')
- @patch('__builtin__.open')
+ @patch('builtins.open')
@patch('yaml.safe_load')
def test_get_inventory_keyerror(self, mock_load, mock_open, mock_path):
name = 'name'
@@ -1197,7 +1173,7 @@ class DovetailUtilsTesting(unittest.TestCase):
self.assertEqual(expected, result)
@patch('os.path')
- @patch('__builtin__.open')
+ @patch('builtins.open')
def test_get_inventory_exception(self, mock_open, mock_path):
inventory_file_name = 'inventory'
pod_file_name = 'pod'
@@ -1254,9 +1230,9 @@ class DovetailUtilsTesting(unittest.TestCase):
subp_stdout = Mock()
subprocess_obj.stdout = subp_stdout
subprocess_obj.wait.return_value = 0
- subp_stdout.readline.side_effect = [cmd_output, '']
+ subp_stdout.readline.side_effect = [cmd_output.encode()]
- expected = (0, 'line')
+ expected = (0, "b'line'")
result = dovetail_utils.exec_cmd(
cmd, logger=logger, exit_on_error=True, info=False,
exec_msg_on=True, err_msg='', verbose=verbose,
@@ -1272,7 +1248,7 @@ class DovetailUtilsTesting(unittest.TestCase):
subp_stdout.close.assert_called_once_with()
subprocess_obj.wait.assert_called_once_with()
mock_getenv.assert_called_once_with('DEBUG')
- mock_bar.assert_called_once_with(1)
+ # mock_bar.assert_called_once_with(1)
self.assertEqual(expected, result)
@patch('sys.exit')
@@ -1297,7 +1273,7 @@ class DovetailUtilsTesting(unittest.TestCase):
subp_stdout = Mock()
subprocess_obj.stdout = subp_stdout
subprocess_obj.wait.return_value = 1
- subp_stdout.readline.side_effect = [cmd_output, '']
+ subp_stdout.readline.side_effect = [cmd_output.encode()]
dovetail_utils.exec_cmd(
cmd, logger=logger, exit_on_error=True, info=False,
@@ -1315,7 +1291,7 @@ class DovetailUtilsTesting(unittest.TestCase):
subp_stdout.close.assert_called_once_with()
subprocess_obj.wait.assert_called_once_with()
mock_getenv.assert_called_once_with('DEBUG')
- mock_bar.assert_called_once_with(1)
+ # mock_bar.assert_called_once_with(1)
mock_exit.assert_called_once_with(1)
@patch('os.path', autospec=True)
@@ -1355,3 +1331,72 @@ class DovetailUtilsTesting(unittest.TestCase):
mock_host.assert_called_once()
mock_endpoint.assert_called_once()
mock_hardware.assert_called_once()
+
+ @patch('json.dumps')
+ @patch('dovetail.utils.dovetail_utils.requests')
+ @patch('os.getenv')
+ def test_push_results_to_db(self, mock_getenv, mock_requests, mock_dumps):
+ logger = Mock()
+ case_name = 'case_name'
+ details = {'criteria': 'PASS'}
+ start_date = 'start_date'
+ stop_date = 'stop_date'
+ mock_getenv.side_effect = [
+ 'url', 'installer', 'scenario', 'pod_name', 'build_tag', 'version']
+ post_req = Mock()
+ post_req.raise_for_status.return_value = None
+ mock_requests.post.return_value = post_req
+ mock_dumps.return_value = {"project_name": "dovetail"}
+
+ dovetail_utils.push_results_to_db(
+ case_name, details, start_date, stop_date, logger)
+
+ mock_requests.post.assert_called_once_with(
+ 'url',
+ data={"project_name": "dovetail"},
+ headers={"Content-Type": "application/json"})
+ logger.debug.assert_called_once_with(
+ "The results were successfully pushed to DB.")
+
+ @patch('json.dumps')
+ @patch('dovetail.utils.dovetail_utils.requests')
+ @patch('os.getenv')
+ def test_push_results_to_db_exception(self, mock_getenv, mock_requests,
+ mock_dumps):
+ logger = Mock()
+ case_name = 'case_name'
+ details = {'criteria': 'PASS'}
+ start_date = 'start_date'
+ stop_date = 'stop_date'
+ mock_getenv.side_effect = [
+ 'url', 'installer', 'scenario', 'pod_name', 'build_tag', 'version']
+ post_req = Mock()
+ post_req.raise_for_status.side_effect = Exception()
+ mock_requests.post.return_value = post_req
+ mock_dumps.return_value = {"project_name": "dovetail"}
+ dovetail_utils.push_results_to_db(
+ case_name, details, start_date, stop_date, logger)
+
+ logger.debug.assert_not_called()
+ logger.exception.assert_called_once_with(
+ "The results cannot be pushed to DB.")
+
+ def test_get_mount_list_error_mount(self):
+ project_cfg = {'mounts': ['aaa']}
+ res, msg = dovetail_utils.get_mount_list(project_cfg)
+ self.assertEqual(None, res)
+ self.assertEqual('Error mount aaa.', msg)
+
+ def test_get_mount_list_keyerror_exception(self):
+ project_cfg = {'mounts': ['aaa=a,bbb=b', '']}
+ res, msg = dovetail_utils.get_mount_list(project_cfg)
+ self.assertEqual(None, res)
+ self.assertEqual("'target'", str(msg))
+
+ def test_get_mount_list(self):
+ project_cfg = {'mounts': ['target=a,source=b', '']}
+ res, msg = dovetail_utils.get_mount_list(project_cfg)
+ expected = [{'Source': 'b', 'Type': 'bind', 'ReadOnly': False,
+ 'Target': 'a'}]
+ self.assertEqual(expected, res)
+ self.assertEqual('Successfully to get mount list.', msg)