From 74db37c06aaaabdc2611d8e9736c997b2666a8e5 Mon Sep 17 00:00:00 2001 From: Thomas Thrainer <thomasth@google.com> Date: Mon, 29 Apr 2013 14:02:39 +0200 Subject: [PATCH] Add test for version dispatching code Based on the version of DRBD (as reported through /proc/drbd), the DRBD8 class chooses helper objects which adapt for the differences between DRBD <= 8.3 and DRBD 8.4. This new test verifies that the proper objects are created. Signed-off-by: Thomas Thrainer <thomasth@google.com> Signed-off-by: Michele Tartara <mtartara@google.com> Reviewed-by: Michele Tartara <mtartara@google.com> --- test/py/ganeti.block.drbd_unittest.py | 42 +++++++++++++++++++++++++++ test/py/testutils.py | 15 ++++++++++ 2 files changed, 57 insertions(+) diff --git a/test/py/ganeti.block.drbd_unittest.py b/test/py/ganeti.block.drbd_unittest.py index cc30a09c6..87b3d0310 100755 --- a/test/py/ganeti.block.drbd_unittest.py +++ b/test/py/ganeti.block.drbd_unittest.py @@ -375,5 +375,47 @@ class TestDRBD8Status(testutils.GanetiTestCase): filename=self.proc80ev_data) +class TestDRBD8Construction(testutils.GanetiTestCase): + def setUp(self): + """Read in txt data""" + testutils.GanetiTestCase.setUp(self) + self.proc80_info = \ + drbd_info.DRBD8Info.CreateFromFile( + filename=testutils.TestDataFilename("proc_drbd8.txt")) + self.proc83_info = \ + drbd_info.DRBD8Info.CreateFromFile( + filename=testutils.TestDataFilename("proc_drbd83.txt")) + self.proc84_info = \ + drbd_info.DRBD8Info.CreateFromFile( + filename=testutils.TestDataFilename("proc_drbd84.txt")) + + self.test_unique_id = ("hosta.com", 123, "host2.com", 123, 0, "secret") + + @testutils.patch_object(drbd_info.DRBD8Info, "CreateFromFile") + def testConstructionWith80Data(self, mock_create_from_file): + mock_create_from_file.return_value = self.proc80_info + + inst = drbd.DRBD8(self.test_unique_id, [], 123, {}) + self.assertEqual(inst._show_info_cls, drbd_info.DRBD83ShowInfo) + self.assertTrue(isinstance(inst._cmd_gen, drbd_cmdgen.DRBD83CmdGenerator)) + + @testutils.patch_object(drbd_info.DRBD8Info, "CreateFromFile") + def testConstructionWith83Data(self, mock_create_from_file): + mock_create_from_file.return_value = self.proc83_info + + inst = drbd.DRBD8(self.test_unique_id, [], 123, {}) + self.assertEqual(inst._show_info_cls, drbd_info.DRBD83ShowInfo) + self.assertTrue(isinstance(inst._cmd_gen, drbd_cmdgen.DRBD83CmdGenerator)) + + @testutils.patch_object(drbd_info.DRBD8Info, "CreateFromFile") + def testConstructionWith84Data(self, mock_create_from_file): + mock_create_from_file.return_value = self.proc84_info + + inst = drbd.DRBD8(self.test_unique_id, [], 123, {}) + self.assertEqual(inst._show_info_cls, drbd_info.DRBD84ShowInfo) + # FIXME: add assertion for right class here! + self.assertEqual(inst._cmd_gen, None) + + if __name__ == "__main__": testutils.GanetiTestProgram() diff --git a/test/py/testutils.py b/test/py/testutils.py index 545939346..8249847f3 100644 --- a/test/py/testutils.py +++ b/test/py/testutils.py @@ -209,6 +209,21 @@ class GanetiTestCase(unittest.TestCase): return fname +def patch_object(*args, **kwargs): + """Unified patch_object for various versions of Python Mock. + + Different Python Mock versions provide incompatible versions of patching an + object. More recent versions use _patch_object, older ones used patch_object. + This function unifies the different variations. + + """ + import mock + try: + return mock._patch_object(*args, **kwargs) + except AttributeError: + return mock.patch_object(*args, **kwargs) + + def UnifyValueType(data): """Converts all tuples into lists. -- GitLab