Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3b0912a

Browse filesBrowse files
authored
tests: add explicit unit tests for '_StreamedResponseIterator' class (#281)
1 parent 083e6e9 commit 3b0912a
Copy full SHA for 3b0912a

File tree

Expand file treeCollapse file tree

1 file changed

+122
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+122
-0
lines changed

‎tests/unit/test_grpc_helpers.py

Copy file name to clipboardExpand all lines: tests/unit/test_grpc_helpers.py
+122Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,128 @@ def test_wrap_unary_errors():
6666
assert exc_info.value.response == grpc_error
6767

6868

69+
class Test_StreamingResponseIterator:
70+
@staticmethod
71+
def _make_wrapped(*items):
72+
return iter(items)
73+
74+
@staticmethod
75+
def _make_one(wrapped, **kw):
76+
return grpc_helpers._StreamingResponseIterator(wrapped, **kw)
77+
78+
def test_ctor_defaults(self):
79+
wrapped = self._make_wrapped("a", "b", "c")
80+
iterator = self._make_one(wrapped)
81+
assert iterator._stored_first_result == "a"
82+
assert list(wrapped) == ["b", "c"]
83+
84+
def test_ctor_explicit(self):
85+
wrapped = self._make_wrapped("a", "b", "c")
86+
iterator = self._make_one(wrapped, prefetch_first_result=False)
87+
assert getattr(iterator, "_stored_first_result", self) is self
88+
assert list(wrapped) == ["a", "b", "c"]
89+
90+
def test_ctor_w_rpc_error_on_prefetch(self):
91+
wrapped = mock.MagicMock()
92+
wrapped.__next__.side_effect = grpc.RpcError()
93+
94+
with pytest.raises(grpc.RpcError):
95+
self._make_one(wrapped)
96+
97+
def test___iter__(self):
98+
wrapped = self._make_wrapped("a", "b", "c")
99+
iterator = self._make_one(wrapped)
100+
assert iter(iterator) is iterator
101+
102+
def test___next___w_cached_first_result(self):
103+
wrapped = self._make_wrapped("a", "b", "c")
104+
iterator = self._make_one(wrapped)
105+
assert next(iterator) == "a"
106+
iterator = self._make_one(wrapped, prefetch_first_result=False)
107+
assert next(iterator) == "b"
108+
assert next(iterator) == "c"
109+
110+
def test___next___wo_cached_first_result(self):
111+
wrapped = self._make_wrapped("a", "b", "c")
112+
iterator = self._make_one(wrapped, prefetch_first_result=False)
113+
assert next(iterator) == "a"
114+
assert next(iterator) == "b"
115+
assert next(iterator) == "c"
116+
117+
def test___next___w_rpc_error(self):
118+
wrapped = mock.MagicMock()
119+
wrapped.__next__.side_effect = grpc.RpcError()
120+
iterator = self._make_one(wrapped, prefetch_first_result=False)
121+
122+
with pytest.raises(exceptions.GoogleAPICallError):
123+
next(iterator)
124+
125+
def test_add_callback(self):
126+
wrapped = mock.MagicMock()
127+
callback = mock.Mock(spec={})
128+
iterator = self._make_one(wrapped, prefetch_first_result=False)
129+
130+
assert iterator.add_callback(callback) is wrapped.add_callback.return_value
131+
132+
wrapped.add_callback.assert_called_once_with(callback)
133+
134+
def test_cancel(self):
135+
wrapped = mock.MagicMock()
136+
iterator = self._make_one(wrapped, prefetch_first_result=False)
137+
138+
assert iterator.cancel() is wrapped.cancel.return_value
139+
140+
wrapped.cancel.assert_called_once_with()
141+
142+
def test_code(self):
143+
wrapped = mock.MagicMock()
144+
iterator = self._make_one(wrapped, prefetch_first_result=False)
145+
146+
assert iterator.code() is wrapped.code.return_value
147+
148+
wrapped.code.assert_called_once_with()
149+
150+
def test_details(self):
151+
wrapped = mock.MagicMock()
152+
iterator = self._make_one(wrapped, prefetch_first_result=False)
153+
154+
assert iterator.details() is wrapped.details.return_value
155+
156+
wrapped.details.assert_called_once_with()
157+
158+
def test_initial_metadata(self):
159+
wrapped = mock.MagicMock()
160+
iterator = self._make_one(wrapped, prefetch_first_result=False)
161+
162+
assert iterator.initial_metadata() is wrapped.initial_metadata.return_value
163+
164+
wrapped.initial_metadata.assert_called_once_with()
165+
166+
def test_is_active(self):
167+
wrapped = mock.MagicMock()
168+
iterator = self._make_one(wrapped, prefetch_first_result=False)
169+
170+
assert iterator.is_active() is wrapped.is_active.return_value
171+
172+
wrapped.is_active.assert_called_once_with()
173+
174+
def test_time_remaining(self):
175+
wrapped = mock.MagicMock()
176+
iterator = self._make_one(wrapped, prefetch_first_result=False)
177+
178+
assert iterator.time_remaining() is wrapped.time_remaining.return_value
179+
180+
wrapped.time_remaining.assert_called_once_with()
181+
182+
def test_trailing_metadata(self):
183+
wrapped = mock.MagicMock()
184+
iterator = self._make_one(wrapped, prefetch_first_result=False)
185+
186+
assert iterator.trailing_metadata() is wrapped.trailing_metadata.return_value
187+
188+
wrapped.trailing_metadata.assert_called_once_with()
189+
190+
69191
def test_wrap_stream_okay():
70192
expected_responses = [1, 2, 3]
71193
callable_ = mock.Mock(spec=["__call__"], return_value=iter(expected_responses))

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.