please ignore, as described in the cover letter, this patch isn't necessary

On Mon Oct 06 2014 at 4:42:33 PM Aaron Karper <[email protected]> wrote:

> The masterd.instance is mocked out and checked that the correct
> TransferInstanceData call is placed.
>
> Signed-off-by: Aaron Karper <[email protected]>
> ---
>  Makefile.am                                   |  1 +
>  test/py/cmdlib/instance_unittest.py           | 15 +++++++
>  test/py/cmdlib/testsupport/cmdlib_testcase.py | 13 ++++++
>  test/py/cmdlib/testsupport/masterd_mock.py    | 59
> +++++++++++++++++++++++++++
>  4 files changed, 88 insertions(+)
>  create mode 100644 test/py/cmdlib/testsupport/masterd_mock.py
>
> diff --git a/Makefile.am b/Makefile.am
> index f662831..117e1f3 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -1763,6 +1763,7 @@ python_test_support = \
>         test/py/cmdlib/testsupport/config_mock.py \
>         test/py/cmdlib/testsupport/iallocator_mock.py \
>         test/py/cmdlib/testsupport/livelock_mock.py \
> +       test/py/cmdlib/testsupport/masterd_mock.py \
>         test/py/cmdlib/testsupport/netutils_mock.py \
>         test/py/cmdlib/testsupport/processor_mock.py \
>         test/py/cmdlib/testsupport/rpc_runner_mock.py \
> diff --git a/test/py/cmdlib/instance_unittest.py
> b/test/py/cmdlib/instance_unittest.py
> index 4406be9..084fef2 100644
> --- a/test/py/cmdlib/instance_unittest.py
> +++ b/test/py/cmdlib/instance_unittest.py
> @@ -1594,9 +1594,24 @@ class TestLUInstanceMove(CmdlibTestCase):
>          .CreateSuccessfulNodeResult(self.node, "")
>
>      inst = self.cfg.AddNewInstance(admin_state=constants.ADMINST_UP)
> +    old_node = inst.primary_node
>      op = opcodes.OpInstanceMove(instance_name=inst.name,
>                                  target_node=self.node.name)
>      self.ExecOpCode(op)
> +    self.masterd_mod.instance.TransferInstanceData.assert_called_with(
> +        mock.ANY, mock.ANY, old_node, self.node.uuid,
> self.node.secondary_ip,
> +        mock.ANY, inst, [mock.ANY])
> +
> +  def testMoveInstanceNoCopy(self):
> +    self.masterd.instance.TransferInstanceData.return_value = [True]
> +    inst = self.cfg.AddNewInstance(disk_template=constants.DT_SHARED_
> FILE)
> +    old_node = inst.primary_node
> +    op = opcodes.OpInstanceMove(instance_name=inst.name,
> +                                target_node=self.node.name)
> +    self.ExecOpCode(op)
> +    self.masterd_mod.instance.TransferInstanceData.assert_called_with(
> +        mock.ANY, mock.ANY, old_node, self.node.uuid,
> self.node.secondary_ip,
> +        mock.ANY, inst, [])
>
>    def testMoveFailingStartInstance(self):
>      self.rpc.call_node_info.return_value = \
> diff --git a/test/py/cmdlib/testsupport/cmdlib_testcase.py
> b/test/py/cmdlib/testsupport/cmdlib_testcase.py
> index f245f45..1472779 100644
> --- a/test/py/cmdlib/testsupport/cmdlib_testcase.py
> +++ b/test/py/cmdlib/testsupport/cmdlib_testcase.py
> @@ -39,6 +39,7 @@ import traceback
>  from cmdlib.testsupport.config_mock import ConfigMock
>  from cmdlib.testsupport.iallocator_mock import patchIAllocator
>  from cmdlib.testsupport.livelock_mock import LiveLockMock
> +from cmdlib.testsupport.masterd_mock import patchMasterd,
> CreateMasterdMock
>  from cmdlib.testsupport.netutils_mock import patchNetutils, \
>    SetupDefaultNetutilsMock
>  from cmdlib.testsupport.processor_mock import ProcessorMock
> @@ -136,6 +137,7 @@ class CmdlibTestCase(testutils.GanetiTestCase):
>      self._netutils_patcher = None
>      self._ssh_patcher = None
>      self._rpc_patcher = None
> +    self._masterd_patcher = None
>
>      try:
>        runtime.InitArchInfo()
> @@ -158,6 +160,9 @@ class CmdlibTestCase(testutils.GanetiTestCase):
>      if self._rpc_patcher is not None:
>        self._rpc_patcher.stop()
>        self._rpc_patcher = None
> +    if self._masterd_patcher is not None:
> +      self._masterd_patcher.stop()
> +      self._masterd_patcher = None
>
>    def tearDown(self):
>      super(CmdlibTestCase, self).tearDown()
> @@ -183,6 +188,7 @@ class CmdlibTestCase(testutils.GanetiTestCase):
>      self.rpc = CreateRpcRunnerMock()
>      self.ctx = GanetiContextMock(self)
>      self.mcpu = ProcessorMock(self.ctx)
> +    self.masterd = CreateMasterdMock()
>
>      self._StopPatchers()
>      try:
> @@ -215,6 +221,13 @@ class CmdlibTestCase(testutils.GanetiTestCase):
>        # this test module does not use rpc, no patching performed
>        self._rpc_patcher = None
>
> +    try:
> +      self._masterd_patcher = patchMasterd(self._GetTestModule())
> +      self.masterd_mod = self._masterd_patcher.start()
> +    except (ImportError, AttributeError):
> +      # this test module does not use masterd, no patching performed
> +      self._masterd_patcher = None
> +
>    def GetMockLU(self):
>      """Creates a mock L{LogialUnit} with access to the mocked config etc.
>
> diff --git a/test/py/cmdlib/testsupport/masterd_mock.py
> b/test/py/cmdlib/testsupport/masterd_mock.py
> new file mode 100644
> index 0000000..59ba8f5
> --- /dev/null
> +++ b/test/py/cmdlib/testsupport/masterd_mock.py
> @@ -0,0 +1,59 @@
> +#
> +#
> +
> +# Copyright (C) 2014 Google Inc.
> +# All rights reserved.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions are
> +# met:
> +#
> +# 1. Redistributions of source code must retain the above copyright
> notice,
> +# this list of conditions and the following disclaimer.
> +#
> +# 2. Redistributions in binary form must reproduce the above copyright
> +# notice, this list of conditions and the following disclaimer in the
> +# documentation and/or other materials provided with the distribution.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
> +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
> PARTICULAR
> +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +
> +"""Support for mocking the Masterd"""
> +
> +
> +import mock
> +
> +from ganeti import masterd
> +
> +from cmdlib.testsupport.util import patchModule
> +
> +
> +# pylint: disable=C0103
> +def patchMasterd(module_under_test):
> +  """Patches the L{ganeti.masterd} module for tests.
> +
> +  This function is meant to be used as a decorator for test methods.
> +
> +  @type module_under_test: string
> +  @param module_under_test: the module within cmdlib which is tested. The
> +        "ganeti.cmdlib" prefix is optional.
> +
> +  """
> +  return patchModule(module_under_test, "masterd", wraps=masterd)
> +
> +
> +def CreateMasterdMock():
> +  """Creates a new L{mock.MagicMock} tailored for the L{masterd} module.
> +
> +  """
> +  return mock.MagicMock(spec=masterd)
> --
> 2.1.0.rc2.206.gedb03e5
>
>

Reply via email to