Search in sources :

Example 1 with ColumnDataType

use of com.airbnb.spinaltap.mysql.mutation.schema.ColumnDataType in project SpinalTap by airbnb.

the class TableCacheTest method test.

@Test
public void test() throws Exception {
    TableCache tableCache = new TableCache(schemaReader);
    List<ColumnDataType> columnTypes = Arrays.asList(ColumnDataType.TINY, ColumnDataType.STRING, ColumnDataType.FLOAT, ColumnDataType.LONG);
    when(schemaReader.query(DATABASE_NAME, TABLE_NAME, binlogFilePos)).thenReturn(TABLE_SCHEMA);
    assertNull(tableCache.get(TABLE_ID));
    tableCache.addOrUpdate(TABLE_ID, TABLE_NAME, DATABASE_NAME, binlogFilePos, columnTypes);
    Table table = tableCache.get(TABLE_ID);
    assertEquals(TABLE, table);
    verify(schemaReader, times(1)).query(DATABASE_NAME, TABLE_NAME, binlogFilePos);
    tableCache.addOrUpdate(TABLE_ID, TABLE_NAME, DATABASE_NAME, binlogFilePos, columnTypes);
    table = tableCache.get(TABLE_ID);
    assertEquals(TABLE, table);
    verify(schemaReader, times(1)).query(DATABASE_NAME, TABLE_NAME, binlogFilePos);
    columnTypes = Arrays.asList(ColumnDataType.TINY, ColumnDataType.STRING, ColumnDataType.FLOAT);
    when(schemaReader.query(DATABASE_NAME, TABLE_NAME, binlogFilePos)).thenReturn(TABLE_SCHEMA_UPDATED);
    tableCache.addOrUpdate(TABLE_ID, TABLE_NAME, DATABASE_NAME, binlogFilePos, columnTypes);
    table = tableCache.get(TABLE_ID);
    assertEquals(TABLE_UPDATED, table);
    verify(schemaReader, times(2)).query(DATABASE_NAME, TABLE_NAME, binlogFilePos);
    tableCache.addOrUpdate(TABLE_ID, TABLE_NAME, DATABASE_NAME, binlogFilePos, columnTypes);
    table = tableCache.get(TABLE_ID);
    assertEquals(TABLE_UPDATED, table);
    verify(schemaReader, times(2)).query(DATABASE_NAME, TABLE_NAME, binlogFilePos);
    // Schema reader now returns schema with 5 columns, but columnTypes has size 4
    columnTypes = Arrays.asList(ColumnDataType.TINY, ColumnDataType.STRING, ColumnDataType.FLOAT, ColumnDataType.LONG);
    when(schemaReader.query(DATABASE_NAME, TABLE_NAME, binlogFilePos)).thenReturn(TABLE_SCHEMA_LARGE_STUB);
    tableCache.addOrUpdate(TABLE_ID, TABLE_NAME, DATABASE_NAME, binlogFilePos, columnTypes);
    table = tableCache.get(TABLE_ID);
    assertEquals(TABLE, table);
    verify(schemaReader, times(3)).query(DATABASE_NAME, TABLE_NAME, binlogFilePos);
}
Also used : Table(com.airbnb.spinaltap.mysql.mutation.schema.Table) ColumnDataType(com.airbnb.spinaltap.mysql.mutation.schema.ColumnDataType) Test(org.junit.Test)

Aggregations

ColumnDataType (com.airbnb.spinaltap.mysql.mutation.schema.ColumnDataType)1 Table (com.airbnb.spinaltap.mysql.mutation.schema.Table)1 Test (org.junit.Test)1