[Kimchi-devel] Why do we use mockmodel?

Aline Manera alinefm at linux.vnet.ibm.com
Fri Oct 3 14:15:56 UTC 2014


On 08/11/2014 02:35 PM, Crístian Viana wrote:
> Hi!
>
> After creating a few patches for Kimchi, it occurred to me that the 
> mockmodel design has more cons than pros. So I started wondering why 
> we still use it.
>
> I understand - and totally agree - that we should have an extensive 
> test infrastructure to make sure the code runs as designed and to make 
> it very easy to find regression bugs on every new feature we 
> implement. And as Kimchi works very integrated to its host system, it 
> may not be easy to create expected/failed situations for things we 
> don't always have control.
>
> But for every new feature we implement, we currently have to:
>
> 1) Implement the feature itself
> 2) Create tests for (1)
> 3) Implement the feature in a mock environment
> 4) Create tests for (3)
>
> And by looking at some existing code, many of the mock tests don't 
> actually test anything. They're just there so we can say we have a 
> mock implementation and a test for it. Why create a mock function and 
> a test for the mock function if what we need is to test the real code? 
> And a lot of times, the mock implementation (and the tests) are just 
> copy/paste of the original feature. For me, that seems very tedious 
> and useless.
>
> Why don't we get rid of the mockmodel and keep only the "real" model? 
> I understand that it's not so simple to remove it right away, that's 
> why I'm starting this discussion so we could see how to do it better - 
> if we're actually going to do it. What would we miss if we didn't have 
> the mockmodel anymore? I believe we'll need to be more careful when 
> writing tests which run on a real environment (i.e. we can't "leak" 
> VMs, networks, templates, or anything else) but at least we'll always 
> test real code and we won't be writing code that won't be used.
>
> Please share your opinion with us.
>
> Best regards,
> Crístian.

Hi Cristian,

Sorry about the time but let me clarify some things.
The mockmodel exists to make the tests easier but also to allow user run 
Kimchi without affecting it system (with --test option).
It permits user uses Kimchi without the fear of breaking something on 
system.

But I completely agree with you that what we have today is not the best 
solution for it.
Because that I proposed a mockmodel refactor for the next release.

----
    The mockmodel was designed to provide a way to user tests Kimchi 
without affecting the system (by "kimchid --test") and also to make the 
tests easier to do.
    But in fact, we have a bunch of code that completely differs from 
the real model, so the developer needs to do 2 kinds of implementations 
while developing a new feature.
    My proposal is simplify that by using Model() with "test:///default" 
URI.
    This configuration does not affect the system in real and also can 
provide us a way to test the new feature in a closer scenario to the 
real one: by connecting to libvirt and doing the operations.
    As you may know "test:///default" driver has some limitations that 
prevents some operations, for example, screenshots.
    To solve it we could only override what is not supported by this 
driver and create a simpler mockmodel.

    Example:
    class MockModel(Model):
        super(Model, self).__init__("test:///default")

        def vmscreenshot_lookup():
            # do some mock code

     I think in this way we will have a significant reduction in our 
mockmodel code.
----

I think with this refactoring we can make mockmodel more devel friendly 
and avoid a lot of duplicated code.




More information about the Kimchi-devel mailing list