On Thu, Jan 07, 2016 at 07:18:15PM -0500, Jay Pipes wrote: > On 01/07/2016 06:42 PM, Jim Rollenhagen wrote: > >On Thu, Jan 07, 2016 at 03:32:39PM -0500, Jay Pipes wrote: > >>On 01/07/2016 03:01 PM, Jim Rollenhagen wrote: > >>>On Thu, Jan 07, 2016 at 02:41:12PM -0500, Sean Dague wrote: > >>>>On 01/07/2016 02:09 PM, Jim Rollenhagen wrote: > >>>>>Hi all, > >>>>> > >>>>>A change to global-requirements[1] introduces mimic, which is an http > >>>>>server that can mock various APIs, including nova and ironic, including > >>>>>control of error codes and timeouts. The ironic team plans to use this > >>>>>for testing python-ironicclient without standing up a full ironic > >>>>>environment. > >>>>> > >>>>>Here's the catch - mimic is built on twisted. I know twisted was > >>>>>previously removed from OpenStack (or at least people said "pls no", I > >>>>>don't know the full history). We didn't intend to stealth-introduce > >>>>>twisted back into g-r, but it was pointed out to me that it may appear > >>>>>this way, so here I am letting everyone know. lifeless pointed out that > >>>>>when tests are failing, people may end up digging into mimic or twisted > >>>>>code, which most people in this community aren't familiar with AFAIK, > >>>>>which is a valid point though I hope it isn't required often. > >>>>> > >>>>>So, the primary question here is: do folks have a problem with adding > >>>>>twisted here? We're holding off on Ironic changes that depend on this > >>>>>until this discussion has happened, but aren't reverting the g-r change > >>>>>until we decide one way or another. > >>>>> > >>>>>// jim > >>>>> > >>>>>[1] https://review.openstack.org/#/c/220268/ > >>>> > >>>>What is the advantage of running another server like this over using > >>>>requests-mock (which is used by other OpenStack projects for testing > >>>>today)? The only difference here seems to be that you actually execute > >>>>requests code in one case and not in the other. > >>>> > >>>>Requests-mock debugging when things go wrong seems a bit simpler. > >>>> > >>>>This is less about twisted and more about trying to not introduce yet > >>>>another way to mock code in the tree that people need to understand. > >>>> > >>>> -Sean > >>> > >>>We'd be using this for functional tests, not unit, where we can't really > >>>inject mocks. The idea is that we could run a full functional suite > >>>against either mimic or a full ironic environment, just by changing a > >>>test setting. > >> > >>I don't really see the point of a separate project like Mimic that has a > >>whole bunch of reimplementations (mocked out) of all sorts of OpenStack (and > >>RAX-specific) API services. It's just a great way to introduce a larger > >>surface area for bugs to creep in -- since you have to keep the Mimic > >>interfaces up to date with the real interfaces. Better to keep something > >>like this -- if it is TRULY needed -- in-tree with the API service itself, > >>so that the chances of divergence are reduced. This is similar to the > >>fakevirt driver in Nova. It's in tree for good reason: when someone changes > >>the virt driver interface, the fakevirt driver goes boom and needs to be > >>changed in a corresponding fashion in the same patch. > > > >I tend to think our REST APIs are much more stable than internal python > >APIs, and so we can manage the divergence much easier. > > > >Also, mimic can simulate: > > > >* old versions (less needed with all the microversion stuff) > >* old bugs that were shipped > >* misconfigurations > >* networking errors > >* the passage of time (including timeouts) > > > >We probably don't want to keep a catalog of old bugs and misconfigurations in > >tree forever. > > > >>What value does a functional test against an HTTP API service that does > >>nothing (other than introduce greater surface area for bugs) actually offer > >>over unit tests anyway? > > > >Testing the full stack of the client instead of mocking the bottom > >half of requests is a big one. > > > >Lekha and Glyph gave a talk on Mimic in Paris; it may be enlightening. > >https://www.youtube.com/watch?v=HKUUQme3dwA > > OK, I just watched that. Sorry, still don't see the value that Mimic > provides over unit testing the client interfaces and mocking out the HTTP > payloads so you have strict control over the expectations. > > The problem that Glyph noted in the video about the unit test that mocked > out os.chdir to improperly return a value isn't solved whatsoever by Mimic, > so I find it odd that that example was used in discussing the value of > Mimic. Bad mocks are just that: bad mocks. The same false positive failure > could easily be introduced with a typo in the "metadata injection" that > Mimic does to inject failures into the system. > > Mimic isn't testing anything on the server side at all so I'm not sure why > folks call it "integration testing". It isn't testing the integration of > anything at all. All it enables is multi-language client library testing, > and see my response to Ben, the surface area it introduces for bugs in the > test platform itself in my opinion outweigh the multi-language value it > might have.
FWIW, I've only been calling it functional testing. I also don't care about the multi-language parts here. The sole purpose we have for mimic (so far) is to functionally test python-ironicclient without mocking the world in ironicclient. > Final question on this... if Mimic is *only* for testing clients, why not > make it just a dependency for python-ironicclient and not ironic itself? We haven't made it a dep for anything yet, only added to g-r. However, now that you mention that, a really ambitious goal would be to add a rabbit interface to mimic, and functionally test the API server (that it sends the right messages, etc). Another would be to mimic (Neutron, Glance) and test Ironic by itself. Last, I frankly don't understand why there's such heavy opposition to the ironic team using an additional tool for testing. Clearly we see some value in using mimic; I'd love to make progress on exploring that and seeing if it brings the value we think it will, rather than talking about why others think it's useless. The g-r change is already merged; lifeless asked me to start this thread because twisted is a touchy subject. I didn't start this thread to get buyoff from the entire community on using a new test tool in a single project. We have code review for a reason. This review went up on September 3. It was frozen for Liberty final. In October it was blocked on Python 3 compatibility. The mimic team worked to make it Python 3 compatible (including some of the dependencies), and released a compatible version in December. People were plugging this patch in IRC on and off because they want to go ahead and actually use the library. There was *more* than sufficient time for "I don't think this is useful" to be posted on the review. If anyone has a hard technical reason why mimic should not be used to test an OpenStack project, I'm happy to listen. Otherwise I'd like to work on actually getting things done. // jim __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev