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

Robert Middleswarth robert at middleswarth.net
Wed Aug 22 02:23:11 UTC 2012


On 08/21/2012 05:01 AM, Yair Zaslavsky wrote:
>
>
> On 08/21/2012 11:59 AM, Allon Mureinik wrote:
>>
>>
>> ----- 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!
>
> +100 on this, good work!
>
+100 on this.  It reduce the processing time and load on the boxes to 
sustainable levels.  This should improve response time a lot on 
submitted patches.

Thanks
Robert
>>>
>>>>
>>>>>
>>>>>> -- 
>>>>>> 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
>>>
>> _______________________________________________
>> Engine-devel mailing list
>> Engine-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/engine-devel
>>
> _______________________________________________
> Infra mailing list
> Infra at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/infra


-- 
Thanks
Robert Middleswarth
@rmiddle (twitter/Freenode IRC)
@RobertM (OFTC IRC)




More information about the Infra mailing list