http://git-wip-us.apache.org/repos/asf/hive/blob/7c22d74c/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerWithOldConf.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerWithOldConf.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerWithOldConf.java index a9d9e78..508b2c6 100644 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerWithOldConf.java +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestMetaStoreEventListenerWithOldConf.java @@ -18,69 +18,19 @@ package org.apache.hadoop.hive.metastore; -import com.google.common.collect.Lists; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.metastore.annotation.MetastoreUnitTest; -import org.apache.hadoop.hive.metastore.api.Database; -import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Index; -import org.apache.hadoop.hive.metastore.api.Partition; -import org.apache.hadoop.hive.metastore.api.PartitionEventType; -import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.hadoop.hive.metastore.client.builder.DatabaseBuilder; -import org.apache.hadoop.hive.metastore.client.builder.IndexBuilder; -import org.apache.hadoop.hive.metastore.client.builder.PartitionBuilder; -import org.apache.hadoop.hive.metastore.client.builder.TableBuilder; import org.apache.hadoop.hive.metastore.conf.MetastoreConf; import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars; -import org.apache.hadoop.hive.metastore.events.AddIndexEvent; -import org.apache.hadoop.hive.metastore.events.AddPartitionEvent; -import org.apache.hadoop.hive.metastore.events.AlterIndexEvent; -import org.apache.hadoop.hive.metastore.events.AlterPartitionEvent; -import org.apache.hadoop.hive.metastore.events.AlterTableEvent; import org.apache.hadoop.hive.metastore.events.ConfigChangeEvent; -import org.apache.hadoop.hive.metastore.events.CreateDatabaseEvent; -import org.apache.hadoop.hive.metastore.events.CreateTableEvent; -import org.apache.hadoop.hive.metastore.events.DropDatabaseEvent; -import org.apache.hadoop.hive.metastore.events.DropIndexEvent; -import org.apache.hadoop.hive.metastore.events.DropPartitionEvent; -import org.apache.hadoop.hive.metastore.events.DropTableEvent; -import org.apache.hadoop.hive.metastore.events.ListenerEvent; -import org.apache.hadoop.hive.metastore.events.LoadPartitionDoneEvent; -import org.apache.hadoop.hive.metastore.events.PreAddIndexEvent; -import org.apache.hadoop.hive.metastore.events.PreAddPartitionEvent; -import org.apache.hadoop.hive.metastore.events.PreAlterIndexEvent; -import org.apache.hadoop.hive.metastore.events.PreAlterPartitionEvent; -import org.apache.hadoop.hive.metastore.events.PreAlterTableEvent; -import org.apache.hadoop.hive.metastore.events.PreCreateDatabaseEvent; -import org.apache.hadoop.hive.metastore.events.PreCreateTableEvent; -import org.apache.hadoop.hive.metastore.events.PreDropDatabaseEvent; -import org.apache.hadoop.hive.metastore.events.PreDropIndexEvent; -import org.apache.hadoop.hive.metastore.events.PreDropPartitionEvent; -import org.apache.hadoop.hive.metastore.events.PreDropTableEvent; -import org.apache.hadoop.hive.metastore.events.PreEventContext; -import org.apache.hadoop.hive.metastore.events.PreLoadPartitionDoneEvent; import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - /** * Mostly same tests as TestMetaStoreEventListener, but using old hive conf values instead of new * metastore conf values.
http://git-wip-us.apache.org/repos/asf/hive/blob/7c22d74c/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java index f9bd495..b7f7be92 100644 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java @@ -29,7 +29,6 @@ import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.FileMetadataExprType; import org.apache.hadoop.hive.metastore.api.Function; -import org.apache.hadoop.hive.metastore.api.Index; import org.apache.hadoop.hive.metastore.api.InvalidInputException; import org.apache.hadoop.hive.metastore.api.InvalidObjectException; import org.apache.hadoop.hive.metastore.api.MetaException; @@ -398,12 +397,6 @@ public class TestObjectStore { for (String db : dbs) { List<String> tbls = store.getAllTables(db); for (String tbl : tbls) { - List<Index> indexes = store.getIndexes(db, tbl, 100); - for (Index index : indexes) { - store.dropIndex(db, tbl, index.getIndexName()); - } - } - for (String tbl : tbls) { Deadline.startTimer("getPartition"); List<Partition> parts = store.getPartitions(db, tbl, 100); for (Partition part : parts) { http://git-wip-us.apache.org/repos/asf/hive/blob/7c22d74c/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestAddAlterDropIndexes.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestAddAlterDropIndexes.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestAddAlterDropIndexes.java deleted file mode 100644 index 2b8f297..0000000 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestAddAlterDropIndexes.java +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -package org.apache.hadoop.hive.metastore.client; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hive.metastore.IMetaStoreClient; -import org.apache.hadoop.hive.metastore.TableType; -import org.apache.hadoop.hive.metastore.annotation.MetastoreCheckinTest; -import org.apache.hadoop.hive.metastore.api.AlreadyExistsException; -import org.apache.hadoop.hive.metastore.api.Database; -import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Index; -import org.apache.hadoop.hive.metastore.api.InvalidObjectException; -import org.apache.hadoop.hive.metastore.api.InvalidOperationException; -import org.apache.hadoop.hive.metastore.api.MetaException; -import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; -import org.apache.hadoop.hive.metastore.api.StorageDescriptor; -import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.hadoop.hive.metastore.api.UnknownTableException; -import org.apache.hadoop.hive.metastore.client.builder.DatabaseBuilder; -import org.apache.hadoop.hive.metastore.client.builder.IndexBuilder; -import org.apache.hadoop.hive.metastore.client.builder.TableBuilder; -import org.apache.hadoop.hive.metastore.minihms.AbstractMetaStoreService; -import org.apache.thrift.TException; -import org.apache.thrift.transport.TTransportException; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -/** - * Tests for creating, altering and dropping indexes. - */ -@RunWith(Parameterized.class) -@Category(MetastoreCheckinTest.class) -public class TestAddAlterDropIndexes extends MetaStoreClientTest { - private AbstractMetaStoreService metaStore; - private IMetaStoreClient client; - - private static final String DB_NAME = "testindexdb"; - private static final String TABLE_NAME = "testindextable"; - private static final String INDEX_NAME = "testcreateindex"; - private static final String INDEX_TABLE_NAME = TABLE_NAME + "__" + INDEX_NAME + "__"; - private static final short MAX = -1; - - public TestAddAlterDropIndexes(String name, AbstractMetaStoreService metaStore) { - this.metaStore = metaStore; - } - - @Before - public void setUp() throws Exception { - // Get new client - client = metaStore.getClient(); - - // Clean up the database - client.dropDatabase(DB_NAME, true, true, true); - metaStore.cleanWarehouseDirs(); - createDB(DB_NAME); - } - - @After - public void tearDown() throws Exception { - try { - if (client != null) { - client.close(); - } - } finally { - client = null; - } - } - - @Test - public void testCreateGetAndDropIndex() throws Exception { - - String indexHandlerName = "TestIndexHandlerClass"; - String inputFormatName = "TestInputFormat"; - String outputFormatName = "TestOutputFormat"; - String indexParamKey = "indexParamKey"; - String indexParamValue = "indexParamValue"; - String sdParamKey = "indexSdParamKey"; - String sdParamValue = "indexSdParamValue"; - int createTime = (int) (System.currentTimeMillis() / 1000); - Map<String, String> params = new HashMap<String, String>(); - params.put(indexParamKey, indexParamValue); - - createTable(DB_NAME, TABLE_NAME); - - Index index = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(INDEX_TABLE_NAME) - .setCreateTime(createTime) - .setLastAccessTime(createTime) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .setDeferredRebuild(false) - .setIndexParams(params) - .setHandlerClass(indexHandlerName) - .setInputFormat(inputFormatName) - .setOutputFormat(outputFormatName) - .setSerdeName(INDEX_TABLE_NAME) - .addStorageDescriptorParam(sdParamKey, sdParamValue) - .build(); - client.createIndex(index, buildIndexTable(DB_NAME, INDEX_TABLE_NAME)); - - Index resultIndex = client.getIndex(DB_NAME, TABLE_NAME, INDEX_NAME); - Assert.assertNotNull(resultIndex); - Assert.assertEquals(DB_NAME, resultIndex.getDbName()); - Assert.assertEquals(TABLE_NAME, resultIndex.getOrigTableName()); - Assert.assertEquals(INDEX_NAME, resultIndex.getIndexName()); - Assert.assertEquals(INDEX_TABLE_NAME, resultIndex.getIndexTableName()); - Assert.assertEquals(createTime, resultIndex.getLastAccessTime()); - Assert.assertNotNull(resultIndex.getParameters()); - Assert.assertEquals(indexParamValue, resultIndex.getParameters().get(indexParamKey)); - Assert.assertEquals(indexHandlerName, resultIndex.getIndexHandlerClass()); - StorageDescriptor sd = resultIndex.getSd(); - Assert.assertNotNull(sd); - Map<String, FieldSchema> cols = new HashMap<>(); - for (FieldSchema col : sd.getCols()) { - cols.put(col.getName(), col); - } - Assert.assertEquals(2, cols.size()); - Assert.assertNotNull(cols.get("id")); - Assert.assertNotNull(cols.get("value")); - Assert.assertEquals("int", cols.get("id").getType()); - Assert.assertEquals("string", cols.get("value").getType()); - Assert.assertEquals(inputFormatName, sd.getInputFormat()); - Assert.assertEquals(outputFormatName, sd.getOutputFormat()); - Assert.assertEquals(INDEX_TABLE_NAME, sd.getSerdeInfo().getName()); - Assert.assertNotNull(sd.getParameters()); - Assert.assertEquals(sdParamValue, sd.getParameters().get(sdParamKey)); - - Table indexTable = client.getTable(DB_NAME, INDEX_TABLE_NAME); - Assert.assertNotNull(indexTable); - Assert.assertTrue(metaStore.isPathExists(new Path(indexTable.getSd().getLocation()))); - - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - List<String> indexNames = client.listIndexNames(DB_NAME, TABLE_NAME, MAX); - Assert.assertNotNull(indexNames); - Assert.assertEquals(0, indexNames.size()); - List<String> tableNames = client.listTableNamesByFilter(DB_NAME, "", MAX); - Assert.assertNotNull(tableNames); - Assert.assertFalse(tableNames.contains(INDEX_TABLE_NAME)); - Assert.assertFalse(metaStore.isPathExists(new Path(indexTable.getSd().getLocation()))); - } - - // Create index tests - - @Test - public void testCreateIndexesSameNameDifferentOrigAndIndexTables() throws Exception { - - String origTableName1 = TABLE_NAME + "1"; - String origTableName2 = TABLE_NAME + "2"; - String indexNameTableName1 = origTableName1 + "__" + INDEX_NAME; - String indexNameTableName2 = origTableName2 + "__" + INDEX_NAME; - Table origTable1 = createTable(DB_NAME, origTableName1); - Table origTable2 = createTable(DB_NAME, origTableName2); - - createIndex(DB_NAME, origTable1, INDEX_NAME, buildIndexTable(DB_NAME, indexNameTableName1)); - createIndex(DB_NAME, origTable2, INDEX_NAME, buildIndexTable(DB_NAME, indexNameTableName2)); - - verifyIndex(DB_NAME, origTableName1, INDEX_NAME, indexNameTableName1); - verifyIndex(DB_NAME, origTableName2, INDEX_NAME, indexNameTableName2); - - client.dropIndex(DB_NAME, origTableName1, INDEX_NAME, true); - client.dropIndex(DB_NAME, origTableName2, INDEX_NAME, true); - } - - @Test - public void testCreateIndexStrangeCharsInName() throws Exception { - - // TODO: Special character should not be allowed in index name. - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - String indexName = "§±!;@#$%^&*()_+}{|-=[]\':|?><"; - createIndex(DB_NAME, origTable, indexName, indexTable); - verifyIndex(DB_NAME, TABLE_NAME, indexName, INDEX_TABLE_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, indexName, true); - } - - @Test - public void testCreateIndexWithUpperCaseName() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - String indexName = "UPPERCASE_INDEX_NAME"; - String indexTableName = "UPPERCASE_INDEX_TABLE_NAME"; - Table indexTable = buildIndexTable(DB_NAME, indexTableName); - createIndex(DB_NAME, origTable, indexName, indexTable); - verifyIndex(DB_NAME, TABLE_NAME, indexName.toLowerCase(), indexTableName.toLowerCase()); - client.dropIndex(DB_NAME, TABLE_NAME, indexName, true); - } - - @Test(expected = AlreadyExistsException.class) - public void testCreateIndexesWithSameOrigAndIndexTable() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - createIndex(DB_NAME, origTable, INDEX_NAME, indexTable); - createIndex(DB_NAME, origTable, INDEX_NAME, indexTable); - checkIfIndexExists(DB_NAME, TABLE_NAME, INDEX_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = AlreadyExistsException.class) - public void testCreateIndexesWithSameNameAndOrigTableDifferentIndexTable() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - String indexTableName1 = origTable.getTableName() + "__" + INDEX_NAME + "_1"; - String indexTableName2 = origTable.getTableName() + "__" + INDEX_NAME + "_2"; - createIndex(DB_NAME, origTable, INDEX_NAME, buildIndexTable(DB_NAME, indexTableName1)); - createIndex(DB_NAME, origTable, INDEX_NAME, buildIndexTable(DB_NAME, indexTableName2)); - checkIfIndexExists(DB_NAME, TABLE_NAME, INDEX_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexWithExistingIndexTable() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = createTable(DB_NAME, INDEX_TABLE_NAME); - createIndex(DB_NAME, origTable, INDEX_NAME, indexTable); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - } - - @Test(expected = MetaException.class) - public void testCreateIndexNullIndexTableName() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, null); - createIndex(DB_NAME, origTable, INDEX_NAME, indexTable); - checkIfIndexExists(DB_NAME, TABLE_NAME, INDEX_NAME); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexEmptyIndexTableName() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, ""); - createIndex(DB_NAME, origTable, INDEX_NAME, indexTable); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexesWithSameIndexTable() throws Exception { - - String origTableName1 = "testindextable1"; - String origTableName2 = "testindextable2"; - String indexName1 = "testindex1"; - String indexName2 = "testindex2"; - String indexTableName = origTableName1 + "__" + indexName1; - Table origTable1 = createTable(DB_NAME, origTableName1); - Table origTable2 = createTable(DB_NAME, origTableName2); - Table indexTable = buildIndexTable(DB_NAME, indexTableName); - - createIndex(DB_NAME, origTable1, indexName1, indexTable); - createIndex(DB_NAME, origTable2, indexName2, indexTable); - - checkIfIndexExists(DB_NAME, origTableName1, indexName1); - checkIfIndexListEmpty(DB_NAME, origTableName2); - client.dropIndex(DB_NAME, origTableName1, indexName1, true); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexWithNonExistingDB() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - createIndex("nonexistingdb", origTable, INDEX_NAME, indexTable); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - } - - @Test(expected = MetaException.class) - public void testCreateIndexWithNullDBName() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - createIndex(null, origTable, INDEX_NAME, indexTable); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexNonExistingOrigTable() throws Exception { - - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setOrigTableName("nonexistingtable"); - client.createIndex(index, indexTable); - } - - @Test(expected = MetaException.class) - public void testCreateIndexNullOrigTable() throws Exception { - - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setOrigTableName(null); - client.createIndex(index, indexTable); - } - - @Test - public void testCreateIndexNullIndex() throws Exception { - // TODO: NPE should not be thrown. - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - try { - client.createIndex(null, indexTable); - Assert.fail("TTransportException or NullPointerException should have happened"); - } catch (TTransportException | NullPointerException e) { - // Expected exception - } - } - - @Test - public void testCreateIndexNullIndexTable() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(null) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .setDeferredRebuild(false) - .build(); - client.createIndex(index, null); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexWithEmptyOrigTable() throws Exception { - - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setOrigTableName(""); - client.createIndex(index, indexTable); - } - - @Test(expected = InvalidObjectException.class) - public void testCreateIndexWithEmptyDBName() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setDbName(""); - client.createIndex(index, buildIndexTable(DB_NAME, INDEX_TABLE_NAME)); - } - - @Test(expected = MetaException.class) - public void testCreateIndexNullIndexName() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setIndexTableName(null); - client.createIndex(index, buildIndexTable(DB_NAME, INDEX_TABLE_NAME)); - } - - @Test - public void testCreateIndexEmptyIndexName() throws Exception { - - Table origTable = createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - createIndex(DB_NAME, origTable, "", indexTable); - checkIfIndexExists(DB_NAME, TABLE_NAME, ""); - client.dropIndex(DB_NAME, TABLE_NAME, "", true); - } - - @Test - public void testCreateIndexWithDifferentIndexTableName() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setIndexTableName("differentindextablename"); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - client.createIndex(index, indexTable); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - List<String> tableNames = client.listTableNamesByFilter(DB_NAME, "", MAX); - Assert.assertNotNull(tableNames); - Assert.assertEquals(1, tableNames.size()); - Assert.assertEquals(TABLE_NAME, tableNames.get(0)); - Assert.assertTrue(metaStore.isPathExists(new Path(indexTable.getSd().getLocation()))); - } - - @Test - public void testCreateIndexWithDifferentDBInIndexTableAndIndex() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - String dbName = "second_index_db"; - createDB(dbName); - Index index = buildIndexWithDefaultValues(); - Table indexTable = buildIndexTable(dbName, INDEX_TABLE_NAME); - Assert.assertFalse(metaStore.isPathExists(new Path(indexTable.getSd().getLocation()))); - client.createIndex(index, indexTable); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - checkIfIndexListEmpty(dbName, TABLE_NAME); - List<String> tableNames = client.listTableNamesByFilter(DB_NAME, "", MAX); - Assert.assertFalse(tableNames.contains(INDEX_TABLE_NAME)); - tableNames = client.listTableNamesByFilter(dbName, "", MAX); - Assert.assertFalse(tableNames.contains(INDEX_TABLE_NAME)); - Assert.assertTrue(metaStore.isPathExists(new Path(indexTable.getSd().getLocation()))); - client.dropDatabase(dbName); - } - - @Test - public void testCreateIndexDifferentColsInIndexAndIndexTable() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Table indexTable = buildIndexTable(DB_NAME, INDEX_TABLE_NAME); - Index index = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(INDEX_TABLE_NAME) - .addCol("test_name", "string", "test col name") - .setDeferredRebuild(false) - .build(); - client.createIndex(index, indexTable); - - Index resultIndex = client.getIndex(DB_NAME, TABLE_NAME, INDEX_NAME); - Assert.assertNotNull(resultIndex); - Assert.assertEquals(INDEX_NAME, resultIndex.getIndexName()); - Assert.assertEquals(TABLE_NAME, resultIndex.getOrigTableName()); - Assert.assertEquals(INDEX_TABLE_NAME, resultIndex.getIndexTableName()); - List<FieldSchema> colsInIndex = resultIndex.getSd().getCols(); - Assert.assertEquals(1, colsInIndex.size()); - Assert.assertEquals("test_name", colsInIndex.get(0).getName()); - - Table indexTableResult = client.getTable(DB_NAME, INDEX_TABLE_NAME); - Assert.assertNotNull(indexTableResult); - List<FieldSchema> colsInIndexTable = indexTableResult.getSd().getCols(); - Assert.assertNotNull(colsInIndexTable); - Assert.assertEquals(2, colsInIndexTable.size()); - Assert.assertEquals("id", colsInIndexTable.get(0).getName()); - Assert.assertEquals("value", colsInIndexTable.get(1).getName()); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test - public void testCreateIndexWithNullSd() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setSd(null); - client.createIndex(index, buildIndexTable(DB_NAME, INDEX_TABLE_NAME)); - checkIfIndexListEmpty(DB_NAME, TABLE_NAME); - } - - // Drop index tests - @Test(expected = NoSuchObjectException.class) - public void testDropIndexInvalidDB() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - client.dropIndex("nonexistingdb", TABLE_NAME, INDEX_NAME, true); - verifyIndex(DB_NAME, TABLE_NAME, INDEX_NAME, INDEX_TABLE_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexInvalidTable() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - client.dropIndex(DB_NAME, "wrongtablename", INDEX_NAME, true); - verifyIndex(DB_NAME, TABLE_NAME, INDEX_NAME, INDEX_TABLE_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexInvalidIndex() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, "invalidindexname", true); - verifyIndex(DB_NAME, TABLE_NAME, INDEX_NAME, INDEX_TABLE_NAME); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = MetaException.class) - public void testDropIndexNullDBName() throws Exception { - - client.dropIndex(null, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = MetaException.class) - public void testDropIndexNullTableName() throws Exception { - - client.dropIndex(DB_NAME, null, INDEX_NAME, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexNullIndexName() throws Exception { - - client.dropIndex(DB_NAME, TABLE_NAME, null, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexEmptyDBName() throws Exception { - - client.dropIndex("", TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexEmptyTableName() throws Exception { - - client.dropIndex(DB_NAME, "", INDEX_NAME, true); - } - - @Test(expected = NoSuchObjectException.class) - public void testDropIndexEmptyIndexName() throws Exception { - - client.dropIndex(DB_NAME, TABLE_NAME, "", true); - } - - // Alter index tests - - @Test - public void testAlterIndex() throws Exception { - - // Only index parameters are allowed to be altered - String indexTableName = TABLE_NAME + "__" + INDEX_NAME + "__"; - int oldCreateTime = (int) (System.currentTimeMillis() / 1000); - String oldHandlerClassName = "TestHandlerClass1"; - String oldLocation = "/index/test/path1"; - String oldInputFormat = "org.apache.hadoop.hive.ql.io.HiveInputFormat"; - String oldOutputFormat = "org.apache.hadoop.hive.ql.io.HiveOutputFormat"; - String oldIndexParamKey = "indexParamKey1"; - String oldIndexParamValue = "indexParamValue1"; - String oldIndexSdParamKey = "sdparamkey1"; - String oldIndexSdParamValue = "sdparamvalue1"; - Map<String, String> indexParams = new HashMap<String, String>(); - indexParams.put(oldIndexParamKey, oldIndexParamValue); - - createTable(DB_NAME, TABLE_NAME); - - Index index = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(indexTableName) - .setCreateTime(oldCreateTime) - .setLastAccessTime(oldCreateTime) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .setDeferredRebuild(false) - .setIndexParams(indexParams) - .setHandlerClass(oldHandlerClassName) - .setLocation(oldLocation) - .setInputFormat(oldInputFormat) - .setOutputFormat(oldOutputFormat) - .addStorageDescriptorParam(oldIndexSdParamKey, oldIndexSdParamValue) - .build(); - client.createIndex(index, buildIndexTable(DB_NAME, indexTableName)); - Index oldIndex = client.getIndex(DB_NAME, TABLE_NAME, INDEX_NAME); - - int newCreateTime = (int) (System.currentTimeMillis() / 1000); - String newHandlerClassName = "TestHandlerClass2"; - String newLocation = "/index/test/path2"; - String newInputFormat = "NewInputFormat"; - String newOutputFormat = "NewOutputFormat"; - String newIndexParamValue = "indexParamValue2"; - String newIndexSdParamKey = "sdparamkey2"; - String newIndexSdParamValue = "sdparamvalue2"; - Map<String, String> newIndexParams = new HashMap<String, String>(); - newIndexParams.put(oldIndexParamKey, newIndexParamValue); - - Index newIndex = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(indexTableName) - .setCreateTime(newCreateTime) - .setLastAccessTime(newCreateTime) - .addCol("id", "int", "test col id") - .setDeferredRebuild(true) - .setIndexParams(newIndexParams) - .setHandlerClass(newHandlerClassName) - .setLocation(newLocation) - .setInputFormat(newInputFormat) - .setOutputFormat(newOutputFormat) - .addStorageDescriptorParam(newIndexSdParamKey, newIndexSdParamValue) - .build(); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, newIndex); - - Index createdNewIndex = client.getIndex(DB_NAME, TABLE_NAME, INDEX_NAME); - // Check if the index parameters are changed - Map<String, String> params = createdNewIndex.getParameters(); - Assert.assertEquals(newIndexParamValue, params.get(oldIndexParamKey)); - // Reset the index parameters and compare the old and new indexes to - // check that the other attributes remained the same. - createdNewIndex.setParameters(oldIndex.getParameters()); - Assert.assertEquals(oldIndex, createdNewIndex); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNonExistingIndex() throws Exception { - - createTable(DB_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNonExistingDb() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index("nonexistingdb", TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNonExistingTable() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNullIndexName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, TABLE_NAME, null, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNullDbName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(null, TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexNullTableName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, null, INDEX_NAME, index); - } - - @Test - public void testAlterIndexNullIndex() throws Exception { - - try { - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, null); - Assert.fail("Exception should have happened"); - } catch (TTransportException | NullPointerException e) { - // TODO: NPE should not be thrown. - } - } - - @Test(expected = MetaException.class) - public void testAlterIndexEmptyIndexName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, TABLE_NAME, "", index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexEmptyDbName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index("", TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = MetaException.class) - public void testAlterIndexEmptyTableName() throws Exception { - - Index index = buildIndexWithDefaultValues(); - client.alter_index(DB_NAME, "", INDEX_NAME, index); - } - - @Test(expected = InvalidOperationException.class) - public void testAlterIndexNullSd() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setSd(null); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - } - - @Test(expected = InvalidOperationException.class) - public void testAlterIndexDifferentIndexTable() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - Index index = buildIndexWithDefaultValues(); - index.setIndexTableName("newindextable"); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - public void testAlterIndexNullIndexNameInNewIndex() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - Index index = new IndexBuilder() - .setDbName(null) - .setTableName(null) - .setIndexName(null) - .setIndexTableName(null) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .setDeferredRebuild(false) - .build(); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - - Index resultIndex = client.getIndex(DB_NAME, TABLE_NAME, INDEX_NAME); - Assert.assertNotNull(resultIndex); - Assert.assertEquals(DB_NAME, resultIndex.getDbName()); - Assert.assertEquals(TABLE_NAME, resultIndex.getOrigTableName()); - Assert.assertEquals(INDEX_NAME, resultIndex.getIndexName()); - Assert.assertEquals(INDEX_TABLE_NAME, resultIndex.getIndexTableName()); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - @Test(expected=MetaException.class) - public void testAlterIndexNullCols() throws Exception { - - createIndex(INDEX_NAME, TABLE_NAME); - Index index = new IndexBuilder() - .setDbName(DB_NAME) - .setTableName(TABLE_NAME) - .setIndexName(INDEX_NAME) - .setIndexTableName(INDEX_TABLE_NAME) - .setCols(null) - .build(); - client.alter_index(DB_NAME, TABLE_NAME, INDEX_NAME, index); - client.dropIndex(DB_NAME, TABLE_NAME, INDEX_NAME, true); - } - - // Helper methods - - private Table createTable(String dbName, String tableName) throws Exception { - Table table = buildTable(dbName, tableName, null); - client.createTable(table); - return table; - } - - private Table buildIndexTable(String dbName, String tableName) throws Exception { - return buildTable(dbName, tableName, TableType.INDEX_TABLE); - } - - private Table buildTable(String dbName, String tableName, TableType tableType) throws Exception { - TableBuilder tableBuilder = new TableBuilder() - .setDbName(dbName) - .setTableName(tableName) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .addStorageDescriptorParam("testSDParamKey", "testSDParamValue") - .setSerdeName(tableName) - .setStoredAsSubDirectories(false) - .addSerdeParam("testSerdeParamKey", "testSerdeParamValue") - .setLocation(metaStore.getWarehouseRoot() + "/" + tableName); - - if (tableType != null) { - tableBuilder.setType(tableType.name()); - } - - return tableBuilder.build(); - } - - private void createIndex(String indexName, String origTableName) throws Exception { - Table origTable = createTable(DB_NAME, origTableName); - String indexTableName = origTableName + "__" + indexName + "__"; - createIndex(DB_NAME, origTable, indexName, buildTable(DB_NAME, indexTableName, - TableType.INDEX_TABLE)); - } - - private void createIndex(String dbName, Table origTable, String indexName, Table indexTable) - throws Exception { - int createTime = (int) (System.currentTimeMillis() / 1000); - Map<String, String> params = new HashMap<String, String>(); - params.put("indexParamKey", "indexParamValue"); - - Index index = - buildIndex(dbName, origTable.getTableName(), indexName, indexTable.getTableName()); - index.setCreateTime(createTime); - index.setLastAccessTime(createTime); - index.setParameters(params); - client.createIndex(index, indexTable); - } - - private Index buildIndexWithDefaultValues() throws MetaException { - return buildIndex(DB_NAME, TABLE_NAME, INDEX_NAME, INDEX_TABLE_NAME); - } - - private Index buildIndex(String dbName, String origTableName, String indexName, - String indexTableName) throws MetaException { - Index index = new IndexBuilder() - .setDbName(dbName) - .setTableName(origTableName) - .setIndexName(indexName) - .setIndexTableName(indexTableName) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .setDeferredRebuild(false) - .build(); - return index; - } - - private void createDB(String dbName) throws TException { - Database db = new DatabaseBuilder(). - setName(dbName). - build(); - client.createDatabase(db); - } - - private void checkIfIndexListEmpty(String dbName, String origTableName) - throws MetaException, TException { - List<String> indexes = client.listIndexNames(dbName, origTableName, MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - private void checkIfIndexExists(String dbName, String origTableName, String indexName) - throws MetaException, TException { - List<String> indexes = client.listIndexNames(dbName, origTableName, MAX); - Assert.assertNotNull(indexes); - Assert.assertEquals(1, indexes.size()); - Assert.assertEquals(indexName, indexes.get(0)); - } - - private void verifyIndex(String dbName, String origTableName, String indexName, - String indexTableName) - throws MetaException, UnknownTableException, NoSuchObjectException, TException { - Index index = client.getIndex(dbName, origTableName, indexName); - Assert.assertNotNull(index); - Assert.assertEquals(dbName, index.getDbName()); - Assert.assertEquals(origTableName, index.getOrigTableName()); - Assert.assertEquals(indexName, index.getIndexName()); - Assert.assertEquals(indexTableName, index.getIndexTableName()); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/7c22d74c/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestDatabases.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestDatabases.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestDatabases.java index 8f97b19..f2d745e 100644 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestDatabases.java +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestDatabases.java @@ -20,12 +20,10 @@ package org.apache.hadoop.hive.metastore.client; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.metastore.IMetaStoreClient; -import org.apache.hadoop.hive.metastore.TableType; import org.apache.hadoop.hive.metastore.annotation.MetastoreCheckinTest; import org.apache.hadoop.hive.metastore.api.AlreadyExistsException; import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.api.Function; -import org.apache.hadoop.hive.metastore.api.Index; import org.apache.hadoop.hive.metastore.api.InvalidObjectException; import org.apache.hadoop.hive.metastore.api.InvalidOperationException; import org.apache.hadoop.hive.metastore.api.MetaException; @@ -34,10 +32,8 @@ import org.apache.hadoop.hive.metastore.api.PrincipalType; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.metastore.client.builder.DatabaseBuilder; import org.apache.hadoop.hive.metastore.client.builder.FunctionBuilder; -import org.apache.hadoop.hive.metastore.client.builder.IndexBuilder; import org.apache.hadoop.hive.metastore.client.builder.TableBuilder; import org.apache.hadoop.hive.metastore.minihms.AbstractMetaStoreService; -import org.apache.thrift.TException; import org.apache.thrift.transport.TTransportException; import org.junit.After; import org.junit.Assert; @@ -378,72 +374,6 @@ public class TestDatabases extends MetaStoreClientTest { metaStore.isPathExists(new Path(database.getLocationUri()))); } - /** - * Creates an index in the given database for testing purposes. - * @param databaseName The database name in which the index should be creatd - * @throws TException If there is an error during the index creation - */ - private void createIndex(String databaseName) throws TException { - Table testTable = - new TableBuilder() - .setDbName(databaseName) - .setTableName("test_table") - .addCol("test_col", "int") - .build(); - - Index testIndex = - new IndexBuilder() - .setIndexName("test_index") - .setIndexTableName("test_index_table") - .setDbAndTableName(testTable) - .addCol("test_col", "int") - .build(); - Table testIndexTable = - new TableBuilder() - .setDbName(databaseName) - .setType(TableType.INDEX_TABLE.name()) - .setTableName("test_index_table") - .addCol("test_col", "int") - .build(); - - // Drop database with index - client.createTable(testTable); - client.createIndex(testIndex, testIndexTable); - } - - @Test - public void testDropDatabaseWithIndex() throws Exception { - Database database = testDatabases[0]; - createIndex(database.getName()); - - // TODO: Known error, should be fixed - // client.dropDatabase(database.getName(), true, true, true); - // Need to drop index to clean up the mess - try { - // Without cascade - client.dropDatabase(database.getName(), true, true, false); - Assert.fail("Expected an InvalidOperationException to be thrown"); - } catch (InvalidOperationException exception) { - // Expected exception - } - client.dropIndex(database.getName(), "test_table", "test_index", true); - // TODO: End index hack - } - - @Test - public void testDropDatabaseWithIndexCascade() throws Exception { - Database database = testDatabases[0]; - createIndex(database.getName()); - - // With cascade - // TODO: Known error, should be fixed - // client.dropDatabase(database.getName(), true, true, true); - // Need to drop index to clean up the mess - client.dropIndex(database.getName(), "test_table", "test_index", true); - client.dropDatabase(database.getName(), true, true, true); - Assert.assertFalse("The directory should be removed", - metaStore.isPathExists(new Path(database.getLocationUri()))); - } @Test public void testGetAllDatabases() throws Exception { http://git-wip-us.apache.org/repos/asf/hive/blob/7c22d74c/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetListIndexes.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetListIndexes.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetListIndexes.java deleted file mode 100644 index 5d226a8..0000000 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetListIndexes.java +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -package org.apache.hadoop.hive.metastore.client; - -import java.util.List; - -import org.apache.hadoop.hive.metastore.IMetaStoreClient; -import org.apache.hadoop.hive.metastore.TableType; -import org.apache.hadoop.hive.metastore.annotation.MetastoreCheckinTest; -import org.apache.hadoop.hive.metastore.api.Database; -import org.apache.hadoop.hive.metastore.api.Index; -import org.apache.hadoop.hive.metastore.api.MetaException; -import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; -import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.hadoop.hive.metastore.client.builder.DatabaseBuilder; -import org.apache.hadoop.hive.metastore.client.builder.IndexBuilder; -import org.apache.hadoop.hive.metastore.client.builder.TableBuilder; -import org.apache.hadoop.hive.metastore.minihms.AbstractMetaStoreService; -import org.apache.thrift.TException; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import com.google.common.collect.Lists; - -/** - * Tests for getting and listing indexes. - */ -@RunWith(Parameterized.class) -@Category(MetastoreCheckinTest.class) -public class TestGetListIndexes extends MetaStoreClientTest { - private AbstractMetaStoreService metaStore; - private IMetaStoreClient client; - - private static final String DB_NAME_1 = "testindexdb_1"; - private static final String DB_NAME_2 = "testindexdb_2"; - private static final String ORIG_TABLE_NAME_1 = "testindextable_1"; - private static final String ORIG_TABLE_NAME_2 = "testindextable_2"; - private static final String ORIG_TABLE_NAME_3 = "testindextable_3"; - private static final String INDEX_NAME_1 = "testindexname_1"; - private static final String INDEX_NAME_2 = "testindexname_2"; - private static final String INDEX_NAME_3 = "testindexname_3"; - private static final String INDEX_NAME_4 = "testindexname_4"; - private static final String INDEX_NAME_5 = "testindexname_4"; - private static final Index[] INDEXES = new Index[5]; - private static final short MAX = -1; - - public TestGetListIndexes(String name, AbstractMetaStoreService metaStore) { - this.metaStore = metaStore; - } - - @Before - public void setUp() throws Exception { - // Get new client - client = metaStore.getClient(); - - // Clean up the database - client.dropDatabase(DB_NAME_1, true, true, true); - client.dropDatabase(DB_NAME_2, true, true, true); - metaStore.cleanWarehouseDirs(); - - createDB(DB_NAME_1); - createDB(DB_NAME_2); - - Table origTable1 = createTable(DB_NAME_1, ORIG_TABLE_NAME_1); - Table origTable2 = createTable(DB_NAME_1, ORIG_TABLE_NAME_2); - Table origTable3 = createTable(DB_NAME_2, ORIG_TABLE_NAME_1); - createTable(DB_NAME_1, ORIG_TABLE_NAME_3); - - INDEXES[0] = createIndex(origTable1, INDEX_NAME_1); - INDEXES[1] = createIndex(origTable1, INDEX_NAME_2); - INDEXES[2] = createIndex(origTable1, INDEX_NAME_3); - INDEXES[3] = createIndex(origTable2, INDEX_NAME_4); - INDEXES[4] = createIndex(origTable3, INDEX_NAME_5); - } - - @After - public void tearDown() throws Exception { - try { - for (Index index : INDEXES) { - client.dropIndex(index.getDbName(), index.getOrigTableName(), index.getIndexName(), true); - } - - if (client != null) { - client.close(); - } - } finally { - client = null; - } - } - - // Get index tests - - public void testGetIndex() throws Exception { - - Index indexToGet = INDEXES[0]; - Index index = client.getIndex(indexToGet.getDbName(), indexToGet.getOrigTableName(), - indexToGet.getIndexName()); - Assert.assertNotNull(index); - Assert.assertEquals(indexToGet, index); - - indexToGet = INDEXES[4]; - index = client.getIndex(indexToGet.getDbName(), indexToGet.getOrigTableName(), - indexToGet.getIndexName()); - Assert.assertNotNull(index); - Assert.assertEquals(indexToGet, index); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetNonExistingIndex() throws Exception { - - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), index.getOrigTableName(), "nonexisingindex"); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetIndexNonExistingTable() throws Exception { - - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), "nonexistingtable", index.getIndexName()); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetIndexNonExistingDatabase() throws Exception { - - Index index = INDEXES[0]; - client.getIndex("nonexistingdb", index.getOrigTableName(), index.getIndexName()); - } - - @Test(expected = MetaException.class) - public void testGetIndexNullName() throws Exception { - - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), index.getOrigTableName(), null); - } - - @Test(expected = MetaException.class) - public void testGetIndexNullTableName() throws Exception { - - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), null, index.getIndexName()); - } - - @Test(expected = MetaException.class) - public void testGetIndexNullDBName() throws Exception { - - Index index = INDEXES[0]; - client.getIndex(null, index.getOrigTableName(), index.getIndexName()); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetIndexEmptyName() throws Exception { - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), index.getOrigTableName(), ""); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetIndexEmptyTableName() throws Exception { - Index index = INDEXES[0]; - client.getIndex(index.getDbName(), "", index.getIndexName()); - } - - @Test(expected = NoSuchObjectException.class) - public void testGetIndexEmptyDBName() throws Exception { - Index index = INDEXES[0]; - client.getIndex("", index.getOrigTableName(), index.getIndexName()); - } - - // List index tests - - @Test - public void testListIndexes() throws Exception { - - List<Index> indexes = client.listIndexes(DB_NAME_1, ORIG_TABLE_NAME_1, MAX); - Assert.assertNotNull(indexes); - Assert.assertEquals(3, indexes.size()); - for (Index index : indexes) { - if (INDEX_NAME_1.equals(index.getIndexName())) { - Assert.assertEquals(INDEXES[0], index); - } else if (INDEX_NAME_2.equals(index.getIndexName())) { - Assert.assertEquals(INDEXES[1], index); - } else { - Assert.assertEquals(INDEXES[2], index); - } - } - - indexes = client.listIndexes(DB_NAME_1, ORIG_TABLE_NAME_2, MAX); - Assert.assertNotNull(indexes); - Assert.assertEquals(1, indexes.size()); - Assert.assertEquals(INDEXES[3], indexes.get(0)); - - indexes = client.listIndexes(DB_NAME_2, ORIG_TABLE_NAME_1, MAX); - Assert.assertNotNull(indexes); - Assert.assertEquals(1, indexes.size()); - Assert.assertEquals(INDEXES[4], indexes.get(0)); - } - - @Test - public void testListIndexesEmptyList() throws Exception { - - List<Index> indexes = client.listIndexes(DB_NAME_1, ORIG_TABLE_NAME_3, MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexesInvalidDb() throws Exception { - - List<Index> indexes = client.listIndexes("nonexistingdb", INDEXES[0].getOrigTableName(), MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexesInvalidTable() throws Exception { - - List<Index> indexes = client.listIndexes(INDEXES[0].getDbName(), "nonexsitingtable", MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test(expected = MetaException.class) - public void testListIndexesNullDb() throws Exception { - - client.listIndexes(null, INDEXES[0].getOrigTableName(), MAX); - } - - @Test(expected = MetaException.class) - public void testListIndexesNullTable() throws Exception { - - client.listIndexes(INDEXES[0].getDbName(), null, MAX); - } - - @Test - public void testListIndexesEmptyDb() throws Exception { - - List<Index> indexes = client.listIndexes("", INDEXES[0].getOrigTableName(), MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexesEmptyTable() throws Exception { - - List<Index> indexes = client.listIndexes(INDEXES[0].getDbName(), "", MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexesWithDifferentNums() throws Exception { - - Index index = INDEXES[0]; - checkListIndexes(index.getDbName(), index.getOrigTableName(), (short) 2); - checkListIndexes(index.getDbName(), index.getOrigTableName(), (short) 1); - checkListIndexes(index.getDbName(), index.getOrigTableName(), (short) 0); - checkListIndexes(index.getDbName(), index.getOrigTableName(), (short) -1); - } - - // List index names tests - - @Test - public void testListIndexNames() throws Exception { - - List<String> indexNames = client.listIndexNames(DB_NAME_1, ORIG_TABLE_NAME_1, MAX); - Assert.assertNotNull(indexNames); - Assert.assertEquals(3, indexNames.size()); - List<String> expectedIndexNames = Lists.newArrayList(INDEXES[0].getIndexName(), - INDEXES[1].getIndexName(), INDEXES[2].getIndexName()); - Assert.assertEquals(expectedIndexNames, indexNames); - - indexNames = client.listIndexNames(DB_NAME_1, ORIG_TABLE_NAME_2, MAX); - Assert.assertNotNull(indexNames); - Assert.assertEquals(1, indexNames.size()); - Assert.assertEquals(INDEXES[3].getIndexName(), indexNames.get(0)); - - indexNames = client.listIndexNames(DB_NAME_2, ORIG_TABLE_NAME_1, MAX); - Assert.assertNotNull(indexNames); - Assert.assertEquals(1, indexNames.size()); - Assert.assertEquals(INDEXES[4].getIndexName(), indexNames.get(0)); - } - - @Test - public void testListIndexNamesEmptyList() throws Exception { - - List<String> indexes = client.listIndexNames(DB_NAME_1, ORIG_TABLE_NAME_3, MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexNamesInvalidDb() throws Exception { - - List<String> indexes = - client.listIndexNames("nonexistingdb", INDEXES[0].getOrigTableName(), MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexNamesInvalidTable() throws Exception { - - List<String> indexes = client.listIndexNames(INDEXES[0].getDbName(), "nonexsitingtable", MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test(expected = MetaException.class) - public void testListIndexNamesNullDb() throws Exception { - - client.listIndexNames(null, INDEXES[0].getOrigTableName(), MAX); - } - - @Test(expected = MetaException.class) - public void testListIndexNamesNullTable() throws Exception { - - client.listIndexNames(INDEXES[0].getDbName(), null, MAX); - } - - @Test - public void testListIndexNamesEmptyDb() throws Exception { - - List<String> indexes = client.listIndexNames("", INDEXES[0].getOrigTableName(), MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexNamesEmptyTable() throws Exception { - - List<String> indexes = client.listIndexNames(INDEXES[0].getDbName(), "", MAX); - Assert.assertNotNull(indexes); - Assert.assertTrue(indexes.isEmpty()); - } - - @Test - public void testListIndexNamesWithDifferentNums() throws Exception { - - Index index = INDEXES[0]; - checkListIndexNames(index.getDbName(), index.getOrigTableName(), (short) 2); - checkListIndexNames(index.getDbName(), index.getOrigTableName(), (short) 1); - checkListIndexNames(index.getDbName(), index.getOrigTableName(), (short) 0); - checkListIndexNames(index.getDbName(), index.getOrigTableName(), (short) -1); - } - - // Helper methods - - private Table createTable(String dbName, String tableName) throws Exception { - Table table = buildTable(dbName, tableName, null); - client.createTable(table); - return table; - } - - private Table buildIndexTable(String dbName, String tableName) throws Exception { - return buildTable(dbName, tableName, TableType.INDEX_TABLE); - } - - private Table buildTable(String dbName, String tableName, TableType tableType) throws Exception { - TableBuilder tableBuilder = new TableBuilder() - .setDbName(dbName) - .setTableName(tableName) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .addStorageDescriptorParam("testSDParamKey", "testSDParamValue") - .setSerdeName(tableName) - .setStoredAsSubDirectories(false) - .addSerdeParam("testSerdeParamKey", "testSerdeParamValue") - .setLocation(metaStore.getWarehouseRoot() + "/" + tableName); - - if (tableType != null){ - tableBuilder.setType(tableType.name()); - } - - return tableBuilder.build(); - } - - private Index createIndex(Table origTable, String indexName) throws Exception { - - String dbName = origTable.getDbName(); - String origTableName = origTable.getTableName(); - String indexTableName = origTableName + "__" + indexName + "__"; - Index index = buildIndex(dbName, origTableName, indexName, indexTableName); - client.createIndex(index, buildTable(dbName, indexTableName, TableType.INDEX_TABLE)); - return client.getIndex(dbName, origTableName, indexName); - } - - private Index buildIndex(String dbName, String origTableName, String indexName, - String indexTableName) throws MetaException { - Index index = new IndexBuilder() - .setDbName(dbName) - .setTableName(origTableName) - .setIndexName(indexName) - .setIndexTableName(indexTableName) - .addCol("id", "int", "test col id") - .addCol("value", "string", "test col value") - .addIndexParam("test_get_index_param_key", "test_get_index_param_value") - .setDeferredRebuild(false) - .build(); - return index; - } - - private void createDB(String dbName) throws TException { - Database db = new DatabaseBuilder() - .setName(dbName) - .build(); - client.createDatabase(db); - } - - private void checkListIndexNames(String dbName, String origTableName, short num) - throws Exception { - List<String> indexNames = client.listIndexNames(dbName, origTableName, num); - Assert.assertNotNull(indexNames); - // TODO: The num parameter doesn't have any effect - Assert.assertEquals(3, indexNames.size()); - } - - private void checkListIndexes(String dbName, String origTableName, short num) throws Exception { - List<Index> indexes = client.listIndexes(dbName, origTableName, num); - Assert.assertNotNull(indexes); - // TODO: The num parameter doesn't have any effect - Assert.assertEquals(3, indexes.size()); - } -}