Source code for unittests.test_pytest_helpers

# Copyright (c) 2011 - 2017, Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""``test_pytest_helpers.py``

`Unittests for helpers functions`

"""

import sys
import os
from unittest.mock import MagicMock

import pytest

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'plugins')))
from pytest_helpers import get_failure_reason, get_suite_name, get_tcname, get_steps, get_brief, \
    get_skipped_reason, get_html_xml_path


[docs]@pytest.fixture() def report(): class Report(object): def __init__(self): self.nodeid = None self.keywords = {} return Report()
[docs]def test_tcname_basic(report): """Test of pytest_helpers.get_tcname() function. """ report.nodeid = "ons_tests/test_synapsert.py::test_demo_synapsert1" report.keywords = None report.keywords = {"test_demo_synapsert1": 1, "tests": 1, "ons_tests/test_synapsert.py": 1} assert get_tcname(report) == "test_demo_synapsert1"
[docs]def test_tcname_argvalue(report): report.nodeid = "ons_tests/test_synapsert_param.py::TestCaseCreation::()::test_case[test_1-doc0-1]" report.keywords = None report.keywords = {'test_1-doc0-1': 1, 'tests': 1, 'parametrize': 1, 'ons_tests/test_synapsert_param.py': 1, 'test_case[test_1-doc0-1]': 1, '()': 1, 'TestCaseCreation': 1} assert get_tcname(report) == "test_1"
[docs]def test_tcname_keywords(report): report.nodeid = "ons_tests/ui/test_ui.py::TestSnmpCliXmlrpc::()::test_cli_set__xmlrpc_get[" \ "test_cli_set__xmlrpc_get_simplified_ons_lag__LagsLocal_selected_get_Unselected_value_for_dynamic_lag]" report.keywords = None report.keywords = {'tests': 1, 'skipif': 1, 'TestSnmpCliXmlrpc': 1, '()': 1, 'simplified': 1, 'test_cli_set__xmlrpc_get_simplified_ons_lag__LagsLocal_selected_get_Unselected_value_for_dynamic_lag': 1, 'cli_set': 1, 'test_cli_set__xmlrpc_get[test_cli_set__xmlrpc_get_simplified_ons_lag__LagsLocal_selected_get_Unselected_value_for_dynamic_lag]': 1, 'ons_tests/ui/test_ui.py': 1} assert get_tcname(report) == "test_cli_set__xmlrpc_get_simplified_ons_lag__LagsLocal_selected_get_Unselected_value_for_dynamic_lag"
[docs]def test_brackets_are_removed(): report.nodeid = "ons_tests/test_synapsert.py::test_properly_formed_pfc_frames_are_transmitted_01[Manual]" report.keywords = None report.keywords = {"test_demo_synapsert1": 1, "tests": 1, "ons_tests/test_synapsert.py": 1} assert get_tcname(report) == "test_properly_formed_pfc_frames_are_transmitted_01"
[docs]def test_bad_fixture_param_value_is_handled(): report.nodeid = "ons_tests/test_synapsert.py::test_func_01[Manual-test_none_priority_paused_if_priority_enable_vector_set_to_0_part1_13]" report.keywords = None report.keywords = {"test_demo_synapsert1": 1, "tests": 1, "ons_tests/test_synapsert.py": 1} assert get_tcname(report) == "test_none_priority_paused_if_priority_enable_vector_set_to_0_part1_13"
[docs]def test_bad_fixture_param_value_is_handled_with_parametrize(): report.nodeid = "ons_tests/test_synapsert.py::test_func_01[Manual-test_none_priority_paused_if_priority_enable_vector_set_to_0_part1_13]" report.keywords = None report.keywords = {"test_demo_synapsert1": 1, "tests": 1, "ons_tests/test_synapsert.py": 1, 'parametrize': 1} assert get_tcname(report) == "test_none_priority_paused_if_priority_enable_vector_set_to_0_part1_13"
[docs]def test_get_failure_reason(): """Check if get_failure_reason(data) is work correct. """ data1 = ''' env = {\'switches\': [{\'instance\': <ServerProxy for 10.0.5.102:8082/RPC2>, \'ports_coun...3\', \'vlab4\', \'vlab5\', \'vlab6\', \'vlab7\', \'vlab8\', \'vlab9\', \'vlab10\', \'vlab11\']}}\n\n def test_demo_synapsert1(env):\n """\n @brief Simple test links synapsert test1\n @steps\n -# First step\n -# Second step\n @endsteps\n """\n> assert False, "Some Undetermined Exception"\n E AssertionError: Some Undetermined Exception\n\nenv = {\'switches\': [{\'instance\': <ServerProxy for 10.0.5.102:8082/RPC2>, \'ports_coun...3\', \'vlab4\', \'vlab5\', \'vlab6\', \'vlab7\', \'vlab8\', \'vlab9\', \'vlab10\', \'vlab11\']}}\n\n ons_tests/test_synapsert.py:17: AssertionError ''' data2 = """ ons_tests/test_synapsert.py:17: in test_demo_synapsert1\n > assert False, "Some Undetermined Exception"\nE AssertionError: Some Undetermined Exception""" data3 = """test failure ons_tests/ui/test_ui.py:1026: in test_xmlrpc_set__snmp_get (name, snmp_get_results, argvalues_dictionary['snmp_get_result']) E AssertionError: In test_xmlrpc_set__snmp_get_standalone_ons_lag__Ports2LagAdmin_partnerAdminPortNumber_set_max_valid_value test case, \ snmp-get result is not correct: [{u'1': [[Gauge32(400)], [Gauge32(1)]]}] == [{u'1': [[400], [400]]}]""" data4 = """test failure ons_tests/ui/test_ui.py:1014: in test_xmlrpc_set__snmp_get xmlrpc_set_res = self._xmlrpc_run(env.switch, argvalues_dictionary['xmlrpc_set']) ons_tests/ui/test_ui.py:538: in _xmlrpc_run helpers.wait_until_value_is_changed(switches[int(key)], *xml_call[1:]) ../testlib/helpers.py:765: in wait_until_value_is_changed parameter = switch_instance.getprop(table_name, parameter_name, row_id) ../testlib/switches.py:341: in getprop return getattr(self.xmlproxy, "%s.%s.get.%s" % (dst, table, param))(row_id) ../testlib/xmlrpc_proxy.py:118: in __call__ return self.__send(self.__name, args) /usr/lib/python2.7/xmlrpclib.py:1578: in __request verbose=self.__verbose /usr/lib/python2.7/xmlrpclib.py:1264: in request return self.single_request(host, handler, request_body, verbose) /usr/lib/python2.7/xmlrpclib.py:1297: in single_request return self.parse_response(response) /usr/lib/python2.7/xmlrpclib.py:1473: in parse_response return u.close() /usr/lib/python2.7/xmlrpclib.py:793: in close raise Fault(**self._stack[0]) E Fault: Fault -701: 'Invalid row ID:param1'""" assert get_failure_reason(data1) == "AssertionError: Some Undetermined Exception", "It is not work with tb_long" assert get_failure_reason(data2) == "AssertionError: Some Undetermined Exception", "It is not work with tb_short" assert get_failure_reason(data3) == \ "AssertionError: In test_xmlrpc_set__snmp_get_standalone_ons_lag__Ports2LagAdmin_partnerAdminPortNumber_set_max_valid_value test case, " \ "snmp-get result is not correct: [{u'1': [[Gauge32(400)], [Gauge32(1)]]}] == [{u'1': [[400], [400]]}]" assert get_failure_reason(data4) == "Fault: Fault -701: 'Invalid row ID:param1'"
[docs]def test_get_suite_name(): """Test of pytest_helpers.get_tcname() function. """ nodeid1 = "ons_tests/test_synapsert.py::test_demo_synapsert2" assert get_suite_name(nodeid1) == "ons_tests.test_synapsert"
STEP_STRING = """Verify that ports can be added to LAG. Steps:: -# Delete LAGs table. -# Create test LAG. -# Assign 2 ports to test LAG. -# Verify that there are 2 ports in test LAG. -# Remove the ports in test LAG -# Delete test LAG. """ GOOD_STEPS = """\ -# Delete LAGs table. -# Create test LAG. -# Assign 2 ports to test LAG. -# Verify that there are 2 ports in test LAG. -# Remove the ports in test LAG -# Delete test LAG."""
[docs]def test_get_steps_doc(): test_item = MagicMock(**{"funcargs": {"doc": [STEP_STRING]}}) steps = get_steps(test_item, "") assert steps == GOOD_STEPS
[docs]def test_get_steps_docstring(): test_item = MagicMock(**{"funcargs": {"doc_string": [STEP_STRING]}}) steps = get_steps(test_item, "") assert steps == GOOD_STEPS
[docs]def test_get_steps_callspec(): test_item = MagicMock(**{"callspec.params": {"doc": [STEP_STRING]}, "funcargs": {}}) steps = get_steps(test_item, "") assert steps == GOOD_STEPS
[docs]def test_get_steps_inspect(): def something(): """Verify that ports can be added to LAG. Steps:: -# Delete LAGs table. -# Create test LAG. -# Assign 2 ports to test LAG. -# Verify that there are 2 ports in test LAG. -# Remove the ports in test LAG -# Delete test LAG. """ pass test_item = MagicMock( **{ "function": something, "callspec.params": {}, "funcargs": {}}) steps = get_steps(test_item, "") assert steps == GOOD_STEPS
GOOD_BRIEF = "Verify that ports can be added to LAG."
[docs]def test_get_brief_doc(): test_item = MagicMock(**{"funcargs": {"doc": [STEP_STRING]}}) steps = get_brief(test_item, "") assert steps == GOOD_BRIEF
[docs]def test_get_brief_docstring(): test_item = MagicMock(**{"funcargs": {"doc_string": [STEP_STRING]}}) steps = get_brief(test_item, "") assert steps == GOOD_BRIEF
[docs]def test_get_brief_callspec(): test_item = MagicMock(**{"callspec.params": {"doc": [STEP_STRING]}, "funcargs": {}}) steps = get_brief(test_item, "") assert steps == GOOD_BRIEF
[docs]def test_get_brief_inspect(): def something(): """Verify that ports can be added to LAG. Steps:: -# Delete LAGs table. -# Create test LAG. -# Assign 2 ports to test LAG. -# Verify that there are 2 ports in test LAG. -# Remove the ports in test LAG -# Delete test LAG. """ pass test_item = MagicMock( **{ "function": something, "callspec.params": {}, "funcargs": {}}) steps = get_brief(test_item, "") assert steps == GOOD_BRIEF
[docs]def test_get_failure_reason_TypeError_returns_None(): assert get_failure_reason(1) is None assert get_failure_reason(object()) is None assert get_failure_reason(lambda x: 1.0) is None
[docs]def test_get_skipped_reason_TypeError_returns_None(): assert get_skipped_reason(1) is None assert get_skipped_reason(object()) is None assert get_skipped_reason(lambda x: 1.0) is None
[docs]def test_get_html_xml_path_non_string(): assert get_html_xml_path(1, 1) is "undetermined" assert get_html_xml_path({}, 1) is "undetermined"