diff --git a/test/py/ganeti.block.drbd_unittest.py b/test/py/ganeti.block.drbd_unittest.py index cc30a09c6d14d93dcbaf6d3d5bd69af72eb987ec..87b3d031026ae8409ea2694ee9e53275fe682991 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 545939346fdd89d3734c3ade7704a1acdc709b5d..8249847f3312602b5981ac9c91c6693990c7c070 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.