On 08/21/2012 11:59 AM, Allon Mureinik wrote:


----- Original Message -----
From: "Mike Kolesnik" <mkole...@redhat.com>
To: "Shireesh Anjal" <san...@redhat.com>
Cc: engine-devel@ovirt.org, "infra" <in...@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!

+100 on this, good work!




--
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

_______________________________________________
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel

Reply via email to