----- Original Message ----- > From: "Shireesh Anjal" <san...@redhat.com> > To: "Mike Kolesnik" <mkole...@redhat.com> > Cc: engine-devel@ovirt.org, "infra" <in...@ovirt.org> > Sent: Monday, August 20, 2012 1:30:43 PM > Subject: Re: [Engine-devel] Any way to break the dao_unit_tests up? > > On Monday 20 August 2012 11:16 AM, Mike Kolesnik wrote: > > ----- Original Message ----- > >> The DAO unit tests take twice as long as the rest of the test to > >> run > >> is > >> there any way to break them up into two pieces? > >> > > It will not be easy.. > > > > The way the tests are built today is with DB-unit. > > DB-unit allows to have an XML file with predefined data (called > > fixtures) which is used to recreate the DB data each time a > > test-class is run. > > > > This is all fine, except that in our tests there are (at least) 2 > > issues: > > 1. The same fixtures.xml file is used in all DAO tests. > > 2. Some DAOs require fixtures for several tables. > > > > Now, we could fix issue #1 by splitting the fixtures file into > > smaller files, each relating to only one table, which would allow > > us to run these tests in parallel on the same DB. > > Issue #2 would require to figure out which tests require several > > fixtures, and have them run isolated from the other tests which > > require only a single table. > > > > A simpler solution could be to have the tests run each on it's own > > db schema (or it's own db) which eliminates the dependencies and > > allows to run all in parallel, but is a bit more complicated to > > maintain (we would need some script that generates these > > schemas/dbs for tests automatically) and keeping multiple schemas > > up to date would also require CPU time. > > > > This is speaking in terms of the tests themselves, without > > considering the build process itself. > > There are two issues here: > > 1) DB connection is created during initialization of every test case, > and destroyed at the end of each test case execution > 2) The fixtures data is inserted during initialization of every test > case > > I think both of these can be resolved by > - creating the test data only during initialization of the first > test > case, which will include creating the connection (with auto-commit = > false), inserting fixtures data and committing it > - rolling back any changes done to the database during test case > execution in the tearDown method > > I just tried this in two phases. Using the same connection across all > test cases brought down the dao unit tests run time from 4:42.683s to > 1:07.628s, and inserting the fixtures data only once further brought > it > down to just 22.295s ! (on my local development machine) > > I've just sent a patch with these changes: > http://gerrit.ovirt.org/7336
Beat me to the punch :-) (BTW, I have some implementation details - see inline in gerrit) > > > > >> -- > >> Thanks > >> Robert Middleswarth > >> @rmiddle (twitter/IRC) > >> > >> _______________________________________________ > >> Engine-devel mailing list > >> Engine-devel@ovirt.org > >> http://lists.ovirt.org/mailman/listinfo/engine-devel > >> > > _______________________________________________ > > Engine-devel mailing list > > Engine-devel@ovirt.org > > http://lists.ovirt.org/mailman/listinfo/engine-devel > > _______________________________________________ > Engine-devel mailing list > Engine-devel@ovirt.org > http://lists.ovirt.org/mailman/listinfo/engine-devel > _______________________________________________ Engine-devel mailing list Engine-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-devel