[openstack-dev] [Neutron][oslo.db] Inspecting sqlite db during unit tests
Mike Bayer
mbayer at redhat.com
Fri Jul 22 14:45:12 UTC 2016
On 07/22/2016 04:02 AM, Kevin Benton wrote:
> Now that we have switched to oslo.db for test provisioning the
> responsibility of choosing a location lands
> here: https://github.com/openstack/oslo.db/blob/a79479088029e4fa51def91cb36bc652356462b6/oslo_db/sqlalchemy/provision.py#L505
>
> The problem is that when you specify OS_TEST_DBAPI_ADMIN_CONNECTION it
> does end up creating the file, but then the logic above chooses a URL
> based on the random ident. So you can find an sqlite file in your tmp
> dir, it just won't be the one you asked for.
>
> It seems like a bug in the oslo.db logic, but the commit that added it
> was part of a much larger refactor so I'm not sure if it was intentional
> to ensure that no two tests used the same db.
There is also a very recent commit to Neutron at
https://review.openstack.org/#/c/332476/ , which I think changes the
system to actually use the provisioning for the SQLite database as well,
whereas before it might have been not taking effect. But in any case,
the OS_TEST_DBAPI_ADMIN_CONNECTION thing still works in that if you give
it a file-based URL, provisioning should be putting the database files
in /tmp. If your approach is "pdb.set_trace(); then look at the file",
just do this:
$ OS_TEST_DBAPI_ADMIN_CONNECTION=sqlite:///myfile.db
.tox/functional/bin/python -m unittest
neutron.tests.unit.db.test_db_base_plugin_v2.TestBasicGet.test_single_get_admin
>
/home/classic/dev/redhat/openstack/neutron/neutron/tests/unit/db/test_db_base_plugin_v2.py(790)test_single_get_admin()
-> plugin = neutron.db.db_base_plugin_v2.NeutronDbPluginV2()
(Pdb)
(Pdb) self.engine.url
sqlite:////tmp/hjbckefatl.db
then you can "sqlite3 /tmp/hjbckefatl.db" while the test is pending.
>
> On Thu, Jul 21, 2016 at 1:45 PM, Carl Baldwin <carl at ecbaldwin.net
> <mailto:carl at ecbaldwin.net>> wrote:
>
> Hi,
>
> In Neutron, we run unit tests with an in-memory sqlite instance. It
> is impossible, as far as I know, to inspect this database using the
> sqlite3 command line while the unit tests are running. So, we have
> to resort to python / sqlalchemy to do it. This is inconvenient.
>
> Months ago, I was able to get the unit tests to write the sqlite db
> to a file so that I could inspect it while I was sitting at a
> breakpoint in the code. That was very nice. Yesterday, I tried to
> repeat that while traveling and was unable to figure it out. I had
> to time box my effort to move on to other things.
>
> As far as I remember, the mechanism that I used was to adjust the
> neutron.conf for the tests [1]. I'm not totally sure about this
> because I didn't take sufficient notes, I think because it was
> pretty easy to figure it out at the time. This mechanism doesn't
> seem to have any effect these days. I changed it to
> 'sqlite:////tmp/unit-test.db' and never saw a file created there.
>
> I did a little bit of digging and I tried one more thing. That was
> to set OS_TEST_DBAPI_ADMIN_CONNECTION='sqlite:////tmp/unit-test.db'
> in the environment before running tests. I was encouraged because
> this caused a file to be created at that location but the file
> remained empty for the duration of the run.
>
> Does anyone know off the top of their head how to get unit tests in
> Neutron to use a file based sqlite db?
>
> Carl
>
> [1] https://github.com/openstack/neutron/blob/97c491294cf9eca0921336719d62d74ec4e1fa96/neutron/tests/etc/neutron.conf#L26
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe:
> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
> __________________________________________________________________________
> 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
>
More information about the OpenStack-dev
mailing list