From de03a469877927bd91af0ce17658b0e41ab03706 Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Wed, 25 Nov 2015 15:31:40 +0000 Subject: [PATCH] Test database schema and indexes Ensure that tables and indexes have been created by the migrate scripts Minor changes Change-Id: I3c5025fc810677ac6f540b175bab7501268b2fa4 --- designate/storage/impl_sqlalchemy/tables.py | 10 ++--- .../tests/test_storage/test_sqlalchemy.py | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/designate/storage/impl_sqlalchemy/tables.py b/designate/storage/impl_sqlalchemy/tables.py index 21456eb78..cbdecace2 100644 --- a/designate/storage/impl_sqlalchemy/tables.py +++ b/designate/storage/impl_sqlalchemy/tables.py @@ -132,7 +132,7 @@ zone_attributes = Table('zone_attributes', metadata, UniqueConstraint('key', 'value', 'zone_id', name='unique_attributes'), ForeignKeyConstraint(['zone_id'], ['zones.id'], ondelete='CASCADE'), - mysql_engine='INNODB', + mysql_engine='InnoDB', mysql_charset='utf8' ) @@ -241,7 +241,7 @@ pools = Table('pools', metadata, UniqueConstraint('name', name='unique_pool_name'), - mysql_engine='INNODB', + mysql_engine='InnoDB', mysql_charset='utf8' ) @@ -257,7 +257,7 @@ pool_attributes = Table('pool_attributes', metadata, ForeignKeyConstraint(['pool_id'], ['pools.id'], ondelete='CASCADE'), - mysql_engine='INNODB', + mysql_engine='InnoDB', mysql_charset='utf8' ) @@ -273,7 +273,7 @@ pool_ns_records = Table('pool_ns_records', metadata, ForeignKeyConstraint(['pool_id'], ['pools.id'], ondelete='CASCADE'), - mysql_engine='INNODB', + mysql_engine='InnoDB', mysql_charset='utf8') zone_transfer_requests = Table('zone_transfer_requests', metadata, @@ -336,5 +336,5 @@ zone_tasks = Table('zone_tasks', metadata, default='ACTIVE'), Column('location', String(160), nullable=True), - mysql_engine='INNODB', + mysql_engine='InnoDB', mysql_charset='utf8') diff --git a/designate/tests/test_storage/test_sqlalchemy.py b/designate/tests/test_storage/test_sqlalchemy.py index 670bbb9db..840b97c93 100644 --- a/designate/tests/test_storage/test_sqlalchemy.py +++ b/designate/tests/test_storage/test_sqlalchemy.py @@ -36,3 +36,44 @@ class SqlalchemyStorageTest(StorageTestCase, TestCase): self.assertFalse(pong['status']) self.assertIsNotNone(pong['rtt']) + + def test_schema_table_names(self): + table_names = [ + u'blacklists', u'migrate_version', u'pool_attributes', + u'pool_ns_records', u'pools', u'quotas', u'records', u'recordsets', + u'tlds', u'tsigkeys', u'zone_attributes', u'zone_tasks', + u'zone_transfer_accepts', u'zone_transfer_requests', u'zones' + ] + self.assertEqual(table_names, self.storage.engine.table_names()) + + def test_schema_table_indexes(self): + indexes_t = self.storage.engine.execute("SELECT * FROM sqlite_master WHERE type = 'index';") + + indexes = {} # table name -> index names -> cmd + for _, index_name, table_name, num, cmd in indexes_t: + if index_name.startswith("sqlite_"): + continue # ignore sqlite-specific indexes + if table_name not in indexes: + indexes[table_name] = {} + indexes[table_name][index_name] = cmd + + expected = { + "records": { + "record_created_at": "CREATE INDEX record_created_at ON records (created_at)", + "records_tenant": "CREATE INDEX records_tenant ON records (tenant_id)", + "update_status_index": "CREATE INDEX update_status_index ON records (status, zone_id, tenant_id, created_at, serial)" + }, + "recordsets": { + "recordset_created_at": "CREATE INDEX recordset_created_at ON recordsets (created_at)", + "recordset_type_name": "CREATE INDEX recordset_type_name ON recordsets (type, name)", + "reverse_name_dom_id": "CREATE INDEX reverse_name_dom_id ON recordsets (reverse_name, zone_id)", + "rrset_type_domainid": "CREATE INDEX rrset_type_domainid ON recordsets (type, zone_id)" + }, + "zones": { + "reverse_name_deleted": "CREATE INDEX reverse_name_deleted ON zones (reverse_name, deleted)", + "zone_created_at": "CREATE INDEX zone_created_at ON zones (created_at)", + "zone_deleted": "CREATE INDEX zone_deleted ON zones (deleted)", + "zone_tenant_deleted": "CREATE INDEX zone_tenant_deleted ON zones (tenant_id, deleted)" + } + } # flake8: noqa + self.assertDictEqual(expected, indexes)