[Engine-devel] Any way to break the dao_unit_tests up?

Allon Mureinik amureini at redhat.com
Tue Aug 21 08:59:19 UTC 2012



----- Original Message -----
> From: "Mike Kolesnik" <mkolesni at redhat.com>
> To: "Shireesh Anjal" <sanjal at redhat.com>
> Cc: engine-devel at ovirt.org, "infra" <infra at ovirt.org>
> Sent: Tuesday, August 21, 2012 9:43:23 AM
> Subject: Re: [Engine-devel] Any way to break the dao_unit_tests up?
> 
> ----- Original Message -----
> > 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
> 
> Patch merged,
> 
> Thanks Shireesh for the contribution, now the DAO tests are super
> fast!
20-something seconds to run DAO tests?
awesome!
Kudos, Shireesh!
> 
> > 
> > >
> > >> --
> > >> Thanks
> > >> Robert Middleswarth
> > >> @rmiddle (twitter/IRC)
> > >>
> > >> _______________________________________________
> > >> Engine-devel mailing list
> > >> Engine-devel at ovirt.org
> > >> http://lists.ovirt.org/mailman/listinfo/engine-devel
> > >>
> > > _______________________________________________
> > > Engine-devel mailing list
> > > Engine-devel at ovirt.org
> > > http://lists.ovirt.org/mailman/listinfo/engine-devel
> > 
> > 
> _______________________________________________
> Engine-devel mailing list
> Engine-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/engine-devel
> 



More information about the Infra mailing list