@@ -137,6 +137,83 @@ def test_constructor_non_positive_size(self):
137137 with self .assertRaises (ValueError ):
138138 self ._makeOne (size )
139139
140+ def _makeOneWithMockQueue (self , queue_return ):
141+ from gcloud ._testing import _Monkey
142+ from gcloud .bigtable .happybase import pool as MUT
143+
144+ # We are going to use a fake queue, so we don't want any connections
145+ # or clusters to be created in the constructor.
146+ size = - 1
147+ cluster = object ()
148+ with _Monkey (MUT , _MIN_POOL_SIZE = size ):
149+ pool = self ._makeOne (size , cluster = cluster )
150+
151+ pool ._queue = _Queue (queue_return )
152+ return pool
153+
154+ def test__acquire_connection (self ):
155+ queue_return = object ()
156+ pool = self ._makeOneWithMockQueue (queue_return )
157+
158+ timeout = 432
159+ connection = pool ._acquire_connection (timeout = timeout )
160+ self .assertTrue (connection is queue_return )
161+ self .assertEqual (pool ._queue ._get_calls , [(True , timeout )])
162+ self .assertEqual (pool ._queue ._put_calls , [])
163+
164+ def test__acquire_connection_failure (self ):
165+ from gcloud .bigtable .happybase .pool import NoConnectionsAvailable
166+
167+ pool = self ._makeOneWithMockQueue (None )
168+ timeout = 1027
169+ with self .assertRaises (NoConnectionsAvailable ):
170+ pool ._acquire_connection (timeout = timeout )
171+ self .assertEqual (pool ._queue ._get_calls , [(True , timeout )])
172+ self .assertEqual (pool ._queue ._put_calls , [])
173+
174+ def test_connection_is_context_manager (self ):
175+ import contextlib
176+ import six
177+
178+ queue_return = _Connection ()
179+ pool = self ._makeOneWithMockQueue (queue_return )
180+ cnxn_context = pool .connection ()
181+ if six .PY3 : # pragma: NO COVER
182+ self .assertTrue (isinstance (cnxn_context ,
183+ contextlib ._GeneratorContextManager ))
184+ else :
185+ self .assertTrue (isinstance (cnxn_context ,
186+ contextlib .GeneratorContextManager ))
187+
188+ def test_connection_no_current_cnxn (self ):
189+ queue_return = _Connection ()
190+ pool = self ._makeOneWithMockQueue (queue_return )
191+ timeout = 55
192+
193+ self .assertFalse (hasattr (pool ._thread_connections , 'current' ))
194+ with pool .connection (timeout = timeout ) as connection :
195+ self .assertEqual (pool ._thread_connections .current , queue_return )
196+ self .assertTrue (connection is queue_return )
197+ self .assertFalse (hasattr (pool ._thread_connections , 'current' ))
198+
199+ self .assertEqual (pool ._queue ._get_calls , [(True , timeout )])
200+ self .assertEqual (pool ._queue ._put_calls ,
201+ [(queue_return , None , None )])
202+
203+ def test_connection_with_current_cnxn (self ):
204+ current_cnxn = _Connection ()
205+ queue_return = _Connection ()
206+ pool = self ._makeOneWithMockQueue (queue_return )
207+ pool ._thread_connections .current = current_cnxn
208+ timeout = 8001
209+
210+ with pool .connection (timeout = timeout ) as connection :
211+ self .assertTrue (connection is current_cnxn )
212+
213+ self .assertEqual (pool ._queue ._get_calls , [])
214+ self .assertEqual (pool ._queue ._put_calls , [])
215+ self .assertEqual (pool ._thread_connections .current , current_cnxn )
216+
140217
141218class _Client (object ):
142219
@@ -147,6 +224,12 @@ def stop(self):
147224 self .stop_calls += 1
148225
149226
227+ class _Connection (object ):
228+
229+ def open (self ):
230+ pass
231+
232+
150233class _Cluster (object ):
151234
152235 def __init__ (self , copies = ()):
@@ -161,3 +244,22 @@ def copy(self):
161244 return result
162245 else :
163246 return self
247+
248+
249+ class _Queue (object ):
250+
251+ def __init__ (self , result = None ):
252+ self .result = result
253+ self ._get_calls = []
254+ self ._put_calls = []
255+
256+ def get (self , block = None , timeout = None ):
257+ self ._get_calls .append ((block , timeout ))
258+ if self .result is None :
259+ import six
260+ raise six .moves .queue .Empty
261+ else :
262+ return self .result
263+
264+ def put (self , item , block = None , timeout = None ):
265+ self ._put_calls .append ((item , block , timeout ))
0 commit comments