On 01/11/2016 03:49 PM, Serge Kovaleff wrote:
Hi All,

Last week I had a noble goal to write "one-more" functional test in Ironic.
I did find a folder "func" but it was empty.

Friends helped me to find a WIP patch
https://review.openstack.org/#/c/235612/

and here comes the question of this email: what approach we would like
to implement:
Option 1 - write infrastructure code that starts/configure/stops the
services
Option 2 - rely on installed DevStack and run the tests over it

Both options have their Cons and Pros. Both options are implemented
across the OpenStack umbrella.
Option 1 - Glance, Nova, the patch above
Option 2 - HEAT and my favorite at the moment.

Any ideas?

I think we should eventually end up with supporting both standalone functional tests (#1) and tempest-based (#3).

A bit of context on #1. We've been using it in ironic-inspector since nearly its inception, when devstack plugins didn't exist and our project was on stackforge, so we had no way of implementing our dsvm gate. The basic idea is to start a full-featured service with mocked access to other services and simplified environment. We've written a decorator [1] that starts the service in __enter__ and stops in __exit__. It uses a temporary configuration file [2] with authentication disabled and database in temporary SQLite file. The service is started in a new green thread and exits when the test exits. We mock ironicclient with the usual 'mock' library to avoid requirements on a running ironic instance.

We do 2 kinds of tests: just an API test like [3] or full-flow introspection tests like [4]. In the latter case we first start introspection via API, verify that status is "in progress", then call the ramdisk callback endpoint with a fake data, and verify that introspection ends successfully.

Applying the same thing to ironic might be somewhat trickier. We can run conductor and API in the same process and use oslo.messaging fake driver [5] to avoid AMQP dependency. We'll have to use a fake network implementation and either mock glance or make sure we use local file system URL's for all images (IIRC we do support it).

Going further, if we create a simple fake IPA, we can even do a full-flow test with fake_agent driver. We will start deployment, make sure fake IPA was called with a right image, make it report success and see deployment finish. We might want to modify fake interfaces to record all calls, so that we can verify that boot interface was called properly.

[1] https://github.com/openstack/ironic-inspector/blob/master/ironic_inspector/test/functional.py#L358-L393 [2] https://github.com/openstack/ironic-inspector/blob/master/ironic_inspector/test/functional.py#L36-L51 [3] https://github.com/openstack/ironic-inspector/blob/master/ironic_inspector/test/functional.py#L249-L291 [4] https://github.com/openstack/ironic-inspector/blob/master/ironic_inspector/test/functional.py#L177-L196
[5] http://docs.openstack.org/developer/oslo.messaging/drivers.html#fake


Cheers,
Serge Kovaleff
http://www.mirantis.com <http://www.mirantis.com/>
cell: +38 (063) 83-155-70


__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to