def test_get_column_metadata(self): self.mox.StubOutWithMock(queuer.db, 'cursor') cur = self.mox.CreateMockAnything() queuer.db.cursor(None, dictionary=True).AndReturn(self.context(cur)) cur.execute(mox.IgnoreArg()) cur.fetchall().AndReturn([ {'Field': 'f1', 'Key': 'PRI', 'Type': 'int(6)'}, {'Field': 'F2', 'Key': 'IDX', 'Type': 'int(6)'}, {'Field': 'F3', 'Key': 'IDX', 'Type': 'timestamp'}, {'Field': 'Information', 'Key': '', 'Type': 'float(6)'}, ]) self.mox.StubOutWithMock(queuer.db, 'shard_connection') conn = self.mox.CreateMockAnything() queuer.db.shard_connection('dst', read=True).AndReturn(self.context(conn)) conn.get_table_primary_key_columns('ns', 'anomaly').AndReturn(['f1', 'f3']) self.mox.ReplayAll() self.config.migration_type = orm.MigrationType.DELTA worker = queuer.QueueChunksWorkerMysql(self.config, self.redis) worker.get_column_metadata(None) columns = [ db.Column( 'f1', db.ColumnType.INT, True, ignore=False, source_alias='' ), db.Column( 'F2', db.ColumnType.INT, False, ignore=False, source_alias='' ), db.Column( 'F3', db.ColumnType.TIMESTAMP, True, ignore=False, source_alias='' ), db.Column( 'Information', db.ColumnType.FLOAT, False, ignore=True, source_alias='' ), ] self.assertEqual(worker.c.columns, columns) self.assertEqual(worker.column_map, {col.lname: col for col in columns})
def test_get_column_metadata_delta_column_mismatch(self): self.mox.StubOutWithMock(queuer.db, 'cursor') cur = self.mox.CreateMockAnything() queuer.db.cursor(None, dictionary=True).AndReturn(self.context(cur)) cur.execute(mox.IgnoreArg()) cur.fetchall().AndReturn([ {'Field': 'f1', 'Key': 'PRI', 'Type': 'int(6)'}, {'Field': 'F2', 'Key': 'IDX', 'Type': 'int(6)'}, {'Field': 'F3', 'Key': 'IDX', 'Type': 'timestamp'}, {'Field': 'Information', 'Key': '', 'Type': 'float(6)'}, ]) self.mox.StubOutWithMock(queuer.db, 'shard_connection') conn = self.mox.CreateMockAnything() queuer.db.shard_connection('dst', read=True).AndReturn(self.context(conn)) conn.get_table_primary_key_columns('ns', 'anomaly').AndReturn(['f1', 'z', 'f3']) self.mox.ReplayAll() self.config.migration_type = orm.MigrationType.DELTA worker = queuer.QueueChunksWorkerMysql(self.config, self.redis) with self.assertRaises(queuer.UnrecoverableError): worker.get_column_metadata(None)