[openstack-dev] [QA]Refactoring Scenarios manager.py

Sean Dague sean at dague.net
Wed Mar 1 13:20:36 UTC 2017

On 03/01/2017 08:03 AM, Andrea Frittoli wrote:
> On Wed, Mar 1, 2017 at 12:54 PM Sean Dague <sean at dague.net
> <mailto:sean at dague.net>> wrote:
>     On 03/01/2017 07:35 AM, Jordan Pittier wrote:
>     >
>     >
>     > On Wed, Mar 1, 2017 at 3:57 AM, Ghanshyam Mann
>     <ghanshyammann at gmail.com <mailto:ghanshyammann at gmail.com>
>     > <mailto:ghanshyammann at gmail.com <mailto:ghanshyammann at gmail.com>>>
>     wrote:
>     >
>     >     Doing gradual refactoring and fixing plugins time to time
>     needs lot
>     >     of wait and sync.
>     >
>     >     That needs:
>     >     1. Plugins to switch from current method usage. Plugins to
>     have some
>     >     other function or same copy paste code what current scenario base
>     >     class has.
>     >     2. Tempest patch to wait for plugin fix.
>     >     3. Plugins to switch back to stable interface once Tempest
>     going to
>     >     provide those.
>     >
>     >     This needs lot of sync between tempest and plugins and we have to
>     >     wait for tempest refactoring patch for long.
>     >
>     >     To make it more efficient, how about this:
>     >     1. Keep the scenario manger copy in tempest as it is. for plugins
>     >     usage only.
>     >
>     > Given that the refactoring effort "started" a year ago, at the current
>     > speed it may take 2 years to complete. In the mean time we will have a
>     > massive code duplication and a maintenance burden.
>     >
>     >     2. Start refactoring the scenario framework by adding more and
>     more
>     >     helper function under /common or lib.
>     >
>     > Starting a "framework" (each time I see that word, I have a bad
>     feeling)
>     > from scratch without users and usage is very very difficult. How do we
>     > know what we need in that framework and what will be actually used in
>     > tests ?
>     I'm with Jordan, honestly, common functions and inheritance aren't going
>     to help anyway. My feeling is that the only way to sanely take things
>     forward is to start pivoting towards fixtures. And basically error if
>     inheritance is used in tests. The functions on base classes is what is
>     causing all the pain of rewind, because it's not a contract, but it's
>     also magically there, so people try to use it.
>     This would mean that every test would have more setUp with a bunch of
>     explicit fixtures, but that's fine, it's a little more time thinking
>     through the writing of the tests, and a lot easier to read them to know
>     what is going on, and to delete them later. Basically get rid of all
>     class/superclass magic.
>     > The effort was called scenario refactoring and I think that's what we
>     > should do. We should not do "start from scratch scenarios" or
>     "copy all
>     > the code and see what happens".
>     >
>     > There's no problem with plugins. We committed to have a stable
>     interface
>     > which is documented and agreed upon. It's clearly written
>     > here
>     https://docs.openstack.org/developer/tempest/plugin.html#stable-tempest-apis-plugins-may-use
>     > The rest is private, for Tempest internal use. If Tempest cores
>     disagree
>     > with that, then we should first of all put a spec and rewrite that
>     > document.
>     It does seem like there is a tough love moment coming about the fact
>     that APIs were consumed that were specifically out of bounds. Either the
>     team commits to them inbounds, and there is the contract, or moves
>     forward under the existing contract.
>     Though, I expect the issue is that because all the Tempest tests work in
>     this super class way, this is the only stuff people understood and copy
>     pasted. So it does feel like there has to be at least a couple of
>     instances in the Tempest tree of how the team *wants* other projects to
>     write tests that they can point people to.
> +1 on this. Which is why we need to refactor our scenario test to a sane
> code
> base that people can use as examples to copy paste.
> The basic credentials provider services that comes with test.py is something
> that is useful to have I think - and we are working on make them a
> contract people
> can rely on. 
> We had a discussion at the PTG about how to deal with those, and the
> conclusion
> was that we are going to move credentials providers to tempest.lib and keep 
> test.py more or less as it is and declare it a stable interface for plugins.
> Alternatives like dropping class fixtures for good, and move everything
> to be test
> fixtures, involve too much code churn / refactor for an advantage which 
> is too little - and we wouldn't have the bandwidth to do that anyways.

So, as someone who is only an infrequence Tempest contributor now, I
personally have a pretty hard time with the magic credentials, because
it's super non obvious to me what a new test would give me off a blank
page, or how I would expose that.

More or less I had to just find Matt and ask him what to do, and then
have Jordan propose a different fix once he saw the patch. That's really
people intensive, and I think at least as big a scalability problem as
anything else.


That being said, there are only 46 scenario tests. They totally could be
rewritten in an ideal way as examples and deprecate / rot out the
existing scenario tests (including base classes).


Sean Dague

More information about the OpenStack-dev mailing list