From 09e61f29e9b877a314b9fe638a46aceb94243123 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Mon, 17 Sep 2018 20:27:14 -0700 Subject: [PATCH] Fix unit tests which modify the source tree. (#45763) * Fix CNOS unit test log usage. * Use temp dir for Galaxy unit tests. * Write to temp files in interfaces_file unit test. * Fix log placement in netapp_e_ldap unit test. (cherry picked from commit 0686450cae86720c804d2f6b6d09fa3abba9dacc) --- test/units/cli/test_galaxy.py | 6 ++ .../units/modules/network/cnos/cnos_module.py | 10 +++ .../modules/network/cnos/test_cnos_bgp.py | 15 ++-- .../network/cnos/test_cnos_ethernet.py | 13 ++- .../network/cnos/test_cnos_portchannel.py | 13 ++- .../modules/network/cnos/test_cnos_vlag.py | 7 +- .../modules/network/cnos/test_cnos_vlan.py | 5 +- .../storage/netapp/test_netapp_e_ldap.py | 17 +++- .../interfaces_file/test_interfaces_file.py | 79 +++++++++++-------- 9 files changed, 99 insertions(+), 66 deletions(-) diff --git a/test/units/cli/test_galaxy.py b/test/units/cli/test_galaxy.py index b0f9eccdd41..eb5075f1be9 100644 --- a/test/units/cli/test_galaxy.py +++ b/test/units/cli/test_galaxy.py @@ -39,6 +39,9 @@ class TestGalaxy(unittest.TestCase): '''creating prerequisites for installing a role; setUpClass occurs ONCE whereas setUp occurs with every method tested.''' # class data for easy viewing: role_dir, role_tar, role_name, role_req, role_path + cls.temp_dir = tempfile.mkdtemp(prefix='ansible-test_galaxy-') + os.chdir(cls.temp_dir) + if os.path.exists("./delete_me"): shutil.rmtree("./delete_me") @@ -89,6 +92,9 @@ class TestGalaxy(unittest.TestCase): if os.path.isdir(cls.role_path): shutil.rmtree(cls.role_path) + os.chdir('/') + shutil.rmtree(cls.temp_dir) + def setUp(self): self.default_args = ['ansible-galaxy'] diff --git a/test/units/modules/network/cnos/cnos_module.py b/test/units/modules/network/cnos/cnos_module.py index bbcf7b2ac2b..4cf00a5de2c 100644 --- a/test/units/modules/network/cnos/cnos_module.py +++ b/test/units/modules/network/cnos/cnos_module.py @@ -21,6 +21,7 @@ __metaclass__ = type import os import json +import tempfile from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch @@ -59,6 +60,15 @@ class AnsibleFailJson(Exception): class TestCnosModule(unittest.TestCase): + def setUp(self): + super(TestCnosModule, self).setUp() + + self.test_log = tempfile.mkstemp(prefix='ansible-test-cnos-module-', suffix='.log')[1] + + def tearDown(self): + super(TestCnosModule, self).tearDown() + + os.remove(self.test_log) def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False): diff --git a/test/units/modules/network/cnos/test_cnos_bgp.py b/test/units/modules/network/cnos/test_cnos_bgp.py index 7315774b088..63c4107a99a 100644 --- a/test/units/modules/network/cnos/test_cnos_bgp.py +++ b/test/units/modules/network/cnos/test_cnos_bgp.py @@ -22,7 +22,6 @@ class TestCnosBgpModule(TestCnosModule): def tearDown(self): super(TestCnosBgpModule, self).tearDown() self.mock_run_cnos_commands.stop() - os.remove('test.log') def load_fixtures(self, commands=None, transport='cli'): self.run_cnos_commands.return_value = [load_fixture('cnos_bgp_config.cfg')] @@ -30,7 +29,7 @@ class TestCnosBgpModule(TestCnosModule): def test_bgp_neighbor(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'neighbor', 'bgpArg2': '10.241.107.40', 'bgpArg3': '13', 'bgpArg4': 'address-family', 'bgpArg5': 'ipv4', 'bgpArg6': 'next-hop-self'}) @@ -41,7 +40,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_dampening(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'address-family', 'bgpArg2': 'ipv4', 'bgpArg3': 'dampening', 'bgpArg4': '13', 'bgpArg5': '233', 'bgpArg6': '333', @@ -53,7 +52,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_network(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'address-family', 'bgpArg2': 'ipv4', 'bgpArg3': 'network', 'bgpArg4': '1.2.3.4/5', 'bgpArg5': 'backdoor'}) @@ -64,7 +63,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_clusterid(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'cluster-id', 'bgpArg2': '10.241.107.40'}) result = self.execute_module(changed=True) expected_result = 'BGP configurations accomplished' @@ -73,7 +72,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_graceful_restart(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'graceful-restart', 'bgpArg2': '333'}) result = self.execute_module(changed=True) expected_result = 'BGP configurations accomplished' @@ -82,7 +81,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_routerid(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'router-id', 'bgpArg2': '1.2.3.4'}) result = self.execute_module(changed=True) expected_result = 'BGP configurations accomplished' @@ -91,7 +90,7 @@ class TestCnosBgpModule(TestCnosModule): def test_cnos_bgp_vrf(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'asNum': '33', + 'outputfile': self.test_log, 'asNum': '33', 'bgpArg1': 'vrf'}) result = self.execute_module(changed=True) expected_result = 'BGP configurations accomplished' diff --git a/test/units/modules/network/cnos/test_cnos_ethernet.py b/test/units/modules/network/cnos/test_cnos_ethernet.py index f6512737f18..62529498dd4 100644 --- a/test/units/modules/network/cnos/test_cnos_ethernet.py +++ b/test/units/modules/network/cnos/test_cnos_ethernet.py @@ -22,7 +22,6 @@ class TestCnosEthernetModule(TestCnosModule): def tearDown(self): super(TestCnosEthernetModule, self).tearDown() self.mock_run_cnos_commands.stop() - os.remove('test.log') def load_fixtures(self, commands=None, transport='cli'): self.run_cnos_commands.return_value = [load_fixture('cnos_ethernet_config.cfg')] @@ -30,7 +29,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_ethernet_channelgroup(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'channel-group', 'interfaceArg2': '33', 'interfaceArg3': 'on'}) result = self.execute_module(changed=True) expected_result = 'Interface Configuration is Accomplished' @@ -39,7 +38,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_cnos_ethernet_lacp(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'lacp', 'interfaceArg2': 'port-priority', 'interfaceArg3': '33'}) result = self.execute_module(changed=True) expected_result = 'Interface Configuration is Accomplished' @@ -48,7 +47,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_cnos_ethernet_duplex(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'duplex', 'interfaceArg2': 'auto'}) result = self.execute_module(changed=True) expected_result = 'Interface Configuration is Accomplished' @@ -57,7 +56,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_cnos_ethernet_mtu(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'mtu', 'interfaceArg2': '1300'}) result = self.execute_module(changed=True) expected_result = 'Interface Configuration is Accomplished' @@ -66,7 +65,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_cnos_ethernet_spanningtree(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'spanning-tree', 'interfaceArg2': 'mst', 'interfaceArg3': '33-35', 'interfaceArg4': 'cost', 'interfaceArg5': '33'}) @@ -77,7 +76,7 @@ class TestCnosEthernetModule(TestCnosModule): def test_cnos_ethernet_ip(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceOption': 'ethernet', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceOption': 'ethernet', 'interfaceRange': '33', 'interfaceArg1': 'ip', 'interfaceArg2': 'port', 'interfaceArg3': 'anil'}) result = self.execute_module(changed=True) diff --git a/test/units/modules/network/cnos/test_cnos_portchannel.py b/test/units/modules/network/cnos/test_cnos_portchannel.py index 0e15f28a79b..b6c75eb0535 100644 --- a/test/units/modules/network/cnos/test_cnos_portchannel.py +++ b/test/units/modules/network/cnos/test_cnos_portchannel.py @@ -22,7 +22,6 @@ class TestCnosPortchannelModule(TestCnosModule): def tearDown(self): super(TestCnosPortchannelModule, self).tearDown() self.mock_run_cnos_commands.stop() - os.remove('test.log') def load_fixtures(self, commands=None, transport='cli'): self.run_cnos_commands.return_value = [load_fixture('cnos_portchannel_config.cfg')] @@ -30,7 +29,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_portchannel_channelgroup(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceRange': '33', 'interfaceArg1': 'channel-group', 'interfaceArg2': '33', 'interfaceArg3': 'on'}) result = self.execute_module(changed=True) expected_result = 'Port Channel Configuration is done' @@ -39,7 +38,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_cnos_portchannel_lacp(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceRange': '33', 'interfaceArg1': 'lacp', 'interfaceArg2': 'port-priority', 'interfaceArg3': '33'}) result = self.execute_module(changed=True) expected_result = 'Port Channel Configuration is done' @@ -48,7 +47,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_cnos_portchannel_duplex(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '2', + 'outputfile': self.test_log, 'interfaceRange': '2', 'interfaceArg1': 'duplex', 'interfaceArg2': 'auto'}) result = self.execute_module(changed=True) expected_result = 'Port Channel Configuration is done' @@ -57,7 +56,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_cnos_portchannel_mtu(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceRange': '33', 'interfaceArg1': 'mtu', 'interfaceArg2': '1300'}) result = self.execute_module(changed=True) expected_result = 'Port Channel Configuration is done' @@ -66,7 +65,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_cnos_portchannel_spanningtree(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceRange': '33', 'interfaceArg1': 'spanning-tree', 'interfaceArg2': 'mst', 'interfaceArg3': '33-35', 'interfaceArg4': 'cost', 'interfaceArg5': '33'}) @@ -77,7 +76,7 @@ class TestCnosPortchannelModule(TestCnosModule): def test_cnos_portchannel_ip(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'interfaceRange': '33', + 'outputfile': self.test_log, 'interfaceRange': '33', 'interfaceArg1': 'ip', 'interfaceArg2': 'port', 'interfaceArg3': 'anil'}) result = self.execute_module(changed=True) diff --git a/test/units/modules/network/cnos/test_cnos_vlag.py b/test/units/modules/network/cnos/test_cnos_vlag.py index 981281a07cc..1013a120e65 100644 --- a/test/units/modules/network/cnos/test_cnos_vlag.py +++ b/test/units/modules/network/cnos/test_cnos_vlag.py @@ -22,7 +22,6 @@ class TestCnosVlagModule(TestCnosModule): def tearDown(self): super(TestCnosVlagModule, self).tearDown() self.mock_run_cnos_commands.stop() - os.remove('test.log') def load_fixtures(self, commands=None, transport='cli'): self.run_cnos_commands.return_value = [load_fixture('cnos_vlag_config.cfg')] @@ -30,7 +29,7 @@ class TestCnosVlagModule(TestCnosModule): def test_cnos_vlag_enable(self): set_module_args({'username': 'admin', 'password': 'admin', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'vlagArg1': 'enable'}) + 'outputfile': self.test_log, 'vlagArg1': 'enable'}) result = self.execute_module(changed=True) expected_result = 'VLAG configurations accomplished' self.assertEqual(result['msg'], expected_result) @@ -38,7 +37,7 @@ class TestCnosVlagModule(TestCnosModule): def test_cnos_vlag_instance(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'vlagArg1': 'instance', + 'outputfile': self.test_log, 'vlagArg1': 'instance', 'vlagArg2': '33', 'vlagArg3': '333'}) result = self.execute_module(changed=True) expected_result = 'VLAG configurations accomplished' @@ -47,7 +46,7 @@ class TestCnosVlagModule(TestCnosModule): def test_cnos_vlag_hlthchk(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'vlagArg1': 'hlthchk', + 'outputfile': self.test_log, 'vlagArg1': 'hlthchk', 'vlagArg2': 'keepalive-interval', 'vlagArg3': '131'}) result = self.execute_module(changed=True) expected_result = 'VLAG configurations accomplished' diff --git a/test/units/modules/network/cnos/test_cnos_vlan.py b/test/units/modules/network/cnos/test_cnos_vlan.py index ce41a035734..54c461cf185 100644 --- a/test/units/modules/network/cnos/test_cnos_vlan.py +++ b/test/units/modules/network/cnos/test_cnos_vlan.py @@ -22,7 +22,6 @@ class TestCnosVlanModule(TestCnosModule): def tearDown(self): super(TestCnosVlanModule, self).tearDown() self.mock_run_cnos_commands.stop() - os.remove('test.log') def load_fixtures(self, commands=None, transport='cli'): self.run_cnos_commands.return_value = [load_fixture('cnos_vlan_config.cfg')] @@ -30,7 +29,7 @@ class TestCnosVlanModule(TestCnosModule): def test_cnos_vlan_create(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'vlanArg1': '13', + 'outputfile': self.test_log, 'vlanArg1': '13', 'vlanArg2': 'name', 'vlanArg3': 'anil'}) result = self.execute_module(changed=True) expected_result = 'VLAN configuration is accomplished' @@ -39,7 +38,7 @@ class TestCnosVlanModule(TestCnosModule): def test_cnos_vlan_state(self): set_module_args({'username': 'admin', 'password': 'pass', 'host': '10.241.107.39', 'deviceType': 'g8272_cnos', - 'outputfile': 'test.log', 'vlanArg1': '13', + 'outputfile': self.test_log, 'vlanArg1': '13', 'vlanArg2': 'state', 'vlanArg3': 'active'}) result = self.execute_module(changed=True) expected_result = 'VLAN configuration is accomplished' diff --git a/test/units/modules/storage/netapp/test_netapp_e_ldap.py b/test/units/modules/storage/netapp/test_netapp_e_ldap.py index f06528a46a8..d90a1ddaeee 100644 --- a/test/units/modules/storage/netapp/test_netapp_e_ldap.py +++ b/test/units/modules/storage/netapp/test_netapp_e_ldap.py @@ -1,6 +1,10 @@ # (c) 2018, NetApp Inc. # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +import os +import shutil +import tempfile + from ansible.modules.storage.netapp.netapp_e_ldap import Ldap from units.modules.utils import ModuleTestCase, set_module_args, AnsibleFailJson, AnsibleExitJson @@ -15,11 +19,20 @@ class LdapTest(ModuleTestCase): 'api_url': 'http://localhost', 'ssid': '1', 'state': 'absent', - 'log_path': './debug.log' - } REQ_FUNC = 'ansible.modules.storage.netapp.netapp_e_ldap.request' + def setUp(self): + super(LdapTest, self).setUp() + + self.temp_dir = tempfile.mkdtemp('ansible-test_netapp_e_ldap-') + self.REQUIRED_PARAMS['log_path'] = os.path.join(self.temp_dir, 'debug.log') + + def tearDown(self): + super(LdapTest, self).tearDown() + + shutil.rmtree(self.temp_dir) + def _make_ldap_instance(self): self._set_args() ldap = Ldap() diff --git a/test/units/modules/system/interfaces_file/test_interfaces_file.py b/test/units/modules/system/interfaces_file/test_interfaces_file.py index 8fc8ec39ed8..512452a0c2d 100644 --- a/test/units/modules/system/interfaces_file/test_interfaces_file.py +++ b/test/units/modules/system/interfaces_file/test_interfaces_file.py @@ -23,6 +23,8 @@ import io import inspect from shutil import copyfile, move import difflib +import tempfile +import shutil class AnsibleFailJson(Exception): @@ -169,25 +171,29 @@ class TestInterfacesFileModule(unittest.TestCase): } for testname, options_list in testcases.items(): for testfile in self.getTestFiles(): - path = os.path.join(fixture_path, testfile) - lines, ifaces = interfaces_file.read_interfaces_file(module, path) - backupp = module.backup_local(path) - options = options_list[0] - for state in ['present', 'absent']: - fail_json_iterations = [] - options['state'] = state - try: - _, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state']) - except AnsibleFailJson as e: - fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % - (str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) - interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) - - self.compareStringWithFile("\n=====\n".join(fail_json_iterations), "%s_%s.exceptions.txt" % (testfile, testname)) - - self.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname)) - self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname)) - self.compareFileToBackup(path, backupp) + with tempfile.NamedTemporaryFile() as temp_file: + src_path = os.path.join(fixture_path, testfile) + path = temp_file.name + shutil.copy(src_path, path) + lines, ifaces = interfaces_file.read_interfaces_file(module, path) + backupp = module.backup_local(path) + options = options_list[0] + for state in ['present', 'absent']: + fail_json_iterations = [] + options['state'] = state + try: + _, lines = interfaces_file.setInterfaceOption(module, lines, + options['iface'], options['option'], options['value'], options['state']) + except AnsibleFailJson as e: + fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % + (str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) + interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) + + self.compareStringWithFile("\n=====\n".join(fail_json_iterations), "%s_%s.exceptions.txt" % (testfile, testname)) + + self.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname)) + self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname)) + self.compareFileToBackup(path, backupp) def test_change_method(self): testcases = { @@ -202,21 +208,24 @@ class TestInterfacesFileModule(unittest.TestCase): } for testname, options_list in testcases.items(): for testfile in self.getTestFiles(): - path = os.path.join(fixture_path, testfile) - lines, ifaces = interfaces_file.read_interfaces_file(module, path) - backupp = module.backup_local(path) - options = options_list[0] - fail_json_iterations = [] - try: - _, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state']) - except AnsibleFailJson as e: - fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % - (str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) - interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) + with tempfile.NamedTemporaryFile() as temp_file: + src_path = os.path.join(fixture_path, testfile) + path = temp_file.name + shutil.copy(src_path, path) + lines, ifaces = interfaces_file.read_interfaces_file(module, path) + backupp = module.backup_local(path) + options = options_list[0] + fail_json_iterations = [] + try: + _, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state']) + except AnsibleFailJson as e: + fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % + (str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) + interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) - self.compareStringWithFile("\n=====\n".join(fail_json_iterations), "%s_%s.exceptions.txt" % (testfile, testname)) + self.compareStringWithFile("\n=====\n".join(fail_json_iterations), "%s_%s.exceptions.txt" % (testfile, testname)) - self.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname)) - self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname)) - # Restore backup - move(backupp, path) + self.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname)) + self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname)) + # Restore backup + move(backupp, path)