Index: third_party/buildbot_8_4p1/buildbot/test/unit/test_db_pool.py |
diff --git a/third_party/buildbot_8_4p1/buildbot/test/unit/test_db_pool.py b/third_party/buildbot_8_4p1/buildbot/test/unit/test_db_pool.py |
index 09d0e21d7a35180933b924c4a11cb73eb31d02cc..35d480223928e6bddd678aaf55df0087d37f0082 100644 |
--- a/third_party/buildbot_8_4p1/buildbot/test/unit/test_db_pool.py |
+++ b/third_party/buildbot_8_4p1/buildbot/test/unit/test_db_pool.py |
@@ -13,9 +13,11 @@ |
# |
# Copyright Buildbot Team Members |
+import os |
+import time |
import sqlalchemy as sa |
from twisted.trial import unittest |
-from twisted.internet import defer |
+from twisted.internet import defer, reactor |
from buildbot.db import pool |
from buildbot.test.util import db |
@@ -103,6 +105,49 @@ class Basic(unittest.TestCase): |
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.deferredGenerator |
+ 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) |
+ |
+ wfd = defer.waitForDeferred( |
+ defer.DeferredList([ d1, d2 ])) |
+ yield wfd |
+ wfd.getResult() |
+ |
+ # don't run this test, since it takes 30s |
+ del test_inserts |
+ |
+ |
class Native(unittest.TestCase, db.RealDatabaseMixin): |
# similar tests, but using the BUILDBOT_TEST_DB_URL |