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 0686450cae)
pull/46656/head
Matt Clay 6 years ago
parent d5a84098a8
commit 623cafb709

@ -39,6 +39,9 @@ class TestGalaxy(unittest.TestCase):
'''creating prerequisites for installing a role; setUpClass occurs ONCE whereas setUp occurs with every method tested.''' '''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 # 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"): if os.path.exists("./delete_me"):
shutil.rmtree("./delete_me") shutil.rmtree("./delete_me")
@ -89,6 +92,9 @@ class TestGalaxy(unittest.TestCase):
if os.path.isdir(cls.role_path): if os.path.isdir(cls.role_path):
shutil.rmtree(cls.role_path) shutil.rmtree(cls.role_path)
os.chdir('/')
shutil.rmtree(cls.temp_dir)
def setUp(self): def setUp(self):
self.default_args = ['ansible-galaxy'] self.default_args = ['ansible-galaxy']

@ -21,6 +21,7 @@ __metaclass__ = type
import os import os
import json import json
import tempfile
from ansible.compat.tests import unittest from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch from ansible.compat.tests.mock import patch
@ -63,6 +64,15 @@ class AnsibleFailJson(Exception):
class TestCnosModule(unittest.TestCase): 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, def execute_module(self, failed=False, changed=False, commands=None,
sort=True, defaults=False): sort=True, defaults=False):

@ -23,6 +23,8 @@ import io
import inspect import inspect
from shutil import copyfile, move from shutil import copyfile, move
import difflib import difflib
import tempfile
import shutil
class AnsibleFailJson(Exception): class AnsibleFailJson(Exception):
@ -169,25 +171,29 @@ class TestInterfacesFileModule(unittest.TestCase):
} }
for testname, options_list in testcases.items(): for testname, options_list in testcases.items():
for testfile in self.getTestFiles(): for testfile in self.getTestFiles():
path = os.path.join(fixture_path, testfile) with tempfile.NamedTemporaryFile() as temp_file:
lines, ifaces = interfaces_file.read_interfaces_file(module, path) src_path = os.path.join(fixture_path, testfile)
backupp = module.backup_local(path) path = temp_file.name
options = options_list[0] shutil.copy(src_path, path)
for state in ['present', 'absent']: lines, ifaces = interfaces_file.read_interfaces_file(module, path)
fail_json_iterations = [] backupp = module.backup_local(path)
options['state'] = state options = options_list[0]
try: for state in ['present', 'absent']:
_, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state']) fail_json_iterations = []
except AnsibleFailJson as e: options['state'] = state
fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % try:
(str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) _, lines = interfaces_file.setInterfaceOption(module, lines,
interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) options['iface'], options['option'], options['value'], options['state'])
except AnsibleFailJson as e:
self.compareStringWithFile("\n=====\n".join(fail_json_iterations), "%s_%s.exceptions.txt" % (testfile, testname)) fail_json_iterations.append("fail_json message: %s\noptions:\n%s" %
(str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': '))))
self.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname)) interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path)
self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname))
self.compareFileToBackup(path, backupp) 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): def test_change_method(self):
testcases = { testcases = {
@ -202,21 +208,24 @@ class TestInterfacesFileModule(unittest.TestCase):
} }
for testname, options_list in testcases.items(): for testname, options_list in testcases.items():
for testfile in self.getTestFiles(): for testfile in self.getTestFiles():
path = os.path.join(fixture_path, testfile) with tempfile.NamedTemporaryFile() as temp_file:
lines, ifaces = interfaces_file.read_interfaces_file(module, path) src_path = os.path.join(fixture_path, testfile)
backupp = module.backup_local(path) path = temp_file.name
options = options_list[0] shutil.copy(src_path, path)
fail_json_iterations = [] lines, ifaces = interfaces_file.read_interfaces_file(module, path)
try: backupp = module.backup_local(path)
_, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state']) options = options_list[0]
except AnsibleFailJson as e: fail_json_iterations = []
fail_json_iterations.append("fail_json message: %s\noptions:\n%s" % try:
(str(e), json.dumps(options, sort_keys=True, indent=4, separators=(',', ': ')))) _, lines = interfaces_file.setInterfaceOption(module, lines, options['iface'], options['option'], options['value'], options['state'])
interfaces_file.write_changes(module, [d['line'] for d in lines if 'line' in d], path) 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.compareInterfacesLinesToFile(lines, testfile, "%s_%s" % (testfile, testname))
self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname)) self.compareInterfacesToFile(ifaces, testfile, "%s_%s.json" % (testfile, testname))
# Restore backup # Restore backup
move(backupp, path) move(backupp, path)

Loading…
Cancel
Save