Content-Length: 505672 | pFad | http://github.com/dhermes/google-cloud-python/commit/80ec376ef1b193331b4c2c32cc2a79bc151e742f

4C Removing mock.Mock() in error reporting. · dhermes/google-cloud-python@80ec376 · GitHub
Skip to content

Commit 80ec376

Browse files
committed
Removing mock.Mock() in error reporting.
This actually required a much more comprehensive set of unit test changes than expected. Also incorporated a change from googleapis#3057 (which slipped through due to overly broad mocks).
1 parent c090fb5 commit 80ec376

File tree

3 files changed

+52
-27
lines changed

3 files changed

+52
-27
lines changed

error_reporting/unit_tests/test__gax.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,34 @@ class Test_ErrorReportingGaxApi(unittest.TestCase):
5959

6060
PROJECT = 'PROJECT'
6161

62-
def _call_fut(self, gax_api, project):
62+
def _make_one(self, gax_api, project):
6363
from google.cloud.error_reporting._gax import _ErrorReportingGaxApi
6464

6565
return _ErrorReportingGaxApi(gax_api, project)
6666

6767
def test_constructor(self):
68-
gax_api = mock.Mock()
69-
gax_client_wrapper = self._call_fut(gax_api, self.PROJECT)
68+
gax_api = mock.Mock(spec=[])
69+
gax_client_wrapper = self._make_one(gax_api, self.PROJECT)
7070

7171
self.assertEqual(gax_client_wrapper._project, self.PROJECT)
7272
self.assertEqual(gax_client_wrapper._gax_api, gax_api)
7373

74-
@mock.patch("google.cloud.error_reporting._gax.ParseDict")
75-
def test_report_error_event(self, _):
76-
gax_api = mock.Mock()
77-
gax_client_wrapper = self._call_fut(gax_api, self.PROJECT)
74+
def test_report_error_event(self):
75+
from google.cloud.proto.devtools.clouderrorreporting.v1beta1 import (
76+
report_errors_service_pb2)
7877

79-
mock_error_report = mock.Mock()
80-
gax_client_wrapper.report_error_event(mock_error_report)
81-
self.assertTrue(gax_api.report_error_event.called_with,
82-
mock_error_report)
78+
gax_api = mock.Mock(spec=['project_path', 'report_error_event'])
79+
gax_client_wrapper = self._make_one(gax_api, self.PROJECT)
80+
81+
error_report = {
82+
'message': 'The cabs are here.',
83+
}
84+
gax_client_wrapper.report_error_event(error_report)
85+
86+
gax_api.project_path.assert_called_once_with(self.PROJECT)
87+
project_name = gax_api.project_path.return_value
88+
error_pb = report_errors_service_pb2.ReportedErrorEvent(
89+
message=error_report['message'],
90+
)
91+
gax_api.report_error_event.assert_called_once_with(
92+
project_name, error_pb)

error_reporting/unit_tests/test__logging.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,36 @@ def _make_credentials():
2626
class Test_ErrorReportingLoggingAPI(unittest.TestCase):
2727

2828
PROJECT = 'PROJECT'
29-
SERVICE = 'SERVICE'
30-
VERSION = 'myversion'
3129

32-
def _call_fut(self, project, credentials):
30+
def _make_one(self, project, credentials):
3331
from google.cloud.error_reporting._logging import (
3432
_ErrorReportingLoggingAPI)
3533

3634
return _ErrorReportingLoggingAPI(project, credentials)
3735

3836
def test_constructor(self):
3937
credentials = _make_credentials()
40-
logger_client = self._call_fut(self.PROJECT, credentials)
38+
logging_api = self._make_one(self.PROJECT, credentials)
4139

42-
self.assertEqual(logger_client.logging_client._connection.credentials,
40+
self.assertEqual(logging_api.logging_client._connection.credentials,
4341
credentials)
44-
self.assertEqual(logger_client.logging_client.project, self.PROJECT)
42+
self.assertEqual(logging_api.logging_client.project, self.PROJECT)
4543

46-
@mock.patch('google.cloud.logging.client')
47-
def test_report_error_event(self, _):
44+
@mock.patch('google.cloud.logging.client.Client')
45+
def test_report_error_event(self, mocked_cls):
4846
credentials = _make_credentials()
49-
logger_client = self._call_fut(self.PROJECT, credentials)
50-
payload = mock.Mock()
51-
logger_client.report_error_event(payload)
52-
logger_mock = mock.Mock()
53-
self.assertTrue(logger_mock.log_struct.called_with, payload)
47+
logging_api = self._make_one(self.PROJECT, credentials)
48+
mocked_cls.assert_called_once_with(self.PROJECT, credentials, None)
49+
self.assertIs(logging_api.logging_client, mocked_cls.return_value)
50+
51+
logger = mock.Mock(spec=['log_struct'])
52+
logging_api.logging_client.logger.return_value = logger
53+
54+
# Actually make the API call.
55+
error_report = {
56+
'message': 'The cabs are here.',
57+
}
58+
logging_api.report_error_event(error_report)
59+
60+
# Check the mocks.
61+
logger.log_struct.assert_called_once_with(error_report)

error_reporting/unit_tests/test_client.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ def _make_http(self, *args, **kw):
4444

4545
return HTTPContext(*args, **kw)
4646

47+
def _get_report_payload(self, error_api):
48+
self.assertEqual(error_api.report_error_event.call_count, 1)
49+
call = error_api.report_error_event.mock_calls[0]
50+
_, positional, kwargs = call
51+
self.assertEqual(kwargs, {})
52+
self.assertEqual(len(positional), 1)
53+
return positional[0]
54+
4755
@mock.patch(
4856
'google.cloud.error_reporting.client._determine_default_project')
4957
def test_ctor_default(self, default_mock):
@@ -131,7 +139,7 @@ def test_report_exception_with_service_version_in_constructor(
131139

132140
make_api.assert_called_once_with(client)
133141

134-
payload = error_api.report_error_event.call_args[0][0]
142+
payload = self._get_report_payload(error_api)
135143
self.assertEqual(payload['serviceContext'], {
136144
'service': service,
137145
'version': version
@@ -158,8 +166,7 @@ def test_report(self, make_api):
158166
message = 'this is an error'
159167
client.report(message)
160168

161-
payload = error_api.report_error_event.call_args[0][0]
162-
make_api.assert_called_once_with(client)
169+
payload = self._get_report_payload(error_api)
163170

164171
self.assertEqual(payload['message'], message)
165172
report_location = payload['context']['reportLocation']

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/dhermes/google-cloud-python/commit/80ec376ef1b193331b4c2c32cc2a79bc151e742f

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy