diff -r cb3466e08d81 -r 293fe4b49e28 server/test/unittest_repository.py --- a/server/test/unittest_repository.py Wed May 20 11:55:33 2009 +0200 +++ b/server/test/unittest_repository.py Wed May 20 14:19:02 2009 +0200 @@ -199,6 +199,26 @@ def test_transaction_interleaved(self): self.skip('implement me') + def test_close_wait_processing_request(self): + repo = self.repo + cnxid = repo.connect(*self.default_user_password()) + repo.execute(cnxid, 'INSERT CWUser X: X login "toto", X upassword "tutu", X in_group G WHERE G name "users"') + repo.commit(cnxid) + # close has to be in the thread due to sqlite limitations + def close_in_a_few_moment(): + time.sleep(0.1) + repo.close(cnxid) + t = threading.Thread(target=close_in_a_few_moment) + t.start() + try: + print 'execute' + repo.execute(cnxid, 'DELETE CWUser X WHERE X login "toto"') + print 'commit' + repo.commit(cnxid) + print 'commited' + finally: + t.join() + def test_initial_schema(self): schema = self.repo.schema # check order of attributes is respected @@ -238,31 +258,29 @@ def test_pyro(self): import Pyro Pyro.config.PYRO_MULTITHREADED = 0 - lock = threading.Lock() + done = [] # the client part has to be in the thread due to sqlite limitations - t = threading.Thread(target=self._pyro_client, args=(lock,)) + t = threading.Thread(target=self._pyro_client, args=(done,)) try: daemon = self.repo.pyro_register() t.start() - # connection - daemon.handleRequests(1.0) - daemon.handleRequests(1.0) - daemon.handleRequests(1.0) - # get schema - daemon.handleRequests(1.0) - # execute - daemon.handleRequests(1.0) - t.join() + while not done: + daemon.handleRequests(1.0) + t.join(1) + if t.isAlive(): + self.fail('something went wrong, thread still alive') finally: repository.pyro_unregister(self.repo.config) - def _pyro_client(self, lock): + def _pyro_client(self, done): cnx = connect(self.repo.config.appid, u'admin', 'gingkow') # check we can get the schema schema = cnx.get_schema() self.assertEquals(schema.__hashmode__, None) - rset = cnx.cursor().execute('Any U,G WHERE U in_group G') - + cu = cnx.cursor() + rset = cu.execute('Any U,G WHERE U in_group G') + cnx.close() + done.append(True) def test_internal_api(self): repo = self.repo