diff -r 5a0ee8de7f06 -r b91205ada414 server/test/unittest_repository.py --- a/server/test/unittest_repository.py Wed Apr 20 08:28:52 2011 +0200 +++ b/server/test/unittest_repository.py Fri Apr 15 16:05:20 2011 +0200 @@ -685,5 +685,77 @@ req.cnx.commit() self.assertEqual(cm.exception.errors, {'inline1-subject': u'RQLUniqueConstraint S type T, S inline1 A1, A1 todo_by C, Y type T, Y inline1 A2, A2 todo_by C failed'}) + + +class PerformanceTest(CubicWebTC): + def setup_database(self): + import logging + logger = logging.getLogger('cubicweb.session') + #logger.handlers = [logging.StreamHandler(sys.stdout)] + logger.setLevel(logging.INFO) + self.info = logger.info + + def test_composite_deletion(self): + req = self.request() + personnes = [] + t0 = time.time() + for i in xrange(2000): + p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M') + personnes.append(p) + abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M') + for j in xrange(0, 2000, 100): + abraham.set_relations(personne_composite=personnes[j:j+100]) + t1 = time.time() + self.info('creation: %.2gs', (t1 - t0)) + req.cnx.commit() + t2 = time.time() + self.info('commit creation: %.2gs', (t2 - t1)) + self.execute('DELETE Personne P WHERE P eid %(eid)s', {'eid': abraham.eid}) + t3 = time.time() + self.info('deletion: %.2gs', (t3 - t2)) + req.cnx.commit() + t4 = time.time() + self.info("commit deletion: %2gs", (t4 - t3)) + + def test_add_relation_non_inlined(self): + req = self.request() + personnes = [] + for i in xrange(2000): + p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M') + personnes.append(p) + req.cnx.commit() + t0 = time.time() + abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', + personne_composite=personnes[:100]) + t1 = time.time() + self.info('creation: %.2gs', (t1 - t0)) + for j in xrange(100, 2000, 100): + abraham.set_relations(personne_composite=personnes[j:j+100]) + t2 = time.time() + self.info('more relations: %.2gs', (t2-t1)) + req.cnx.commit() + t3 = time.time() + self.info('commit creation: %.2gs', (t3 - t2)) + + def test_add_relation_inlined(self): + req = self.request() + personnes = [] + for i in xrange(2000): + p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M') + personnes.append(p) + req.cnx.commit() + t0 = time.time() + abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', + personne_inlined=personnes[:100]) + t1 = time.time() + self.info('creation: %.2gs', (t1 - t0)) + for j in xrange(100, 2000, 100): + abraham.set_relations(personne_inlined=personnes[j:j+100]) + t2 = time.time() + self.info('more relations: %.2gs', (t2-t1)) + req.cnx.commit() + t3 = time.time() + self.info('commit creation: %.2gs', (t3 - t2)) + if __name__ == '__main__': unittest_main()