package xxl.core.indexStructures.indexBuilder; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.rmi.NoSuchObjectException; import java.sql.SQLException; import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import xxl.core.indexStructures.BPlusIndexedSet; import xxl.core.indexStructures.Entry; import xxl.core.indexStructures.builder.Builders; import xxl.core.indexStructures.builder.IndexConfiguration.Location; import xxl.core.indexStructures.builder.BPlusTree.BPlusConfiguration; import xxl.core.indexStructures.builder.BPlusTree.BPlusConfiguration.Creator; import xxl.core.indexStructures.builder.BPlusTree.BPlusConfiguration.Loader; import xxl.core.indexStructures.builder.BPlusTree.ManagedType; import xxl.core.io.converters.meta.ExtendedResultSetMetaData; import xxl.core.relational.metaData.ExtendedColumnMetaData; import xxl.core.relational.schema.Schemas; import xxl.core.util.FileUtils; /** * Tests if default settings will be correctly restored * * @author Marcus Pinnecke (pinnecke@mathematik.uni-marburg.de) * */ public class IndexedSetSaveReloadRelationalTest { private static final String PATH_TO_STORE_DATA = System .getProperty("java.io.tmpdir") + "temp/tests/IndexedSetSaveReloadPrimitivesTest/" + System.currentTimeMillis() + "/"; boolean isNewDirectory = false; final int MAX_ITEMS_TO_INSERT = 100_000; final String MY_TABLE_NAME = "TableTest"; BPlusIndexedSet mySet; int oldBlockSize; String oldContentType; Location oldLocation; ManagedType oldManagedType; String oldTableName; BPlusConfiguration restoredConfiguration; Loader restoredCreator; @Test public void checkColumnMetaContentLength() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getContentLength(i), oldMeta.getContentLength(i)); } @Test public void checkColumnMetaDataCatalogName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getCatalogName(i), oldMeta.getCatalogName(i)); } @Test public void checkColumnMetaDataColumnClassName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnClassName(i), oldMeta.getColumnClassName(i)); } @Test public void checkColumnMetaDataColumnCount() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); Assert .assertEquals(restoredMeta.getColumnCount(), oldMeta.getColumnCount()); } @Test public void checkColumnMetaDataColumnDisplaySize() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnDisplaySize(i), oldMeta.getColumnDisplaySize(i)); } @Test public void checkColumnMetaDataColumnLabel() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnLabel(i), oldMeta.getColumnLabel(i)); } // ----- @Test public void checkColumnMetaDataColumnName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnName(i), oldMeta.getColumnName(i)); } @Test public void checkColumnMetaDataColumnType() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnType(i), oldMeta.getColumnType(i)); } @Test public void checkColumnMetaDataColumnTypeName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getColumnTypeName(i), oldMeta.getColumnTypeName(i)); } @Test public void checkColumnMetaDataPrecision() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert .assertEquals(restoredMeta.getPrecision(i), oldMeta.getPrecision(i)); } @Test public void checkColumnMetaDataScale() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getScale(i), oldMeta.getScale(i)); } @Test public void checkColumnMetaDataSchemaName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert.assertEquals(restoredMeta.getSchemaName(i), oldMeta.getSchemaName(i)); } @Test public void checkColumnMetaDataSingleColumnAutoIncrement() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isAutoIncrement(), oldColumnData.isAutoIncrement()); } } @Test public void checkColumnMetaDataSingleColumnCaseSensitive() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isCaseSensitive(), oldColumnData.isCaseSensitive()); } } // ++++++++ @Test public void checkColumnMetaDataSingleColumnColumnClassName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnClassName(), oldColumnData.getColumnClassName()); } } @Test public void checkColumnMetaDataSingleColumnColumnData() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getScale(), oldColumnData.getScale()); } } @Test public void checkColumnMetaDataSingleColumnColumnDisplaySize() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnDisplaySize(), oldColumnData.getColumnDisplaySize()); } } @Test public void checkColumnMetaDataSingleColumnColumnLabel() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnLabel(), oldColumnData.getColumnLabel()); } } @Test public void checkColumnMetaDataSingleColumnColumnName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnName(), oldColumnData.getColumnName()); } } @Test public void checkColumnMetaDataSingleColumnColumnType() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnType(), oldColumnData.getColumnType()); } } @Test public void checkColumnMetaDataSingleColumnColumnTypeName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getColumnTypeName(), oldColumnData.getColumnTypeName()); } } @Test public void checkColumnMetaDataSingleColumnCurrency() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isCurrency(), oldColumnData.isCurrency()); } } @Test public void checkColumnMetaDataSingleColumnDefinitelyWritable() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isDefinitelyWritable(), oldColumnData.isDefinitelyWritable()); } } @Test public void checkColumnMetaDataSingleColumnMaxLength() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getMaxContainingStringLength(), oldColumnData.getMaxContainingStringLength()); } } @Test public void checkColumnMetaDataSingleColumnNullable() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isNullable(), oldColumnData.isNullable()); } } @Test public void checkColumnMetaDataSingleColumnPrecision() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getPrecision(), oldColumnData.getPrecision()); } } @Test public void checkColumnMetaDataSingleColumnReadOnly() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isReadOnly(), oldColumnData.isReadOnly()); } } @Test public void checkColumnMetaDataSingleColumnSchemaName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getSchemaName(), oldColumnData.getSchemaName()); } } @Test public void checkColumnMetaDataSingleColumnSearchable() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isSearchable(), oldColumnData.isSearchable()); } } @Test public void checkColumnMetaDataSingleColumnSigned() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isSigned(), oldColumnData.isSigned()); } } @Test(expectedExceptions = UnsupportedOperationException.class) public void checkColumnMetaDataSingleColumnTableName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.getTableName(), oldColumnData.getTableName()); } } @Test public void checkColumnMetaDataSingleColumnWritable() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) { ExtendedColumnMetaData restoredColumnData = restoredMeta.getColumnMetaData(i); ExtendedColumnMetaData oldColumnData = oldMeta.getColumnMetaData(i); Assert.assertEquals(restoredColumnData.isWritable(), oldColumnData.isWritable()); } } @Test public void checkColumnMetaDataTableName() throws SQLException { ExtendedResultSetMetaData restoredMeta = restoredConfiguration.getManagedType().getMetaData(); ExtendedResultSetMetaData oldMeta = oldManagedType.getMetaData(); for (int i = 1; i <= restoredMeta.getColumnCount(); i++) Assert .assertEquals(restoredMeta.getTableName(i), oldMeta.getTableName(i)); } @Test public void checkContentType() { Assert.assertEquals(oldContentType, restoredConfiguration.getManagedType() .getContentType()); } @Test public void checkKeyIndices() { Assert.assertEquals(oldManagedType.getCompoundKeyIndices(), oldManagedType.getCompoundKeyIndices()); } @Test public void checkLocation() { Assert.assertEquals(oldLocation, restoredConfiguration.getLocation()); } @Test public void checkManagedType() { Assert.assertEquals(oldManagedType.getContentType(), restoredConfiguration .getManagedType().getContentType()); Assert.assertEquals(oldManagedType.getTableName(), restoredConfiguration .getManagedType().getTableName()); Assert.assertEquals(oldManagedType.getContentClass(), restoredConfiguration .getManagedType().getContentClass()); } @Test public void checkReloadedBlockSize() { Assert.assertEquals(oldBlockSize, restoredConfiguration.getBlockSize()); } @Test public void checkTableName() { Assert.assertEquals(oldTableName, restoredConfiguration.getManagedType() .getTableName()); } @BeforeTest public void createIndexedSetAndSave() throws IOException, SQLException { if (!(new File(PATH_TO_STORE_DATA).exists())) { isNewDirectory = true; System.out.print("Make dir: \t" + PATH_TO_STORE_DATA); if (new File(PATH_TO_STORE_DATA).mkdirs()) System.out.println("\t[OK]"); else { System.out.println("\t[FAILED]"); throw new IOException(); } } Creator creator = Builders.createBPlusTree.Tuples(Schemas.createSchema(MY_TABLE_NAME) .addInteger("INT_KEY1_COLUMN").addInteger("INT_KEY2_COLUMN") .addVarChar("STR_COLUMN", 10)); // creator.setBlockSize(2048); creator.storeAt(PATH_TO_STORE_DATA); oldBlockSize = creator.getBlockSize(); oldContentType = creator.getContentType(); oldLocation = creator.getLocation(); oldManagedType = creator.getManagedType(); oldTableName = creator.getTableName(); mySet = creator.getBuilder().create(); for (int i = 0; i < MAX_ITEMS_TO_INSERT; i++) mySet.add(new Entry(i, i * i, "Value_" + i % 10)); mySet.save(); } @Test public void recreateIndexedSet() { mySet = restoredCreator.getBuilder().create(); } @BeforeMethod public void reloadMetaData() throws NoSuchObjectException, FileNotFoundException { restoredCreator = Builders.loadBPlusTree.from(PATH_TO_STORE_DATA, MY_TABLE_NAME); restoredConfiguration = (BPlusConfiguration) restoredCreator.getBuilder() .getIndexConfiguration(); } @AfterTest public void removeTempData() throws FileNotFoundException { if (isNewDirectory) { System.out.print("Remove dir: \t" + PATH_TO_STORE_DATA); if (FileUtils.removeFile(new File(PATH_TO_STORE_DATA))) System.out.println("\t[OK]"); else System.out.println("\t[FAILED]"); } } public String toString() { return "IndexedSet save and reload (relational)"; } }