diff -r 8209bede1a4b -r 3f5b59527d31 server/test/unittest_postgres.py --- a/server/test/unittest_postgres.py Thu Feb 06 19:04:03 2014 +0100 +++ b/server/test/unittest_postgres.py Mon Mar 24 18:14:22 2014 +0100 @@ -1,4 +1,4 @@ -# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -17,6 +17,7 @@ # with CubicWeb. If not, see . from datetime import datetime +from threading import Thread from logilab.common.testlib import SkipTest @@ -30,6 +31,26 @@ class PostgresFTITC(CubicWebTC): configcls = PostgresApptestConfiguration + def test_eid_range(self): + # concurrent allocation of eid ranges + source = self.session.repo.sources_by_uri['system'] + range1 = [] + range2 = [] + def allocate_eid_ranges(session, target): + for x in xrange(1, 10): + eid = source.create_eid(session, count=x) + target.extend(range(eid-x, eid)) + + t1 = Thread(target=lambda: allocate_eid_ranges(self.session, range1)) + t2 = Thread(target=lambda: allocate_eid_ranges(self.session, range2)) + t1.start() + t2.start() + t1.join() + t2.join() + self.assertEqual(range1, sorted(range1)) + self.assertEqual(range2, sorted(range2)) + self.assertEqual(set(), set(range1) & set(range2)) + def test_occurence_count(self): req = self.request() c1 = req.create_entity('Card', title=u'c1',