server/test/unittest_extlite.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 02 Sep 2009 10:23:38 +0200
branch3.5
changeset 3084 096d680c9da2
parent 2857 81d10fedc32e
child 3147 83ad6ff13e3f
permissions -rw-r--r--
backport stable

import threading, os, time

from logilab.common.testlib import TestCase, unittest_main
from logilab.common.db import get_connection

class SQLiteTC(TestCase):
    sqlite_file = '_extlite_test.sqlite'

    def _cleanup(self):
        try:
            os.remove(self.sqlite_file)
        except:
            pass

    def setUp(self):
        self._cleanup()
        cnx1 = get_connection('sqlite', database=self.sqlite_file)
        cu = cnx1.cursor()
        cu.execute('CREATE TABLE toto(name integer);')
        cnx1.commit()
        cnx1.close()

    def tearDown(self):
        self._cleanup()

    def test(self):
        lock = threading.Lock()

        def run_thread():
            cnx2 = get_connection('sqlite', database=self.sqlite_file)
            lock.acquire()
            cu = cnx2.cursor()
            cu.execute('SELECT name FROM toto')
            self.failIf(cu.fetchall())
            cnx2.commit()
            lock.release()
            time.sleep(0.1)
            lock.acquire()
            cu.execute('SELECT name FROM toto')
            self.failUnless(cu.fetchall())
            lock.release()

        cnx1 = get_connection('sqlite', database=self.sqlite_file)
        lock.acquire()
        thread = threading.Thread(target=run_thread)
        thread.start()
        cu = cnx1.cursor()
        cu.execute('SELECT name FROM toto')
        lock.release()
        time.sleep(0.1)
        cnx1.commit()
        lock.acquire()
        cu.execute("INSERT INTO toto(name) VALUES ('toto')")
        cnx1.commit()
        lock.release()

if __name__ == '__main__':
    unittest_main()