This patch fixes the LXC hypervisor tests, which were failing on Squeeze due to multiple reasons.
* Factor out the directory creation, and mock it when invoking tests * Replace AssertNone with AssertEqual(..., None) Signed-off-by: Hrvoje Ribicic <[email protected]> --- lib/hypervisor/hv_lxc.py | 14 ++++++++--- test/py/ganeti.hypervisor.hv_lxc_unittest.py | 37 +++++++++++++++++----------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py index 43f316c..7293659 100644 --- a/lib/hypervisor/hv_lxc.py +++ b/lib/hypervisor/hv_lxc.py @@ -104,10 +104,7 @@ class LXCHypervisor(hv_base.BaseHypervisor): def __init__(self): hv_base.BaseHypervisor.__init__(self) - utils.EnsureDirs([ - (self._ROOT_DIR, self._DIR_MODE), - (self._LOG_DIR, 0750), - ]) + self._EnsureDirectoryExistence() @staticmethod def _GetMountSubdirs(path): @@ -157,6 +154,15 @@ class LXCHypervisor(hv_base.BaseHypervisor): """ return utils.PathJoin(cls._ROOT_DIR, instance_name + ".stash") + def _EnsureDirectoryExistence(self): + """Ensures all the directories needed for LXC use exist. + + """ + utils.EnsureDirs([ + (self._ROOT_DIR, self._DIR_MODE), + (self._LOG_DIR, 0750), + ]) + def _SaveInstanceStash(self, instance_name, data): """Save data to the instance stash file in serialized format. diff --git a/test/py/ganeti.hypervisor.hv_lxc_unittest.py b/test/py/ganeti.hypervisor.hv_lxc_unittest.py index 59567a3..2285046 100755 --- a/test/py/ganeti.hypervisor.hv_lxc_unittest.py +++ b/test/py/ganeti.hypervisor.hv_lxc_unittest.py @@ -58,6 +58,19 @@ def RunResultOk(stdout): return utils.RunResult(0, None, stdout, "", [], None, None) +class LXCHypervisorTestCase(unittest.TestCase): + """Used to test classes instantiating the LXC hypervisor class. + + """ + def setUp(self): + self.ensure_fn = LXCHypervisor._EnsureDirectoryExistence + LXCHypervisor._EnsureDirectoryExistence = mock.Mock(return_value=False) + self.hv = LXCHypervisor() + + def tearDown(self): + LXCHypervisor._EnsureDirectoryExistence = self.ensure_fn + + class TestConsole(unittest.TestCase): def test(self): instance = objects.Instance(name="lxc.example.com", @@ -85,9 +98,9 @@ class TestLXCIsInstanceAlive(unittest.TestCase): self.assertFalse(LXCHypervisor._IsInstanceAlive("inst2")) -class TestLXCHypervisorGetInstanceInfo(unittest.TestCase): +class TestLXCHypervisorGetInstanceInfo(LXCHypervisorTestCase): def setUp(self): - self.hv = LXCHypervisor() + super(TestLXCHypervisorGetInstanceInfo, self).setUp() self.hv._GetCgroupCpuList = mock.Mock(return_value=[1, 3]) self.hv._GetCgroupMemoryLimit = mock.Mock(return_value=128*(1024**2)) @@ -100,10 +113,10 @@ class TestLXCHypervisorGetInstanceInfo(unittest.TestCase): @patch_object(LXCHypervisor, "_IsInstanceAlive") def testInactiveOrNonexistentInstance(self, isalive_mock): isalive_mock.return_value = False - self.assertIsNone(self.hv.GetInstanceInfo("inst1")) + self.assertEqual(self.hv.GetInstanceInfo("inst1"), None) -class TestCgroupMount(unittest.TestCase): +class TestCgroupMount(LXCHypervisorTestCase): @patch_object(utils, "GetMounts") @patch_object(LXCHypervisor, "_MountCgroupSubsystem") def testGetOrPrepareCgroupSubsysMountPoint(self, mntcgsub_mock, getmnt_mock): @@ -114,26 +127,22 @@ class TestCgroupMount(unittest.TestCase): ("cpumem", "/sys/fs/cgroup/cpumem", "cgroup", "cpu,memory,rw,relatime"), ] mntcgsub_mock.return_value = "/foo" - hv = LXCHypervisor() - self.assertEqual(hv._GetOrPrepareCgroupSubsysMountPoint("cpuset"), + self.assertEqual(self.hv._GetOrPrepareCgroupSubsysMountPoint("cpuset"), "/sys/fs/cgroup/cpuset") - self.assertEqual(hv._GetOrPrepareCgroupSubsysMountPoint("devices"), + self.assertEqual(self.hv._GetOrPrepareCgroupSubsysMountPoint("devices"), "/sys/fs/cgroup/devices") - self.assertEqual(hv._GetOrPrepareCgroupSubsysMountPoint("cpu"), + self.assertEqual(self.hv._GetOrPrepareCgroupSubsysMountPoint("cpu"), "/sys/fs/cgroup/cpumem") - self.assertEqual(hv._GetOrPrepareCgroupSubsysMountPoint("memory"), + self.assertEqual(self.hv._GetOrPrepareCgroupSubsysMountPoint("memory"), "/sys/fs/cgroup/cpumem") - self.assertEqual(hv._GetOrPrepareCgroupSubsysMountPoint("freezer"), + self.assertEqual(self.hv._GetOrPrepareCgroupSubsysMountPoint("freezer"), "/foo") mntcgsub_mock.assert_called_with("freezer") -class TestCgroupReadData(unittest.TestCase): +class TestCgroupReadData(LXCHypervisorTestCase): cgroot = os.path.abspath(testutils.TestDataFilename("cgroup_root")) - def setUp(self): - self.hv = LXCHypervisor() - @patch_object(LXCHypervisor, "_CGROUP_ROOT_DIR", cgroot) def testGetCgroupMountPoint(self): self.assertEqual(self.hv._GetCgroupMountPoint(), self.cgroot) -- 2.0.0.526.g5318336
