2121import sys
2222sys .path [0 :0 ] = ["" ]
2323
24+ from pymongo .connection import Pool
2425from test_connection import get_connection
2526
2627N = 50
@@ -93,6 +94,21 @@ def run_cases(ut, cases):
9394 for t in threads :
9495 t .join ()
9596
97+
98+ class OneOp (threading .Thread ):
99+
100+ def __init__ (self , connection ):
101+ threading .Thread .__init__ (self )
102+ self .c = connection
103+
104+ def run (self ):
105+ assert len (self .c ._Connection__pool .sockets ) == 1
106+ self .c .test .test .find_one ()
107+ assert len (self .c ._Connection__pool .sockets ) == 0
108+ self .c .end_request ()
109+ assert len (self .c ._Connection__pool .sockets ) == 1
110+
111+
96112class TestPooling (unittest .TestCase ):
97113
98114 def setUp (self ):
@@ -109,6 +125,33 @@ def test_no_disconnect(self):
109125 def test_disconnect (self ):
110126 run_cases (self , [SaveAndFind , Disconnect , Unique ])
111127
128+ def test_independent_pools (self ):
129+ p = Pool (None )
130+ self .assertEqual ([], p .sockets )
131+ self .c .end_request ()
132+ self .assertEqual ([], p .sockets )
133+
134+ # Sensical values aren't really important here
135+ p1 = Pool (5 )
136+ self .assertEqual (None , p .socket_factory )
137+ self .assertEqual (5 , p1 .socket_factory )
138+
139+ def test_dependent_pools (self ):
140+ c = get_connection ()
141+ self .assertEqual (0 , len (c ._Connection__pool .sockets ))
142+ c .test .test .find_one ()
143+ self .assertEqual (0 , len (c ._Connection__pool .sockets ))
144+ c .end_request ()
145+ self .assertEqual (1 , len (c ._Connection__pool .sockets ))
146+
147+ t = OneOp (c )
148+ t .start ()
149+ t .join ()
150+
151+ self .assertEqual (1 , len (c ._Connection__pool .sockets ))
152+ c .test .test .find_one ()
153+ self .assertEqual (0 , len (c ._Connection__pool .sockets ))
154+
112155
113156if __name__ == "__main__" :
114157 unittest .main ()
0 commit comments