commit 766cc675c52488e658a0884f0e0b5c8b044731b2 Author: Matthew Finkel Matthew.Finkel@gmail.com Date: Fri Mar 21 02:48:00 2014 +0000
Add unit tests for bridgedb.Storage --- lib/bridgedb/test/test_Storage.py | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
diff --git a/lib/bridgedb/test/test_Storage.py b/lib/bridgedb/test/test_Storage.py new file mode 100644 index 0000000..8b0affd --- /dev/null +++ b/lib/bridgedb/test/test_Storage.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +"""Unittests for the :mod:`bridgedb.Storage` module.""" + +from twisted.python import log +from twisted.trial import unittest +import bridgedb.Storage as Storage +from twisted.internet import reactor +from twisted.internet.threads import deferToThread +import os +import threading +from time import sleep + +class DatabaseTest(unittest.TestCase): + def setUp(self): + self.dbfname = 'test-bridgedb.sqlite' + Storage.setDBFilename(self.dbfname) + + def tearDown(self): + if os.path.isfile(self.dbfname): + os.unlink(self.dbfname) + Storage.clearGlobalDB() + + def _runAndDie(self, timeout, func): + with func(): + sleep(timeout) + + def _cb_assertTrue(self, result): + self.assertTrue(result) + + def _cb_assertFalse(self, result): + self.assertFalse(result) + + def _eb_Failure(self, failure): + self.fail(failure) + + def test_getDB_FalseWhenLocked(self): + Storage._LOCK = threading.Lock() + Storage._LOCK.acquire() + self.assertFalse(Storage._LOCK.acquire(False)) + + def test_getDB_AcquireLock(self): + Storage.initializeDBLock() + with Storage.getDB() as db: + self.assertIsInstance(db, Storage.Database) + self.assertTrue(Storage.dbIsLocked()) + self.assertEqual(db, Storage._OPENED_DB) + + def test_getDB_ConcurrencyLock(self): + timeout = 1 + d1 = deferToThread(self._runAndDie, timeout, Storage.getDB) + d1.addCallback(self._cb_assertFalse) + d1.addErrback(self._eb_Failure) + d2 = deferToThread(Storage.getDB, False) + d2.addCallback(self._cb_assertFalse) + d2.addErrback(self._eb_Failure) + d2.addCallback(self._cb_assertTrue, Storage.getDB(False))