diff --git a/test/ganeti.bdev_unittest.py b/test/ganeti.bdev_unittest.py index e43fd1e68a9d2a0d9c66417c90a0aad14955eb16..04823eb62fe9351b1065f101593d94f577a0cae5 100755 --- a/test/ganeti.bdev_unittest.py +++ b/test/ganeti.bdev_unittest.py @@ -101,6 +101,7 @@ class TestDRBD8Status(testutils.GanetiTestCase): def setUp(self): """Read in txt data""" + testutils.GanetiTestCase.setUp(self) proc_data = self._TestDataFilename("proc_drbd8.txt") self.proc_data = bdev.DRBD8._GetProcData(filename=proc_data) self.mass_data = bdev.DRBD8._MassageProcData(self.proc_data) diff --git a/test/ganeti.ssh_unittest.py b/test/ganeti.ssh_unittest.py index 2121355be7ec51b5e4ca5e052bbeb71473515fc7..d9999294702895765808c25dbc36c5b4418c7afd 100755 --- a/test/ganeti.ssh_unittest.py +++ b/test/ganeti.ssh_unittest.py @@ -37,12 +37,13 @@ class TestKnownHosts(testutils.GanetiTestCase): """Test case for function writing the known_hosts file""" def setUp(self): - self.tmpfile = tempfile.NamedTemporaryFile() + testutils.GanetiTestCase.setUp(self) + self.tmpfile = self._CreateTempFile() def test(self): cfg = mocks.FakeConfig() - ssh.WriteKnownHostsFile(cfg, self.tmpfile.name) - self.assertFileContent(self.tmpfile.name, + ssh.WriteKnownHostsFile(cfg, self.tmpfile) + self.assertFileContent(self.tmpfile, "%s ssh-rsa %s\n" % (cfg.GetClusterName(), mocks.FAKE_CLUSTER_KEY)) diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 29fddfdd0563d79ef0692128ce8871680ab638fd..133d687655d4478473c8c03088adf1c867304a93 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -128,13 +128,9 @@ class TestRunCmd(testutils.GanetiTestCase): """Testing case for the RunCmd function""" def setUp(self): + testutils.GanetiTestCase.setUp(self) self.magic = time.ctime() + " ganeti test" - fh, self.fname = tempfile.mkstemp() - os.close(fh) - - def tearDown(self): - if self.fname: - utils.RemoveFile(self.fname) + self.fname = self._CreateTempFile() def testOk(self): """Test successful exit code""" @@ -451,21 +447,14 @@ class TestSshKeys(testutils.GanetiTestCase): 'ssh-dss AAAAB3NzaC1w520smc01ms0jfJs22 root@key-b') def setUp(self): - (fd, self.tmpname) = tempfile.mkstemp(prefix='ganeti-test') + testutils.GanetiTestCase.setUp(self) + self.tmpname = self._CreateTempFile() + handle = open(self.tmpname, 'w') try: - handle = os.fdopen(fd, 'w') - try: - handle.write("%s\n" % TestSshKeys.KEY_A) - handle.write("%s\n" % TestSshKeys.KEY_B) - finally: - handle.close() - except: - utils.RemoveFile(self.tmpname) - raise - - def tearDown(self): - utils.RemoveFile(self.tmpname) - del self.tmpname + handle.write("%s\n" % TestSshKeys.KEY_A) + handle.write("%s\n" % TestSshKeys.KEY_B) + finally: + handle.close() def testAddingNewKey(self): AddAuthorizedKey(self.tmpname, 'ssh-dss AAAAB3NzaC1kc3MAAACB root@test') @@ -517,22 +506,15 @@ class TestEtcHosts(testutils.GanetiTestCase): """Test functions modifying /etc/hosts""" def setUp(self): - (fd, self.tmpname) = tempfile.mkstemp(prefix='ganeti-test') + testutils.GanetiTestCase.setUp(self) + self.tmpname = self._CreateTempFile() + handle = open(self.tmpname, 'w') try: - handle = os.fdopen(fd, 'w') - try: - handle.write('# This is a test file for /etc/hosts\n') - handle.write('127.0.0.1\tlocalhost\n') - handle.write('192.168.1.1 router gw\n') - finally: - handle.close() - except: - utils.RemoveFile(self.tmpname) - raise - - def tearDown(self): - utils.RemoveFile(self.tmpname) - del self.tmpname + handle.write('# This is a test file for /etc/hosts\n') + handle.write('127.0.0.1\tlocalhost\n') + handle.write('192.168.1.1 router gw\n') + finally: + handle.close() def testSettingNewIp(self): SetEtcHostsEntry(self.tmpname, '1.2.3.4', 'myhost.domain.tld', ['myhost']) diff --git a/test/testutils.py b/test/testutils.py index 737962e46b59752752410c3b2d8ececcb80bc3f9..f2980ddc91249004e4b37373bdbc3cae5473910e 100644 --- a/test/testutils.py +++ b/test/testutils.py @@ -22,12 +22,29 @@ """Utilities for unit testing""" import os +import tempfile import unittest from ganeti import utils class GanetiTestCase(unittest.TestCase): + """Helper class for unittesting. + + This class defines a few utility functions that help in building + unittests. Child classes must call the parent setup and cleanup. + + """ + def setUp(self): + self._temp_files = [] + + def tearDown(self): + while self._temp_files: + try: + utils.RemoveFile(self._temp_files.pop()) + except EnvironmentError, err: + pass + def assertFileContent(self, file_name, expected_content): """Checks the content of a file is what we expect. @@ -67,3 +84,15 @@ class GanetiTestCase(unittest.TestCase): """ return utils.ReadFile(cls._TestDataFilename(name)) + + def _CreateTempFile(self): + """Creates a temporary file and adds it to the internal cleanup list. + + This method simplifies the creation and cleanup of temporary files + during tests. + + """ + fh, fname = tempfile.mkstemp(prefix="ganeti-test", suffix=".tmp") + os.close(fh) + self._temp_files.append(fname) + return fname