Using pid-named databases now, so that multiple tests running on the same machine don't stomp on each other. Lots of little cleanup, too, to account for the fact that postgres doesn't let you delete a database with an open connection.

This commit is contained in:
Ryan Williams
2010-02-07 13:22:02 -08:00
parent 0fb15ad4ec
commit 5242cfc490

View File

@@ -97,7 +97,7 @@ class DBConnectionPool(DBTester):
conn2 = self.pool.get() conn2 = self.pool.get()
self.assert_(conn2 is not None) self.assert_(conn2 is not None)
self.assert_(conn2.cursor) self.assert_(conn2.cursor)
del conn2 self.pool.put(conn2)
def test_close_does_a_put(self): def test_close_does_a_put(self):
self.assert_(self.pool.free() == 0) self.assert_(self.pool.free() == 0)
@@ -117,6 +117,7 @@ class DBConnectionPool(DBTester):
self.pool.put(self.connection) self.pool.put(self.connection)
conn = self.pool.get() conn = self.pool.get()
self.assert_(not isinstance(conn._base, db_pool.PooledConnectionWrapper)) self.assert_(not isinstance(conn._base, db_pool.PooledConnectionWrapper))
self.pool.put(conn)
def test_bool(self): def test_bool(self):
self.assert_(self.connection) self.assert_(self.connection)
@@ -149,6 +150,7 @@ class DBConnectionPool(DBTester):
self.assertEqual([1], results) self.assertEqual([1], results)
evt.wait() evt.wait()
self.assertEqual([1, 2], results) self.assertEqual([1, 2], results)
self.pool.put(conn)
def test_connection_is_clean_after_put(self): def test_connection_is_clean_after_put(self):
self.pool = self.create_pool() self.pool = self.create_pool()
@@ -168,6 +170,7 @@ class DBConnectionPool(DBTester):
curs2.execute("select * from test_table") curs2.execute("select * from test_table")
# we should have only inserted them once # we should have only inserted them once
self.assertEqual(10, curs2.rowcount) self.assertEqual(10, curs2.rowcount)
self.pool.put(conn2)
def test_visibility_from_other_connections(self): def test_visibility_from_other_connections(self):
self.pool = self.create_pool(3) self.pool = self.create_pool(3)
@@ -256,6 +259,7 @@ class DBConnectionPool(DBTester):
x = Mock() x = Mock()
x._base = 'hi' x._base = 'hi'
self.assertEquals('hi', self.pool._unwrap_connection(x)) self.assertEquals('hi', self.pool._unwrap_connection(x))
conn.close()
def test_safe_close(self): def test_safe_close(self):
self.pool._safe_close(self.connection, quiet=True) self.pool._safe_close(self.connection, quiet=True)
@@ -278,12 +282,16 @@ class DBConnectionPool(DBTester):
self.pool._safe_close(x, quiet=False) self.pool._safe_close(x, quiet=False)
def test_zero_max_idle(self): def test_zero_max_idle(self):
self.pool.put(self.connection)
self.pool.clear()
self.pool = self.create_pool(max_size=2, max_idle=0) self.pool = self.create_pool(max_size=2, max_idle=0)
self.connection = self.pool.get() self.connection = self.pool.get()
self.connection.close() self.connection.close()
self.assertEquals(len(self.pool.free_items), 0) self.assertEquals(len(self.pool.free_items), 0)
def test_zero_max_age(self): def test_zero_max_age(self):
self.pool.put(self.connection)
self.pool.clear()
self.pool = self.create_pool(max_size=2, max_age=0) self.pool = self.create_pool(max_size=2, max_age=0)
self.connection = self.pool.get() self.connection = self.pool.get()
self.connection.close() self.connection.close()
@@ -355,9 +363,11 @@ class DBConnectionPool(DBTester):
# verify that when there's someone waiting on an empty pool # verify that when there's someone waiting on an empty pool
# and someone puts an immediately-closed connection back in # and someone puts an immediately-closed connection back in
# the pool that the waiter gets woken # the pool that the waiter gets woken
self.pool.put(self.connection)
self.pool.clear()
self.pool = self.create_pool(max_size=1, max_age=0) self.pool = self.create_pool(max_size=1, max_age=0)
conn = self.pool.get() self.connection = self.pool.get()
self.assertEquals(self.pool.free(), 0) self.assertEquals(self.pool.free(), 0)
self.assertEquals(self.pool.waiting(), 0) self.assertEquals(self.pool.waiting(), 0)
e = event.Event() e = event.Event()
@@ -369,12 +379,13 @@ class DBConnectionPool(DBTester):
api.sleep(0) # coroutine until it's waiting in get() api.sleep(0) # coroutine until it's waiting in get()
self.assertEquals(self.pool.free(), 0) self.assertEquals(self.pool.free(), 0)
self.assertEquals(self.pool.waiting(), 1) self.assertEquals(self.pool.waiting(), 1)
self.pool.put(conn) self.pool.put(self.connection)
timer = api.exc_after(1, api.TimeoutError) timer = api.exc_after(1, api.TimeoutError)
conn = e.wait() conn = e.wait()
timer.cancel() timer.cancel()
self.assertEquals(self.pool.free(), 0) self.assertEquals(self.pool.free(), 0)
self.assertEquals(self.pool.waiting(), 0) self.assertEquals(self.pool.waiting(), 0)
self.pool.put(conn)
@skipped @skipped
def test_0_straight_benchmark(self): def test_0_straight_benchmark(self):
@@ -464,8 +475,8 @@ def get_auth():
for modname, connectargs in auth_utf8.items()]) for modname, connectargs in auth_utf8.items()])
except (IOError, ImportError), e: except (IOError, ImportError), e:
pass pass
return {'MySQLdb':{'host': 'localhost','user': 'root','passwd': '','db': 'persist0'}, return {'MySQLdb':{'host': 'localhost','user': 'root','passwd': ''},
'psycopg2':{'database':'test', 'user':'test'}} 'psycopg2':{'user':'test'}}
def mysql_requirement(_f): def mysql_requirement(_f):
@@ -473,7 +484,6 @@ def mysql_requirement(_f):
import MySQLdb import MySQLdb
try: try:
auth = get_auth()['MySQLdb'].copy() auth = get_auth()['MySQLdb'].copy()
auth.pop('db')
MySQLdb.connect(**auth) MySQLdb.connect(**auth)
return True return True
except MySQLdb.OperationalError: except MySQLdb.OperationalError:
@@ -515,10 +525,11 @@ class MysqlConnectionPool(object):
self.drop_db() self.drop_db()
except Exception: except Exception:
pass pass
dbname = auth.pop('db') dbname = 'test%s' % os.getpid()
db = self._dbmodule.connect(**auth).cursor() db = self._dbmodule.connect(**auth).cursor()
db.execute("create database "+dbname) db.execute("create database "+dbname)
db.close() db.close()
self._auth['db'] = dbname
del db del db
def drop_db(self): def drop_db(self):
@@ -539,7 +550,6 @@ def postgres_requirement(_f):
import psycopg2 import psycopg2
try: try:
auth = get_auth()['psycopg2'].copy() auth = get_auth()['psycopg2'].copy()
auth.pop('database')
psycopg2.connect(**auth) psycopg2.connect(**auth)
return True return True
except psycopg2.OperationalError: except psycopg2.OperationalError:
@@ -579,10 +589,11 @@ class Psycopg2ConnectionPool(object):
except Exception: except Exception:
pass pass
auth = self._auth.copy() auth = self._auth.copy()
dbname = auth.pop('database')
conn = self._dbmodule.connect(**auth) conn = self._dbmodule.connect(**auth)
conn.set_isolation_level(0) conn.set_isolation_level(0)
db = conn.cursor() db = conn.cursor()
dbname = 'test%s' % os.getpid()
self._auth['database'] = dbname
db.execute("create database "+dbname) db.execute("create database "+dbname)
db.close() db.close()
del db del db