Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3b0912a

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

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

tests/unit/test_grpc_helpers.py

Lines 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)