[openstack-dev] how to provide tests environments for python things that require C extensions

Flavio Percoco flavio at redhat.com
Fri Sep 5 14:37:47 UTC 2014


On 09/05/2014 04:21 PM, Monty Taylor wrote:
> On 09/05/2014 06:32 AM, Sean Dague wrote:
>> While reviewing this zookeeper service group fix in Nova -
>> https://review.openstack.org/#/c/102639/ it was exposed that the
>> zookeeper tests aren't running in infra.
>>
>> The crux of the issue is that zookeeper python modules are C extensions.
>> So you have to either install from packages (which we don't do in unit
>> tests) or install from pip, which means forcing zookeeper dev packages
>> locally. Realistically this is the same issue we end up with for mysql
>> and pg, but given their wider usage we just forced that pain on
>> developers.
>>
>> But it seems like a bad stand off between testing upstream and testing
>> normal path locally.
>>
>> Big picture it would be nice to not require a ton of dev libraries
>> locally for optional components, but still test them upstream. So that
>> in the base case I'm not running zookeeper locally, but if it fails
>> upstream because I broke something in zookeeper, it's easy enough to
>> spin up that dev env that has it.
>>
>> Which feels like we need some decoupling on our requirements vs. tox
>> targets to get there. CC to Monty and Clark as our super awesome tox
>> hackers to help figure out if there is a path forward here that makes
>> sense.
> 
> Funny story - I've come to dislike what we're doing here, so I've been
> slowly working on an idea in this area:
> 
> https://github.com/emonty/dox
> 
> The tl;dr is "it's like tox, except it uses docker instead of
> virtualenv" - which means we can express all of our requirements, not
> just pip ones.
> 
> It's not quite ready yet - although I'd be happy to move it in to
> stackforge or even openstack-dev and get other people hacking on it with
> me until it is. The main problem that needs solving, I think, is how to
> sanely express multiple target environments (like py26,py27) without
> making a stupidly baroque config file. OTOH, tox's insistence of making
> a new virtualenv for each "environment" is heavyweight and has led to
> some pretty crazy hacks across the project. Luckily, docker itself does
> an EXCELLENT job at handling caching and reuse - so I think we can have
> a set of containers that something in infra (waves hands) publishes to
> dockerhub, like:
> 
>   infra/py27
>   infra/py26
> 
> And then have things like nova build on those, like:
> 
>   infra/nova/py27
> 
> Which would have zookeeper as well
> 
> The _really_ fun part, again, if we can figure out how to express it in
> config without reimplementing make accidentally, is that we could start
> to have things like:
> 
>   infra/mysql
>   infra/postgres
>   infra/mongodb
> 
> And have dox files say things like:
> 
>   Nova unittests want a python27 environment, this means we want an
> infra/mysql container, an infra/postgres container and for those to be
> linked to the infra/nova/py27 container where the tests will run.
> 
> Since those are all reusable, the speed should be _Excellent_ and we
> should be able to more easily get more things runnable locally without
> full devstack.
> 
> Thoughts? Anybody wanna hack on it with me? I think it could wind up
> being a pretty useful tool for folks outside of OpenStack too if we get
> it right.
> 

I think it is sexy - I don't describe ideas/software as sexy that often
but this one deserves it. I'm interested in helping out.

I'll clone it and give it a try - or at least take a look at it.

Flavio

> Monty
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


-- 
@flaper87
Flavio Percoco



More information about the OpenStack-dev mailing list