**** CubicPower OpenStack Study ****
def mock_cast_as_call(obj=None):
    """Use this to mock `cast` as calls.
    :param obj: Either an instance of RPCClient
    or an instance of _Context.
    """
    orig_prepare = obj.prepare
    def prepare(*args, **kwargs):
        cctxt = orig_prepare(*args, **kwargs)
        mock_cast_as_call(obj=cctxt)  # woo, recurse!
        return cctxt
    prepare_patch = mock.patch.object(obj, 'prepare').start()
    prepare_patch.side_effect = prepare
    cast_patch = mock.patch.object(obj, 'cast').start()
    cast_patch.side_effect = obj.call