def inotifier(request):
mock = have_mocked(request, "inotify_simple.INotify")
mock.return_value = mock
mock.__enter__.return_value = mock
values = [inotify_simple.Event(0, 0, 0,
os.path.basename(concierge.DEFAULT_RC))]
values *= 3
def side_effect():
if values:
return [values.pop()]
raise KeyboardInterrupt
mock.read.side_effect = side_effect
mock.v = values
return mock
python类return_value()的实例源码
def test_configure_mock(self):
mock = Mock(foo='bar')
self.assertEqual(mock.foo, 'bar')
mock = MagicMock(foo='bar')
self.assertEqual(mock.foo, 'bar')
kwargs = {'side_effect': KeyError, 'foo.bar.return_value': 33,
'foo': MagicMock()}
mock = Mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
mock = Mock()
mock.configure_mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
def test_authenticate_ok(mocked_authenticator, configure_model,
sudo_user_with_external_id):
now, expired = make_now_expired()
mock = mocked_authenticator.client.get_raw_token_from_identity_service
mock.return_value = make_token_data(
sudo_user_with_external_id, now, expired)
model = mocked_authenticator.authenticate("sudo", "sudo")
assert model.model_id == model._id == mock.return_value["id"]
assert model.user.model_id == sudo_user_with_external_id.model_id
# calendar.timegm because expired is naive datetime
assert int(model.expires_at.timestamp()) == int(calendar.timegm(
expired.timetuple()))
# We do not store tokens for keystone
assert not token.TokenModel.find_token(model.model_id)
def test_require_authentication_ok(
mocked_authenticator, configure_model, sudo_client_v1,
sudo_user_with_external_id, app):
now, expired = make_now_expired()
endpoint = "/" + pytest.faux.gen_alphanumeric()
mock = mocked_authenticator.client.tokens.get_token_data
mock.return_value = {
"token": make_token_data(sudo_user_with_external_id, now, expired)
}
@app.route(endpoint)
@mocked_authenticator.require_authentication
def testing_endpoint():
assert int(flask.g.token.expires_at.timestamp()) == int(
calendar.timegm(expired.timetuple()))
assert flask.g.token.user_id == sudo_user_with_external_id.model_id
return flask.jsonify(value=1)
response = sudo_client_v1.get(endpoint)
assert response.status_code == 200
assert response.json == {"value": 1}
mock = mocked_authenticator.client.tokens.get_token_data
mock.assert_called_once_with(sudo_client_v1.auth_token)
def test_require_authentication_unknown_user(
mocked_authenticator, configure_model, sudo_client_v1,
sudo_user_with_external_id, app):
now, expired = make_now_expired()
endpoint = "/" + pytest.faux.gen_alphanumeric()
mock = mocked_authenticator.client.tokens.get_token_data
mock.return_value = {
"token": make_token_data(sudo_user_with_external_id, now, expired)
}
mock.return_value["token"]["user"]["id"] += "FAKE"
@app.route(endpoint)
@mocked_authenticator.require_authentication
def testing_endpoint():
assert int(flask.g.token.expires_at.timestamp()) == int(
calendar.timegm(expired.timetuple()))
assert flask.g.token.user_id == sudo_user_with_external_id.model_id
return flask.jsonify(value=1)
response = sudo_client_v1.get(endpoint)
assert response.status_code == 401
mock = mocked_authenticator.client.tokens.get_token_data
mock.assert_called_once_with(sudo_client_v1.auth_token)
def test_configure_mock(self):
mock = Mock(foo='bar')
self.assertEqual(mock.foo, 'bar')
mock = MagicMock(foo='bar')
self.assertEqual(mock.foo, 'bar')
kwargs = {'side_effect': KeyError, 'foo.bar.return_value': 33,
'foo': MagicMock()}
mock = Mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
mock = Mock()
mock.configure_mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
def test_configure_mock(self):
mock = Mock(foo='bar')
self.assertEqual(mock.foo, 'bar')
mock = MagicMock(foo='bar')
self.assertEqual(mock.foo, 'bar')
kwargs = {'side_effect': KeyError, 'foo.bar.return_value': 33,
'foo': MagicMock()}
mock = Mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
mock = Mock()
mock.configure_mock(**kwargs)
self.assertRaises(KeyError, mock)
self.assertEqual(mock.foo.bar(), 33)
self.assertIsInstance(mock.foo, MagicMock)
def mock_mainfunc(cliargs_default, mock_get_content, inotifier):
mock_get_content.return_value = """\
Compression yes
Host q
HostName e
Host b
HostName lalala
"""
return cliargs_default, mock_get_content, inotifier
def test_can_decode_utf8_strings_with_french_content(self, encoding_mocker_stopall):
# mock
mock_getpreferredencoding = encoding_mocker_stopall.MagicMock(name="mock_getpreferredencoding")
# patch
encoding_mocker_stopall.patch.object(scarlett_os.internal.encoding.locale, 'getpreferredencoding', mock_getpreferredencoding)
mock.return_value = 'UTF-8'
# source: http://pythoncentral.io/encoding-and-decoding-strings-in-python-3-x/
# NOTE: In Python 2.x, prefixing a string literal with a "b" (or "B") is legal syntax, but it does nothing special:
# NOTE: In Python 3.x, however, this prefix indicates the string is a bytes object which differs from the normal string (which as we know is by default a Unicode string), and even the 'b' prefix is preserved:
result = encoding.locale_decode(
b'[Errno 98] Adresse d\xc3\xa9j\xc3\xa0 utilis\xc3\xa9e')
assert "b'[Errno 98] Adresse d\\xc3\\xa9j\\xc3\\xa0 utilis\\xc3\\xa9e'" == result
# def test_can_decode_an_ioerror_with_french_content(self, mock):
# mock.return_value = 'UTF-8'
#
# error = IOError(98, b'Adresse d\xc3\xa9j\xc3\xa0 utilis\xc3\xa9e')
# result = encoding.locale_decode(error)
# expected = '[Errno 98] Adresse d\xe9j\xe0 utilis\xe9e'
#
# self.assertEqual(
# expected, result,
# '%r decoded to %r does not match expected %r' % (
# error, result, expected))
#
# def test_does_not_use_locale_to_decode_unicode_strings(self, mock):
# mock.return_value = 'UTF-8'
#
# encoding.locale_decode('abc')
#
# self.assertFalse(mock.called)
#
# def test_does_not_use_locale_to_decode_ascii_bytestrings(self, mock):
# mock.return_value = 'UTF-8'
#
# encoding.locale_decode('abc')
#
# self.assertFalse(mock.called)
def test_string_word_to_boolean(self, filtered_strategies_mock):
filtered_strategies_mock.return_value = mock.MagicMock()
request = self.factory.get('/articles/?stochastic=true')
request.query_params = request.GET # factory doesn't support query_params
filter_strategies(request)
filtered_strategies_mock.assert_called_with({'stochastic': 1})
def test_string_number_to_boolean(self, filtered_strategies_mock):
mock.return_value = mock.MagicMock()
request = self.factory.get('/articles/?stochastic=1')
request.query_params = request.GET # factory doesn't support query_params
filter_strategies(request)
filtered_strategies_mock.assert_called_with({'stochastic': 1})
def test_string_to_int(self, filtered_strategies_mock):
filtered_strategies_mock.return_value = mock.MagicMock()
request = self.factory.get('/articles/?memory_depth=3')
request.query_params = request.GET # factory doesn't support query_params
filter_strategies(request)
filtered_strategies_mock.assert_called_with({'memory_depth': 3})
def test_makes_use_of(self, filtered_strategies_mock):
filtered_strategies_mock.return_value = mock.MagicMock()
request = self.factory.get('/articles/?makes_use_of=game')
request.query_params = request.GET # factory doesn't support query_params
filter_strategies(request)
filtered_strategies_mock.assert_called_with({'makes_use_of': ['game']})
def test_constructor(self):
mock = Mock()
self.assertFalse(mock.called, "called not initialised correctly")
self.assertEqual(mock.call_count, 0,
"call_count not initialised correctly")
self.assertTrue(is_instance(mock.return_value, Mock),
"return_value not initialised correctly")
self.assertEqual(mock.call_args, None,
"call_args not initialised correctly")
self.assertEqual(mock.call_args_list, [],
"call_args_list not initialised correctly")
self.assertEqual(mock.method_calls, [],
"method_calls not initialised correctly")
# Can't use hasattr for this test as it always returns True on a mock
self.assertFalse('_items' in mock.__dict__,
"default mock should not have '_items' attribute")
self.assertIsNone(mock._mock_parent,
"parent not initialised correctly")
self.assertIsNone(mock._mock_methods,
"methods not initialised correctly")
self.assertEqual(mock._mock_children, {},
"children not initialised incorrectly")
def test_return_value_in_constructor(self):
mock = Mock(return_value=None)
self.assertIsNone(mock.return_value,
"return value in constructor not honoured")
def test_side_effect(self):
mock = Mock()
def effect(*args, **kwargs):
raise SystemError('kablooie')
mock.side_effect = effect
self.assertRaises(SystemError, mock, 1, 2, fish=3)
mock.assert_called_with(1, 2, fish=3)
results = [1, 2, 3]
def effect():
return results.pop()
mock.side_effect = effect
self.assertEqual([mock(), mock(), mock()], [3, 2, 1],
"side effect not used correctly")
mock = Mock(side_effect=sentinel.SideEffect)
self.assertEqual(mock.side_effect, sentinel.SideEffect,
"side effect in constructor not used")
def side_effect():
return DEFAULT
mock = Mock(side_effect=side_effect, return_value=sentinel.RETURN)
self.assertEqual(mock(), sentinel.RETURN)
def test_reset_mock(self):
parent = Mock()
spec = ["something"]
mock = Mock(name="child", parent=parent, spec=spec)
mock(sentinel.Something, something=sentinel.SomethingElse)
something = mock.something
mock.something()
mock.side_effect = sentinel.SideEffect
return_value = mock.return_value
return_value()
mock.reset_mock()
self.assertEqual(mock._mock_name, "child",
"name incorrectly reset")
self.assertEqual(mock._mock_parent, parent,
"parent incorrectly reset")
self.assertEqual(mock._mock_methods, spec,
"methods incorrectly reset")
self.assertFalse(mock.called, "called not reset")
self.assertEqual(mock.call_count, 0, "call_count not reset")
self.assertEqual(mock.call_args, None, "call_args not reset")
self.assertEqual(mock.call_args_list, [], "call_args_list not reset")
self.assertEqual(mock.method_calls, [],
"method_calls not initialised correctly: %r != %r" %
(mock.method_calls, []))
self.assertEqual(mock.mock_calls, [])
self.assertEqual(mock.side_effect, sentinel.SideEffect,
"side_effect incorrectly reset")
self.assertEqual(mock.return_value, return_value,
"return_value incorrectly reset")
self.assertFalse(return_value.called, "return value mock not reset")
self.assertEqual(mock._mock_children, {'something': something},
"children reset incorrectly")
self.assertEqual(mock.something, something,
"children incorrectly cleared")
self.assertFalse(mock.something.called, "child not reset")
def test_reset_mock_recursion(self):
mock = Mock()
mock.return_value = mock
# used to cause recursion
mock.reset_mock()
def test_attribute_access_returns_mocks(self):
mock = Mock()
something = mock.something
self.assertTrue(is_instance(something, Mock), "attribute isn't a mock")
self.assertEqual(mock.something, something,
"different attributes returned for same name")
# Usage example
mock = Mock()
mock.something.return_value = 3
self.assertEqual(mock.something(), 3, "method returned wrong value")
self.assertTrue(mock.something.called,
"method didn't record being called")
def test_wraps_call_with_nondefault_return_value(self):
real = Mock()
mock = Mock(wraps=real)
mock.return_value = 3
self.assertEqual(mock(), 3)
self.assertFalse(real.called)
def test_mock_add_spec_magic_methods(self):
for Klass in MagicMock, NonCallableMagicMock:
mock = Klass()
int(mock)
mock.mock_add_spec(object)
self.assertRaises(TypeError, int, mock)
mock = Klass()
mock['foo']
mock.__int__.return_value =4
mock.mock_add_spec(int)
self.assertEqual(int(mock), 4)
self.assertRaises(TypeError, lambda: mock['foo'])
def test_adding_return_value_mock(self):
for Klass in Mock, MagicMock:
mock = Klass()
mock.return_value = MagicMock()
mock()()
self.assertEqual(mock.mock_calls, [call(), call()()])
def test_mock_parents(self):
for Klass in Mock, MagicMock:
m = Klass()
original_repr = repr(m)
m.return_value = m
self.assertIs(m(), m)
self.assertEqual(repr(m), original_repr)
m.reset_mock()
self.assertIs(m(), m)
self.assertEqual(repr(m), original_repr)
m = Klass()
m.b = m.a
self.assertIn("name='mock.a'", repr(m.b))
self.assertIn("name='mock.a'", repr(m.a))
m.reset_mock()
self.assertIn("name='mock.a'", repr(m.b))
self.assertIn("name='mock.a'", repr(m.a))
m = Klass()
original_repr = repr(m)
m.a = m()
m.a.return_value = m
self.assertEqual(repr(m), original_repr)
self.assertEqual(repr(m.a()), original_repr)
def test_attach_mock_return_value(self):
classes = Mock, MagicMock, NonCallableMagicMock, NonCallableMock
for Klass in Mock, MagicMock:
for Klass2 in classes:
m = Klass()
m2 = Klass2(name='foo')
m.attach_mock(m2, 'return_value')
self.assertIs(m(), m2)
self.assertIn("name='mock()'", repr(m2))
m2.foo()
self.assertEqual(m.mock_calls, call().foo().call_list())
def test_logout(mocked_authenticator, configure_model,
sudo_user_with_external_id):
now, expired = make_now_expired()
mock = mocked_authenticator.client.get_raw_token_from_identity_service
mock.return_value = make_token_data(
sudo_user_with_external_id, now, expired)
model = mocked_authenticator.authenticate("sudo", "sudo")
mocked_authenticator.client.tokens.revoke_token.assert_not_called()
mocked_authenticator.logout(model)
mocked_authenticator.client.tokens.revoke_token.assert_called_once_with(
model.model_id)
def test_constructor(self):
mock = Mock()
self.assertFalse(mock.called, "called not initialised correctly")
self.assertEqual(mock.call_count, 0,
"call_count not initialised correctly")
self.assertTrue(is_instance(mock.return_value, Mock),
"return_value not initialised correctly")
self.assertEqual(mock.call_args, None,
"call_args not initialised correctly")
self.assertEqual(mock.call_args_list, [],
"call_args_list not initialised correctly")
self.assertEqual(mock.method_calls, [],
"method_calls not initialised correctly")
# Can't use hasattr for this test as it always returns True on a mock
self.assertNotIn('_items', mock.__dict__,
"default mock should not have '_items' attribute")
self.assertIsNone(mock._mock_parent,
"parent not initialised correctly")
self.assertIsNone(mock._mock_methods,
"methods not initialised correctly")
self.assertEqual(mock._mock_children, {},
"children not initialised incorrectly")
def test_return_value_in_constructor(self):
mock = Mock(return_value=None)
self.assertIsNone(mock.return_value,
"return value in constructor not honoured")
def test_side_effect(self):
mock = Mock()
def effect(*args, **kwargs):
raise SystemError('kablooie')
mock.side_effect = effect
self.assertRaises(SystemError, mock, 1, 2, fish=3)
mock.assert_called_with(1, 2, fish=3)
results = [1, 2, 3]
def effect():
return results.pop()
mock.side_effect = effect
self.assertEqual([mock(), mock(), mock()], [3, 2, 1],
"side effect not used correctly")
mock = Mock(side_effect=sentinel.SideEffect)
self.assertEqual(mock.side_effect, sentinel.SideEffect,
"side effect in constructor not used")
def side_effect():
return DEFAULT
mock = Mock(side_effect=side_effect, return_value=sentinel.RETURN)
self.assertEqual(mock(), sentinel.RETURN)
def test_reset_mock(self):
parent = Mock()
spec = ["something"]
mock = Mock(name="child", parent=parent, spec=spec)
mock(sentinel.Something, something=sentinel.SomethingElse)
something = mock.something
mock.something()
mock.side_effect = sentinel.SideEffect
return_value = mock.return_value
return_value()
mock.reset_mock()
self.assertEqual(mock._mock_name, "child",
"name incorrectly reset")
self.assertEqual(mock._mock_parent, parent,
"parent incorrectly reset")
self.assertEqual(mock._mock_methods, spec,
"methods incorrectly reset")
self.assertFalse(mock.called, "called not reset")
self.assertEqual(mock.call_count, 0, "call_count not reset")
self.assertEqual(mock.call_args, None, "call_args not reset")
self.assertEqual(mock.call_args_list, [], "call_args_list not reset")
self.assertEqual(mock.method_calls, [],
"method_calls not initialised correctly: %r != %r" %
(mock.method_calls, []))
self.assertEqual(mock.mock_calls, [])
self.assertEqual(mock.side_effect, sentinel.SideEffect,
"side_effect incorrectly reset")
self.assertEqual(mock.return_value, return_value,
"return_value incorrectly reset")
self.assertFalse(return_value.called, "return value mock not reset")
self.assertEqual(mock._mock_children, {'something': something},
"children reset incorrectly")
self.assertEqual(mock.something, something,
"children incorrectly cleared")
self.assertFalse(mock.something.called, "child not reset")
def test_reset_mock_recursion(self):
mock = Mock()
mock.return_value = mock
# used to cause recursion
mock.reset_mock()