From 4fe873d5451b0e5ac3a7c5d145b2c6d8fa2b20cc Mon Sep 17 00:00:00 2001 From: Abhishek Raut Date: Sun, 16 Aug 2015 08:30:55 -0700 Subject: [PATCH] Add Model-migrations-sync test Add test which checks whether database models and alembic migration scripts are in sync. Change-Id: I64f2f468c7d6cf6ecb21172781b8126478003f28 Related-bug: #1470678 --- tox.ini | 7 +++ .../neutron/db/migration/models/__init__.py | 0 .../neutron/db/migration/models/head.py | 23 +++++++ .../neutron/tests/functional/__init__.py | 0 .../neutron/tests/functional/db/__init__.py | 0 .../tests/functional/db/test_migrations.py | 60 +++++++++++++++++++ .../neutron/tests/functional/requirements.txt | 9 +++ 7 files changed, 99 insertions(+) create mode 100644 vmware_nsx/neutron/db/migration/models/__init__.py create mode 100644 vmware_nsx/neutron/db/migration/models/head.py create mode 100644 vmware_nsx/neutron/tests/functional/__init__.py create mode 100644 vmware_nsx/neutron/tests/functional/db/__init__.py create mode 100644 vmware_nsx/neutron/tests/functional/db/test_migrations.py create mode 100644 vmware_nsx/neutron/tests/functional/requirements.txt diff --git a/tox.ini b/tox.ini index 12be0c7eee..6cb7e4a2e9 100644 --- a/tox.ini +++ b/tox.ini @@ -27,18 +27,25 @@ setenv = VIRTUAL_ENV={envdir} [testenv:functional] setenv = OS_TEST_TIMEOUT=90 +deps = + {[testenv]deps} + -r{toxinidir}/vmware_nsx/neutron/tests/functional/requirements.txt [testenv:dsvm-functional] setenv = OS_SUDO_TESTING=1 OS_FAIL_ON_MISSING_DEPS=1 OS_TEST_TIMEOUT=90 sitepackages=True +deps = + {[testenv:functional]deps} [tox:jenkins] sitepackages = True downloadcache = ~/cache/pip [testenv:pep8] +deps = + {[testenv]deps} commands = sh ./tools/check_bash.sh flake8 diff --git a/vmware_nsx/neutron/db/migration/models/__init__.py b/vmware_nsx/neutron/db/migration/models/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vmware_nsx/neutron/db/migration/models/head.py b/vmware_nsx/neutron/db/migration/models/head.py new file mode 100644 index 0000000000..c28e58138d --- /dev/null +++ b/vmware_nsx/neutron/db/migration/models/head.py @@ -0,0 +1,23 @@ +# Copyright 2015 VMware, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from neutron.db.migration.models import head + +from vmware_nsx.neutron.plugins.vmware.dbexts import nsx_models # noqa +from vmware_nsx.neutron.plugins.vmware.dbexts import nsxv_models # noqa +from vmware_nsx.neutron.plugins.vmware.dbexts import vcns_models # noqa + + +def get_metadata(): + return head.model_base.BASEV2.metadata diff --git a/vmware_nsx/neutron/tests/functional/__init__.py b/vmware_nsx/neutron/tests/functional/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vmware_nsx/neutron/tests/functional/db/__init__.py b/vmware_nsx/neutron/tests/functional/db/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vmware_nsx/neutron/tests/functional/db/test_migrations.py b/vmware_nsx/neutron/tests/functional/db/test_migrations.py new file mode 100644 index 0000000000..3cbde99dd6 --- /dev/null +++ b/vmware_nsx/neutron/tests/functional/db/test_migrations.py @@ -0,0 +1,60 @@ +# Copyright 2015 VMware, Inc. +# +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_config import cfg + +from neutron.db.migration.alembic_migrations import external +from neutron.db.migration import cli as migration +from neutron.tests.common import base +from neutron.tests.functional.db import test_migrations + +from vmware_nsx.neutron.db.migration import alembic_migrations +from vmware_nsx.neutron.db.models import head + +# EXTERNAL_TABLES should contain all names of tables that are not related to +# current repo. +EXTERNAL_TABLES = set(external.TABLES) - set(external.REPO_VMWARE_TABLES) + + +class _TestModelsMigrationsFoo(test_migrations._TestModelsMigrations): + + def db_sync(self, engine): + cfg.CONF.set_override('connection', engine.url, group='database') + for conf in migration.get_alembic_configs(): + self.alembic_config = conf + self.alembic_config.neutron_config = cfg.CONF + migration.do_alembic_command(conf, 'upgrade', 'heads') + + def get_metadata(self): + return head.get_metadata() + + def include_object(self, object_, name, type_, reflected, compare_to): + if type_ == 'table' and (name == 'alembic' or + name == alembic_migrations.VERSION_TABLE or + name in EXTERNAL_TABLES): + return False + else: + return True + + +class TestModelsMigrationsMysql(_TestModelsMigrationsFoo, + base.MySQLTestCase): + pass + + +class TestModelsMigrationsPsql(_TestModelsMigrationsFoo, + base.PostgreSQLTestCase): + pass diff --git a/vmware_nsx/neutron/tests/functional/requirements.txt b/vmware_nsx/neutron/tests/functional/requirements.txt new file mode 100644 index 0000000000..2f9131d0bf --- /dev/null +++ b/vmware_nsx/neutron/tests/functional/requirements.txt @@ -0,0 +1,9 @@ +# Additional requirements for functional tests + +# The order of packages is significant, because pip processes them in the order +# of appearance. Changing the order has an impact on the overall integration +# process, which may cause wedges in the gate later. + +psutil>=1.1.1,<2.0.0 +psycopg2 +PyMySQL>=0.6.2 # MIT License