Currently there is no test for the code path of LUInstanceReplaceDisks for the replace_new_secondary option. This is problematic, because it is currently being modified.
Signed-off-by: Aaron Karper <[email protected]> --- test/py/cmdlib/instance_storage_unittest.py | 31 +++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/test/py/cmdlib/instance_storage_unittest.py b/test/py/cmdlib/instance_storage_unittest.py index 2296078..d32b8f4 100755 --- a/test/py/cmdlib/instance_storage_unittest.py +++ b/test/py/cmdlib/instance_storage_unittest.py @@ -205,7 +205,7 @@ class TestLUInstanceReplaceDisks(CmdlibTestCase): self.node2 = self.cfg.AddNewNode() def MakeOpCode(self, disks, early_release=False, ignore_ipolicy=False, - remote_node=False, mode='replace_auto'): + remote_node=False, mode='replace_auto', iallocator=None): return opcodes.OpInstanceReplaceDisks( instance_name=self.instance.name, instance_uuid=self.instance.uuid, @@ -215,7 +215,7 @@ class TestLUInstanceReplaceDisks(CmdlibTestCase): disks=disks, remote_node=self.node2.name if remote_node else None, remote_node_uuid=self.node2.uuid if remote_node else None, - iallocator=None) + iallocator=iallocator) def testInvalidTemplate(self): self.instance = self.cfg.AddNewInstance(admin_state=constants.ADMINST_UP, @@ -265,5 +265,32 @@ class TestLUInstanceReplaceDisks(CmdlibTestCase): self.ExecOpCode(opcode) self.rpc.call_blockdev_rename.assert_any_call(self.node2.uuid, []) + def testReplaceSecondaryNew(self): + disk = self.cfg.CreateDisk(dev_type=constants.DT_DRBD8, + primary_node=self.node1, + secondary_node=self.node2) + self.instance = self.cfg.AddNewInstance(admin_state=constants.ADMINST_UP, + disk_template='drbd', + disks=[disk], + primary_node=self.node1, + secondary_node=self.node2) + + self.SimulateDiskFailure(self.node2, 0) + node3 = self.cfg.AddNewNode() + self.MockOut(instance_storage.TLReplaceDisks, '_RunAllocator', + return_value=node3.uuid) + self.rpc.call_drbd_disconnect_net().__getitem__().fail_msg = None + self.rpc.call_blockdev_shutdown().fail_msg = None + self.rpc.call_drbd_attach_net().fail_msg = None + + opcode = self.MakeOpCode([], mode='replace_new_secondary', + iallocator='hail') + self.ExecOpCode(opcode) + self.rpc.call_blockdev_shutdown.assert_any_call( + self.node2.uuid, (disk, self.instance)) + self.rpc.call_drbd_attach_net.assert_any_call( + [self.node1.uuid, node3.uuid], ([disk], self.instance), + self.instance.name, False) + if __name__ == "__main__": testutils.GanetiTestProgram() -- 2.2.0.rc0.207.ga3a616c
