aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py185
1 files changed, 0 insertions, 185 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py
deleted file mode 100644
index 67d6a7e3..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_db_pool.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# This file is part of Buildbot. Buildbot is free software: you can
-# redistribute it and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Copyright Buildbot Team Members
-
-import os
-import time
-import sqlalchemy as sa
-from twisted.trial import unittest
-from twisted.internet import defer, reactor
-from buildbot.db import pool
-from buildbot.test.util import db
-
-class Basic(unittest.TestCase):
-
- # basic tests, just using an in-memory SQL db and one thread
-
- def setUp(self):
- self.engine = sa.create_engine('sqlite://')
- self.engine.optimal_thread_pool_size = 1
- self.pool = pool.DBThreadPool(self.engine)
-
- def tearDown(self):
- self.pool.shutdown()
-
- def test_do(self):
- def add(conn, addend1, addend2):
- rp = conn.execute("SELECT %d + %d" % (addend1, addend2))
- return rp.scalar()
- d = self.pool.do(add, 10, 11)
- def check(res):
- self.assertEqual(res, 21)
- d.addCallback(check)
- return d
-
- def test_do_error(self):
- def fail(conn):
- rp = conn.execute("EAT COOKIES")
- return rp.scalar()
- d = self.pool.do(fail)
- return self.assertFailure(d, sa.exc.OperationalError)
-
- def test_do_exception(self):
- def raise_something(conn):
- raise RuntimeError("oh noes")
- d = self.pool.do(raise_something)
- return self.assertFailure(d, RuntimeError)
-
- def test_do_with_engine(self):
- def add(engine, addend1, addend2):
- rp = engine.execute("SELECT %d + %d" % (addend1, addend2))
- return rp.scalar()
- d = self.pool.do_with_engine(add, 10, 11)
- def check(res):
- self.assertEqual(res, 21)
- d.addCallback(check)
- return d
-
- def test_do_with_engine_exception(self):
- def fail(engine):
- rp = engine.execute("EAT COOKIES")
- return rp.scalar()
- d = self.pool.do_with_engine(fail)
- return self.assertFailure(d, sa.exc.OperationalError)
-
- def test_persistence_across_invocations(self):
- # NOTE: this assumes that both methods are called with the same
- # connection; if they run in parallel threads then it is not valid to
- # assume that the database engine will have finalized the first
- # transaction (and thus created the table) by the time the second
- # transaction runs. This is why we set optimal_thread_pool_size in
- # setUp.
- d = defer.succeed(None)
- def create_table(engine):
- engine.execute("CREATE TABLE tmp ( a integer )")
- d.addCallback( lambda r : self.pool.do_with_engine(create_table))
- def insert_into_table(engine):
- engine.execute("INSERT INTO tmp values ( 1 )")
- d.addCallback( lambda r : self.pool.do_with_engine(insert_into_table))
- return d
-
-
-class Stress(unittest.TestCase):
-
- def setUp(self):
- setup_engine = sa.create_engine('sqlite:///test.sqlite')
- setup_engine.execute("pragma journal_mode = wal")
- setup_engine.execute("CREATE TABLE test (a integer, b integer)")
-
- self.engine = sa.create_engine('sqlite:///test.sqlite')
- self.engine.optimal_thread_pool_size = 2
- self.pool = pool.DBThreadPool(self.engine)
-
- def tearDown(self):
- self.pool.shutdown()
- os.unlink("test.sqlite")
-
- @defer.inlineCallbacks
- def test_inserts(self):
- def write(conn):
- trans = conn.begin()
- conn.execute("INSERT INTO test VALUES (1, 1)")
- time.sleep(31)
- trans.commit()
- d1 = self.pool.do(write)
-
- def write2(conn):
- trans = conn.begin()
- conn.execute("INSERT INTO test VALUES (1, 1)")
- trans.commit()
- d2 = defer.Deferred()
- d2.addCallback(lambda _ :
- self.pool.do(write2))
- reactor.callLater(0.1, d2.callback, None)
-
- yield defer.DeferredList([ d1, d2 ])
-
- # don't run this test, since it takes 30s
- del test_inserts
-
-
-class BasicWithDebug(Basic):
-
- # same thing, but with debug=True
-
- def setUp(self):
- pool.debug = True
- return Basic.setUp(self)
-
- def tearDown(self):
- pool.debug = False
- return Basic.tearDown(self)
-
-
-class Native(unittest.TestCase, db.RealDatabaseMixin):
-
- # similar tests, but using the BUILDBOT_TEST_DB_URL
-
- def setUp(self):
- d = self.setUpRealDatabase(want_pool=False)
- def make_pool(_):
- self.pool = pool.DBThreadPool(self.db_engine)
- d.addCallback(make_pool)
- return d
-
- def tearDown(self):
- # try to delete the 'native_tests' table
- meta = sa.MetaData()
- native_tests = sa.Table("native_tests", meta)
- def thd(conn):
- native_tests.drop(bind=self.db_engine, checkfirst=True)
- d = self.pool.do(thd)
- d.addCallback(lambda _ : self.pool.shutdown())
- d.addCallback(lambda _ : self.tearDownRealDatabase())
- return d
-
- def test_ddl_and_queries(self):
- meta = sa.MetaData()
- native_tests = sa.Table("native_tests", meta,
- sa.Column('name', sa.String(length=200)))
-
- # perform a DDL operation and immediately try to access that table;
- # this has caused problems in the past, so this is basically a
- # regression test.
- def ddl(conn):
- t = conn.begin()
- native_tests.create(bind=conn)
- t.commit()
- d = self.pool.do(ddl)
- def access(conn):
- native_tests.insert(bind=conn).execute([ {'name':'foo'} ])
- d.addCallback(lambda _ :
- self.pool.do(access))
- return d
-