@@ -66,6 +66,128 @@ def test_wrap_unary_errors():
66
66
assert exc_info .value .response == grpc_error
67
67
68
68
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
+
69
191
def test_wrap_stream_okay ():
70
192
expected_responses = [1 , 2 , 3 ]
71
193
callable_ = mock .Mock (spec = ["__call__" ], return_value = iter (expected_responses ))
0 commit comments