[openstack-dev] [Keystone] SQLite support (migrations, work-arounds, and more), is it worth it?

Mike Bayer mbayer at redhat.com
Mon Apr 6 19:50:41 UTC 2015

On 4/6/15 2:52 PM, Morgan Fainberg wrote:
> On Apr 6, 2015, at 11:41, Mike Bayer <mbayer at redhat.com 
> <mailto:mbayer at redhat.com>> wrote:
>> On 4/6/15 12:49 PM, David Stanek wrote:
>>> Exactly. This is the direction I have been going. Functional tests 
>>> are written using the public APIs using the client.
>>> I would also add that I don't like that the Keystone unit tests are 
>>> so database heavy. I would not want MySQL or ant RDBMS to be a 
>>> requirement for running the tests.
>> is that because you'd prefer that the unit tests were more isolated, 
>> or just that an external service is being used?
>> I've done some work with extensive mocking of SQL databases; 
>> specifically mocking at the ORM level.  It is nice when you get it to 
>> run, but it's also a much bigger job to write fine-grained mocks like 
>> that, the mocks can be brittle in relation to the code they're 
>> targeting, and you also need to come up with some solution to 
>> actually functional test your database access code.
>> I tend to think that having a mysqld service running is the lesser of 
>> two evils and you get a lot more code coverage by going all the way 
>> out to the DB.
> What David is specifically referencing is that we want our functional 
> tests to only require direct API access. There is almost no reason to 
> need access to the DB backend. We have many ways to perform isolation 
> where needed (tempest does a lot of this today).
> The goal is to allow the functional test suite to run against any 
> keystone deployment (be agnostic to db, non-db, etc driver used). This 
> makes environment setup a separate concern the tests don't need to be 
> involved in/aware of. It makes our functional tests more useful for 
> validating a driver or configuration passes muster.

ah.  for sure.  I would think functional tests could run against a 
backend that was entirely mock / file-based.

> If there are legitimately cases we need to test a specific db function 
> in isolation we will make specific efforts to support it. Those are 
> apt to be the exception to the rule.
> --Morgan
> Sent via mobile
>>> On Mon, Apr 6, 2015, 12:42 Morgan Fainberg 
>>> <morgan.fainberg at gmail.com <mailto:morgan.fainberg at gmail.com>> wrote:
>>>     > On Apr 6, 2015, at 09:20, Mike Bayer <mbayer at redhat.com> wrote:
>>>     >
>>>     >
>>>     >
>>>     >> On 4/6/15 12:06 PM, Clint Byrum wrote:
>>>     >> Excerpts from Boris Bobrov's message of 2015-04-03 18:29:08
>>>     -0700:
>>>     >>>> On Saturday 04 April 2015 03:55:59 Morgan Fainberg wrote:
>>>     >>>> I am looking forward to the Liberty cycle and seeing the
>>>     special casing we
>>>     >>>> do for SQLite in our migrations (and elsewhere). My
>>>     inclination is that we
>>>     >>>> should (similar to the deprecation of eventlet) deprecate
>>>     support for
>>>     >>>> SQLite in Keystone. In Liberty we will have a full
>>>     functional test suite
>>>     >>>> that can (and will) be used to validate everything against
>>>     much more real
>>>     >>>> environments instead of in-process “eventlet-like”
>>>     test-keystone-services;
>>>     >>>> the “Restful test cases” will no longer be part of the
>>>     standard unit tests
>>>     >>>> (as they are functional testing). With this change I’m
>>>     inclined to say
>>>     >>>> SQLite (being the non-production usable DB) what it is we
>>>     should look at
>>>     >>>> dropping migration support for SQLite and the custom
>>>     work-arounds.
>>>     >>>>
>>>     >>>> Most deployers and developers (as far as I know) use
>>>     devstack and MySQL or
>>>     >>>> Postgres to really suss out DB interactions.
>>>     >>>>
>>>     >>>> I am looking for feedback from the community on the general
>>>     stance for
>>>     >>>> SQLite, and more specifically the benefit (if any) of
>>>     supporting it in
>>>     >>>> Keystone.
>>>     >>> +1. Drop it and clean up tons of code used for support of
>>>     sqlite only.
>>>     >>>
>>>     >>> Doing tests with mysql is as easy, as with sqlite
>>>     ("mysqladmin drop -f;
>>>     >>> mysqladmin create" for "reset"), and using it by default
>>>     will finally make
>>>     >>> people test their code on real rdbmses.
>>>     >> Please please please be careful with that and make sure the
>>>     database
>>>     >> name is _always_ random in tests... or even better, write a
>>>     fixture to
>>>     >> spin up a mysqld inside a private tempdir. That would be a
>>>     really cool
>>>     >> thing for oslo.db to provide actually.
>>>     >>
>>>     >> I'm just thinking some poor sap runs the test suite with the
>>>     wrong
>>>     >> .my.cnf in the wrong place and <poof> there went keystone's db.
>>>     > The standard approach here is that tests based on the oslo.db
>>>     approach by default connect using a username openstack_citest on
>>>     localhost, which is then used to create databases of random
>>>     names. If you base your database tests on oslo.db, you get that
>>>     right now.  This username/host/etc is also configurable through
>>>     environment variables.  I don't see how my.cnf is involved in
>>>     this nor how it would impact someone's keystone database, unless
>>>     we're talking about tests that happen to load down and/or crash
>>>     the whole database server.
>>>     >
>>>     > spinning up a whole mysqld seems really heavy-handed and
>>>     unnecessary.  Not to mention the tests run on other backends as
>>>     well such as Postgresql.
>>>     >
>>>     The reasons outlined by both Clint and Mike are why we won't be
>>>     attempting this until we are happy with our functional test
>>>     suite. But once we are happy dropping SQLite is on the table.
>>>     The way I see it the functional tests should be performed
>>>     against a real keystone server, even if it is one spun up for
>>>     testing specifically.
>>>     Per test db creation / other such stuff will be part of that
>>>     discussion.
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150406/1f27a9e8/attachment.html>

More information about the OpenStack-dev mailing list