http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRetryingHMSHandler.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRetryingHMSHandler.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRetryingHMSHandler.java deleted file mode 100644 index dfd80bc..0000000 --- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestRetryingHMSHandler.java +++ /dev/null @@ -1,123 +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; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.metastore.api.Database; -import org.apache.hadoop.hive.metastore.api.FieldSchema; -import org.apache.hadoop.hive.metastore.api.Order; -import org.apache.hadoop.hive.metastore.api.SerDeInfo; -import org.apache.hadoop.hive.metastore.api.StorageDescriptor; -import org.apache.hadoop.hive.metastore.api.Table; -import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge; -import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils; -import org.apache.hadoop.hive.ql.io.HiveInputFormat; -import org.apache.hadoop.hive.ql.io.HiveOutputFormat; -import org.apache.hadoop.hive.serde.serdeConstants; -import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; - -/** - * TestRetryingHMSHandler. Test case for - * {@link org.apache.hadoop.hive.metastore.RetryingHMSHandler} - */ -public class TestRetryingHMSHandler extends TestCase { - private HiveConf hiveConf; - private HiveMetaStoreClient msc; - - @Override - protected void setUp() throws Exception { - - super.setUp(); - System.setProperty("hive.metastore.pre.event.listeners", - AlternateFailurePreListener.class.getName()); - int port = MetaStoreTestUtils.startMetaStoreWithRetry(); - hiveConf = new HiveConf(this.getClass()); - hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:" + port); - hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 3); - hiveConf.setIntVar(HiveConf.ConfVars.HMSHANDLERATTEMPTS, 2); - hiveConf.setTimeVar(HiveConf.ConfVars.HMSHANDLERINTERVAL, 0, TimeUnit.MILLISECONDS); - hiveConf.setBoolVar(HiveConf.ConfVars.HMSHANDLERFORCERELOADCONF, false); - msc = new HiveMetaStoreClient(hiveConf); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - // Create a database and a table in that database. Because the AlternateFailurePreListener is - // being used each attempt to create something should require two calls by the RetryingHMSHandler - public void testRetryingHMSHandler() throws Exception { - String dbName = "hive4159"; - String tblName = "tmptbl"; - - Database db = new Database(); - db.setName(dbName); - msc.createDatabase(db); - - Assert.assertEquals(2, AlternateFailurePreListener.getCallCount()); - - ArrayList<FieldSchema> cols = new ArrayList<FieldSchema>(2); - cols.add(new FieldSchema("c1", serdeConstants.STRING_TYPE_NAME, "")); - cols.add(new FieldSchema("c2", serdeConstants.INT_TYPE_NAME, "")); - - Map<String, String> params = new HashMap<String, String>(); - params.put("test_param_1", "Use this for comments etc"); - - Map<String, String> serdParams = new HashMap<String, String>(); - serdParams.put(serdeConstants.SERIALIZATION_FORMAT, "1"); - - StorageDescriptor sd = new StorageDescriptor(); - - sd.setCols(cols); - sd.setCompressed(false); - sd.setNumBuckets(1); - sd.setParameters(params); - sd.setBucketCols(new ArrayList<String>(2)); - sd.getBucketCols().add("name"); - sd.setSerdeInfo(new SerDeInfo()); - sd.getSerdeInfo().setName(tblName); - sd.getSerdeInfo().setParameters(serdParams); - sd.getSerdeInfo().getParameters() - .put(serdeConstants.SERIALIZATION_FORMAT, "1"); - sd.getSerdeInfo().setSerializationLib(LazySimpleSerDe.class.getName()); - sd.setInputFormat(HiveInputFormat.class.getName()); - sd.setOutputFormat(HiveOutputFormat.class.getName()); - sd.setSortCols(new ArrayList<Order>()); - - Table tbl = new Table(); - tbl.setDbName(dbName); - tbl.setTableName(tblName); - tbl.setSd(sd); - tbl.setLastAccessTime(0); - - msc.createTable(tbl); - - Assert.assertEquals(4, AlternateFailurePreListener.getCallCount()); - } - -}
http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnBothClientServer.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnBothClientServer.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnBothClientServer.java deleted file mode 100644 index 98708a6..0000000 --- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnBothClientServer.java +++ /dev/null @@ -1,31 +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; - -import org.apache.hadoop.hive.conf.HiveConf.ConfVars; - -public class TestSetUGIOnBothClientServer extends TestRemoteHiveMetaStore{ - - public TestSetUGIOnBothClientServer() { - super(); - isThriftClient = true; - // This will turn on setugi on both client and server processes of the test. - System.setProperty(ConfVars.METASTORE_EXECUTE_SET_UGI.varname, "true"); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyClient.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyClient.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyClient.java deleted file mode 100644 index 1a9abc9..0000000 --- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyClient.java +++ /dev/null @@ -1,31 +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; - -import org.apache.hadoop.hive.conf.HiveConf; - -public class TestSetUGIOnOnlyClient extends TestRemoteHiveMetaStore{ - - @Override - protected HiveMetaStoreClient createClient() throws Exception { - hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:" + port); - hiveConf.setBoolVar(HiveConf.ConfVars.METASTORE_EXECUTE_SET_UGI, true); - return new HiveMetaStoreClient(hiveConf); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyServer.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyServer.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyServer.java deleted file mode 100644 index b45fd01..0000000 --- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/TestSetUGIOnOnlyServer.java +++ /dev/null @@ -1,31 +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; - -import org.apache.hadoop.hive.conf.HiveConf; - -public class TestSetUGIOnOnlyServer extends TestSetUGIOnBothClientServer { - - @Override - protected HiveMetaStoreClient createClient() throws Exception { - hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:" + port); - hiveConf.setBoolVar(HiveConf.ConfVars.METASTORE_EXECUTE_SET_UGI, false); - return new HiveMetaStoreClient(hiveConf); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/pom.xml ---------------------------------------------------------------------- diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index cce3282..d87863e 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -44,6 +44,7 @@ <test.tmp.dir>${project.build.directory}/tmp</test.tmp.dir> <test.warehouse.dir>${project.build.directory}/warehouse</test.warehouse.dir> <test.warehouse.scheme>file://</test.warehouse.scheme> + <test.forkcount>1</test.forkcount> <!-- Plugin versions --> <ant.contrib.version>1.0b3</ant.contrib.version> @@ -506,6 +507,7 @@ <configuration> <redirectTestOutputToFile>true</redirectTestOutputToFile> <reuseForks>false</reuseForks> + <forkCount>${test.forkcount}</forkCount> <argLine>-Xmx2048m</argLine> <failIfNoTests>false</failIfNoTests> <systemPropertyVariables> http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/IndexBuilder.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/IndexBuilder.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/IndexBuilder.java index 6c8b1d8..50fc186 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/IndexBuilder.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/IndexBuilder.java @@ -73,6 +73,11 @@ public class IndexBuilder extends StorageDescriptorBuilder<IndexBuilder> { return this; } + public IndexBuilder addIndexParam(String key, String value) { + indexParams.put(key, value); + return this; + } + public IndexBuilder setIndexName(String indexName) { this.indexName = indexName; return this; http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/PartitionBuilder.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/PartitionBuilder.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/PartitionBuilder.java index 265625f..38e5a8f 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/PartitionBuilder.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/PartitionBuilder.java @@ -53,9 +53,10 @@ public class PartitionBuilder extends StorageDescriptorBuilder<PartitionBuilder> return this; } - public PartitionBuilder setDbAndTableName(Table table) { + public PartitionBuilder fromTable(Table table) { this.dbName = table.getDbName(); this.tableName = table.getTableName(); + setCols(table.getSd().getCols()); return this; } http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/TableBuilder.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/TableBuilder.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/TableBuilder.java index 1d457a6..69acf3c 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/TableBuilder.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/client/builder/TableBuilder.java @@ -17,8 +17,10 @@ */ package org.apache.hadoop.hive.metastore.client.builder; +import org.apache.hadoop.hive.metastore.TableType; 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.MetaException; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils; @@ -46,6 +48,8 @@ public class TableBuilder extends StorageDescriptorBuilder<TableBuilder> { tableParams = new HashMap<>(); createTime = lastAccessTime = (int)(System.currentTimeMillis() / 1000); retention = 0; + partCols = new ArrayList<>(); + type = TableType.MANAGED_TABLE.name(); super.setChild(this); } @@ -90,7 +94,6 @@ public class TableBuilder extends StorageDescriptorBuilder<TableBuilder> { } public TableBuilder addPartCol(String name, String type, String comment) { - if (partCols == null) partCols = new ArrayList<>(); partCols.add(new FieldSchema(name, type, comment)); return this; } @@ -135,6 +138,13 @@ public class TableBuilder extends StorageDescriptorBuilder<TableBuilder> { return this; } + public TableBuilder fromIndex(Index index) { + dbName = index.getDbName(); + tableName = index.getIndexTableName(); + setCols(index.getSd().getCols()); + return this; + } + public Table build() throws MetaException { if (dbName == null || tableName == null) { throw new MetaException("You must set the database and table name"); http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java index b46cc38..57692d3 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java @@ -482,7 +482,7 @@ public class MetastoreConf { "hive.metastore.hbase.file.metadata.threads", 1, "Number of threads to use to read file metadata in background to cache it."), FILTER_HOOK("metastore.filter.hook", "hive.metastore.filter.hook", - "org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl", + org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl.class.getName(), "Metastore hook class for filtering the metadata read results. If hive.security.authorization.manager" + "is set to instance of HiveAuthorizerFactory, then this value is ignored."), FS_HANDLER_CLS("metastore.fs.handler.class", "hive.metastore.fs.handler.class", http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/FakeDerby.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/FakeDerby.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/FakeDerby.java new file mode 100644 index 0000000..cc0bd77 --- /dev/null +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/FakeDerby.java @@ -0,0 +1,404 @@ +/* + * 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; + +import java.lang.Override; +import java.sql.Array; +import java.sql.Blob; +import java.sql.CallableStatement; +import java.sql.Clob; +import java.sql.DatabaseMetaData; +import java.sql.NClob; +import java.sql.PreparedStatement; +import java.sql.SQLClientInfoException; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import java.sql.SQLWarning; +import java.sql.SQLXML; +import java.sql.Savepoint; +import java.sql.Statement; +import java.sql.Struct; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.logging.Logger; +import java.util.Properties; + +/** + * Fake derby driver - companion class to enable testing by TestObjectStoreInitRetry + */ +public class FakeDerby extends org.apache.derby.jdbc.EmbeddedDriver { + + public class Connection implements java.sql.Connection { + + private java.sql.Connection _baseConn; + + public Connection(java.sql.Connection connection) { + TestObjectStoreInitRetry.debugTrace(); + this._baseConn = connection; + } + + @Override + public Statement createStatement() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createStatement(); + } + + @Override + public PreparedStatement prepareStatement(String sql) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql); + } + + @Override + public CallableStatement prepareCall(String sql) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareCall(sql); + } + + @Override + public String nativeSQL(String sql) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.nativeSQL(sql); + } + + @Override + public void setAutoCommit(boolean autoCommit) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + TestObjectStoreInitRetry.misbehave(); + _baseConn.setAutoCommit(autoCommit); + } + + @Override + public boolean getAutoCommit() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getAutoCommit(); + } + + @Override + public void commit() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.commit(); + } + + @Override + public void rollback() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.rollback(); + } + + @Override + public void close() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.close(); + } + + @Override + public boolean isClosed() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.isClosed(); + } + + @Override + public DatabaseMetaData getMetaData() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getMetaData(); + } + + @Override + public void setReadOnly(boolean readOnly) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setReadOnly(readOnly); + } + + @Override + public boolean isReadOnly() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.isReadOnly(); + } + + @Override + public void setCatalog(String catalog) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setCatalog(catalog); + } + + @Override + public String getCatalog() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getCatalog(); + } + + @Override + public void setTransactionIsolation(int level) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setTransactionIsolation(level); + } + + @Override + public int getTransactionIsolation() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getTransactionIsolation(); + } + + @Override + public SQLWarning getWarnings() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getWarnings(); + } + + @Override + public void clearWarnings() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.clearWarnings(); + } + + @Override + public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createStatement(resultSetType, resultSetConcurrency); + } + + @Override + public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql, resultSetType, resultSetConcurrency); + } + + @Override + public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareCall(sql, resultSetType, resultSetConcurrency); + } + + @Override + public Map<String, Class<?>> getTypeMap() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getTypeMap(); + } + + @Override + public void setTypeMap(Map<String, Class<?>> map) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setTypeMap(map); + } + + @Override + public void setHoldability(int holdability) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setHoldability(holdability); + } + + @Override + public int getHoldability() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getHoldability(); + } + + @Override + public Savepoint setSavepoint() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.setSavepoint(); + } + + @Override + public Savepoint setSavepoint(String name) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.setSavepoint(name); + } + + @Override + public void rollback(Savepoint savepoint) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.rollback(savepoint); + } + + @Override + public void releaseSavepoint(Savepoint savepoint) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.releaseSavepoint(savepoint); + } + + @Override + public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); + } + + @Override + public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); + } + + @Override + public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); + } + + @Override + public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql, autoGeneratedKeys); + } + + @Override + public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql, columnIndexes); + } + + @Override + public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.prepareStatement(sql, columnNames); + } + + @Override + public Clob createClob() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createClob(); + } + + @Override + public Blob createBlob() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createBlob(); + } + + @Override + public NClob createNClob() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createNClob(); + } + + @Override + public SQLXML createSQLXML() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createSQLXML(); + } + + @Override + public boolean isValid(int timeout) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.isValid(timeout); + } + + @Override + public void setClientInfo(String name, String value) throws SQLClientInfoException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setClientInfo(name, value); + } + + @Override + public void setClientInfo(Properties properties) throws SQLClientInfoException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setClientInfo(properties); + } + + @Override + public String getClientInfo(String name) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getClientInfo(name); + } + + @Override + public Properties getClientInfo() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getClientInfo(); + } + + @Override + public Array createArrayOf(String typeName, Object[] elements) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createArrayOf(typeName, elements); + } + + @Override + public Struct createStruct(String typeName, Object[] attributes) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.createStruct(typeName, attributes); + } + + @Override + public void setSchema(String schema) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setSchema(schema); + } + + @Override + public String getSchema() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getSchema(); + } + + @Override + public void abort(Executor executor) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.abort(executor); + } + + @Override + public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + _baseConn.setNetworkTimeout(executor, milliseconds); + } + + @Override + public int getNetworkTimeout() throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.getNetworkTimeout(); + } + + @Override + public <T> T unwrap(Class<T> iface) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.unwrap(iface); + } + + @Override + public boolean isWrapperFor(Class<?> iface) throws SQLException { + TestObjectStoreInitRetry.debugTrace(); + return _baseConn.isWrapperFor(iface); + } + } + + public FakeDerby(){ + } + + @Override + public boolean acceptsURL(String url) throws SQLException { + url = url.replace("fderby","derby"); + return super.acceptsURL(url); + } + + @Override + public Connection connect(java.lang.String url, java.util.Properties info) throws SQLException { + TestObjectStoreInitRetry.misbehave(); + url = url.replace("fderby","derby"); + return new FakeDerby.Connection(super.connect(url, info)); + } + + @Override + public Logger getParentLogger() throws SQLFeatureNotSupportedException { + throw new SQLFeatureNotSupportedException(); // hope this is respected properly + } + + +} http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java index 380f3a1..e7146c4 100644 --- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/MetaStoreTestUtils.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.metastore.conf.MetastoreConf; +import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars; import org.apache.hadoop.hive.metastore.events.EventCleanerTask; import org.apache.hadoop.hive.metastore.security.HadoopThriftAuthBridge; import org.slf4j.Logger; @@ -91,19 +92,22 @@ public class MetaStoreTestUtils { public static int startMetaStoreWithRetry(final HadoopThriftAuthBridge bridge, Configuration conf) throws Exception { - Exception metaStoreException = null; - int metaStorePort = 0; + int metaStorePort = findFreePort(); + startMetaStoreWithRetry(metaStorePort, bridge, conf); + return metaStorePort; + } + public static void startMetaStoreWithRetry(int port, HadoopThriftAuthBridge bridge, + Configuration conf) throws Exception { + Exception metaStoreException = null; for (int tryCount = 0; tryCount < MetaStoreTestUtils.RETRY_COUNT; tryCount++) { try { - metaStorePort = MetaStoreTestUtils.findFreePort(); - MetaStoreTestUtils.startMetaStore(metaStorePort, bridge, conf); - return metaStorePort; + MetaStoreTestUtils.startMetaStore(port, bridge, conf); + return; } catch (ConnectException ce) { metaStoreException = ce; } } - throw metaStoreException; } @@ -198,11 +202,20 @@ public class MetaStoreTestUtils { /** * Setup a configuration file for standalone mode. There are a few config variables that have * defaults that require parts of Hive that aren't present in standalone mode. This method - * sets them to something that will work without the rest of Hive. + * sets them to something that will work without the rest of Hive. It only changes them if + * they have not already been set, to avoid clobbering intentional changes. * @param conf Configuration object */ public static void setConfForStandloneMode(Configuration conf) { - MetastoreConf.setVar(conf, MetastoreConf.ConfVars.TASK_THREADS_ALWAYS, - EventCleanerTask.class.getName()); + if (MetastoreConf.getVar(conf, ConfVars.TASK_THREADS_ALWAYS).equals( + ConfVars.TASK_THREADS_ALWAYS.getDefaultVal())) { + MetastoreConf.setVar(conf, ConfVars.TASK_THREADS_ALWAYS, + EventCleanerTask.class.getName()); + } + if (MetastoreConf.getVar(conf, ConfVars.EXPRESSION_PROXY_CLASS).equals( + ConfVars.EXPRESSION_PROXY_CLASS.getDefaultVal())) { + MetastoreConf.setClass(conf, ConfVars.EXPRESSION_PROXY_CLASS, + DefaultPartitionExpressionProxy.class, PartitionExpressionProxy.class); + } } } http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestAdminUser.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestAdminUser.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestAdminUser.java new file mode 100644 index 0000000..3b541d2 --- /dev/null +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestAdminUser.java @@ -0,0 +1,46 @@ +/* + * 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; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hive.metastore.HiveMetaStore.HMSHandler; +import org.apache.hadoop.hive.metastore.api.MetaException; +import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; +import org.apache.hadoop.hive.metastore.api.PrincipalType; +import org.apache.hadoop.hive.metastore.api.Role; +import org.apache.hadoop.hive.metastore.conf.MetastoreConf; +import org.apache.hadoop.hive.metastore.conf.MetastoreConf.ConfVars; +import org.junit.Assert; +import org.junit.Test; + +public class TestAdminUser { + + @Test + public void testCreateAdminNAddUser() throws MetaException, NoSuchObjectException { + Configuration conf = MetastoreConf.newMetastoreConf(); + MetastoreConf.setVar(conf, ConfVars.USERS_IN_ADMIN_ROLE, "adminuser"); + MetaStoreTestUtils.setConfForStandloneMode(conf); + RawStore rawStore = new HMSHandler("testcreateroot", conf).getMS(); + Role adminRole = rawStore.getRole(HiveMetaStore.ADMIN); + Assert.assertTrue(adminRole.getOwnerName().equals(HiveMetaStore.ADMIN)); + Assert.assertEquals(rawStore.listPrincipalGlobalGrants(HiveMetaStore.ADMIN, PrincipalType.ROLE) + .get(0).getGrantInfo().getPrivilege(),"All"); + Assert.assertEquals(rawStore.listRoles("adminuser", PrincipalType.USER).get(0). + getRoleName(),HiveMetaStore.ADMIN); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestEmbeddedHiveMetaStore.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestEmbeddedHiveMetaStore.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestEmbeddedHiveMetaStore.java new file mode 100644 index 0000000..72758df --- /dev/null +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestEmbeddedHiveMetaStore.java @@ -0,0 +1,48 @@ +/* + * 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; + +import org.apache.hadoop.util.StringUtils; +import org.junit.After; +import org.junit.Before; + +public class TestEmbeddedHiveMetaStore extends TestHiveMetaStore { + + @Before + public void openWarehouse() throws Exception { + warehouse = new Warehouse(conf); + client = createClient(); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Override + protected HiveMetaStoreClient createClient() throws Exception { + try { + return new HiveMetaStoreClient(conf); + } catch (Throwable e) { + System.err.println("Unable to open the metastore"); + System.err.println(StringUtils.stringifyException(e)); + throw new Exception(e); + } + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/002233b9/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestFilterHooks.java ---------------------------------------------------------------------- diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestFilterHooks.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestFilterHooks.java new file mode 100644 index 0000000..56afe33 --- /dev/null +++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/TestFilterHooks.java @@ -0,0 +1,303 @@ +/* + * 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; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.hadoop.conf.Configuration; +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.Partition; +import org.apache.hadoop.hive.metastore.api.PartitionSpec; +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.security.HadoopThriftAuthBridge; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.google.common.collect.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestFilterHooks { + private static final Logger LOG = LoggerFactory.getLogger(TestFilterHooks.class); + + public static class DummyMetaStoreFilterHookImpl extends DefaultMetaStoreFilterHookImpl { + private static boolean blockResults = false; + + public DummyMetaStoreFilterHookImpl(Configuration conf) { + super(conf); + } + + @Override + public List<String> filterDatabases(List<String> dbList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterDatabases(dbList); + } + + @Override + public Database filterDatabase(Database dataBase) throws NoSuchObjectException { + if (blockResults) { + throw new NoSuchObjectException("Blocked access"); + } + return super.filterDatabase(dataBase); + } + + @Override + public List<String> filterTableNames(String dbName, List<String> tableList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterTableNames(dbName, tableList); + } + + @Override + public Table filterTable(Table table) throws NoSuchObjectException { + if (blockResults) { + throw new NoSuchObjectException("Blocked access"); + } + return super.filterTable(table); + } + + @Override + public List<Table> filterTables(List<Table> tableList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterTables(tableList); + } + + @Override + public List<Partition> filterPartitions(List<Partition> partitionList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterPartitions(partitionList); + } + + @Override + public List<PartitionSpec> filterPartitionSpecs( + List<PartitionSpec> partitionSpecList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterPartitionSpecs(partitionSpecList); + } + + @Override + public Partition filterPartition(Partition partition) throws NoSuchObjectException { + if (blockResults) { + throw new NoSuchObjectException("Blocked access"); + } + return super.filterPartition(partition); + } + + @Override + public List<String> filterPartitionNames(String dbName, String tblName, + List<String> partitionNames) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterPartitionNames(dbName, tblName, partitionNames); + } + + @Override + public Index filterIndex(Index index) throws NoSuchObjectException { + if (blockResults) { + throw new NoSuchObjectException("Blocked access"); + } + return super.filterIndex(index); + } + + @Override + public List<String> filterIndexNames(String dbName, String tblName, + List<String> indexList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterIndexNames(dbName, tblName, indexList); + } + + @Override + public List<Index> filterIndexes(List<Index> indexeList) throws MetaException { + if (blockResults) { + return new ArrayList<>(); + } + return super.filterIndexes(indexeList); + } + } + + private static final String DBNAME1 = "testdb1"; + private static final String DBNAME2 = "testdb2"; + private static final String TAB1 = "tab1"; + private static final String TAB2 = "tab2"; + private static final String INDEX1 = "idx1"; + private static Configuration conf; + private static HiveMetaStoreClient msc; + + @BeforeClass + public static void setUp() throws Exception { + DummyMetaStoreFilterHookImpl.blockResults = false; + + conf = MetastoreConf.newMetastoreConf(); + MetastoreConf.setLongVar(conf, ConfVars.THRIFT_CONNECTION_RETRIES, 3); + MetastoreConf.setBoolVar(conf, ConfVars.HIVE_SUPPORT_CONCURRENCY, false); + MetastoreConf.setClass(conf, ConfVars.FILTER_HOOK, DummyMetaStoreFilterHookImpl.class, + MetaStoreFilterHook.class); + MetaStoreTestUtils.setConfForStandloneMode(conf); + int port = MetaStoreTestUtils.findFreePort(); + MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://localhost:" + port); + MetaStoreTestUtils.startMetaStoreWithRetry(port, HadoopThriftAuthBridge.getBridge(), conf); + + msc = new HiveMetaStoreClient(conf); + + msc.dropDatabase(DBNAME1, true, true, true); + msc.dropDatabase(DBNAME2, true, true, true); + Database db1 = new DatabaseBuilder() + .setName(DBNAME1) + .build(); + msc.createDatabase(db1); + Database db2 = new DatabaseBuilder() + .setName(DBNAME2) + .build(); + msc.createDatabase(db2); + Table tab1 = new TableBuilder() + .setDbName(DBNAME1) + .setTableName(TAB1) + .addCol("id", "int") + .addCol("name", "string") + .build(); + msc.createTable(tab1); + Table tab2 = new TableBuilder() + .setDbName(DBNAME1) + .setTableName(TAB2) + .addCol("id", "int") + .addPartCol("name", "string") + .build(); + msc.createTable(tab2); + Partition part1 = new PartitionBuilder() + .fromTable(tab2) + .addValue("value1") + .build(); + msc.add_partition(part1); + Partition part2 = new PartitionBuilder() + .fromTable(tab2) + .addValue("value2") + .build(); + msc.add_partition(part2); + Index index = new IndexBuilder() + .setDbAndTableName(tab1) + .setIndexName(INDEX1) + .setDeferredRebuild(true) + .addCol("id", "int") + .build(); + msc.createIndex(index, new TableBuilder().fromIndex(index).build()); + } + + @AfterClass + public static void tearDown() throws Exception { + msc.close(); + } + + @Test + public void testDefaultFilter() throws Exception { + assertNotNull(msc.getTable(DBNAME1, TAB1)); + assertEquals(3, msc.getTables(DBNAME1, "*").size()); + assertEquals(3, msc.getAllTables(DBNAME1).size()); + assertEquals(1, msc.getTables(DBNAME1, TAB2).size()); + assertEquals(0, msc.getAllTables(DBNAME2).size()); + + assertNotNull(msc.getDatabase(DBNAME1)); + assertEquals(3, msc.getDatabases("*").size()); + assertEquals(3, msc.getAllDatabases().size()); + assertEquals(1, msc.getDatabases(DBNAME1).size()); + + assertNotNull(msc.getPartition(DBNAME1, TAB2, "name=value1")); + assertEquals(1, msc.getPartitionsByNames(DBNAME1, TAB2, Lists.newArrayList("name=value1")).size()); + + assertNotNull(msc.getIndex(DBNAME1, TAB1, INDEX1)); + } + + @Test + public void testDummyFilterForTables() throws Exception { + DummyMetaStoreFilterHookImpl.blockResults = true; + try { + msc.getTable(DBNAME1, TAB1); + fail("getTable() should fail with blocking mode"); + } catch (NoSuchObjectException e) { + // Excepted + } + assertEquals(0, msc.getTables(DBNAME1, "*").size()); + assertEquals(0, msc.getAllTables(DBNAME1).size()); + assertEquals(0, msc.getTables(DBNAME1, TAB2).size()); + } + + @Test + public void testDummyFilterForDb() throws Exception { + DummyMetaStoreFilterHookImpl.blockResults = true; + try { + assertNotNull(msc.getDatabase(DBNAME1)); + fail("getDatabase() should fail with blocking mode"); + } catch (NoSuchObjectException e) { + // Excepted + } + assertEquals(0, msc.getDatabases("*").size()); + assertEquals(0, msc.getAllDatabases().size()); + assertEquals(0, msc.getDatabases(DBNAME1).size()); + } + + @Test + public void testDummyFilterForPartition() throws Exception { + DummyMetaStoreFilterHookImpl.blockResults = true; + try { + assertNotNull(msc.getPartition(DBNAME1, TAB2, "name=value1")); + fail("getPartition() should fail with blocking mode"); + } catch (NoSuchObjectException e) { + // Excepted + } + assertEquals(0, msc.getPartitionsByNames(DBNAME1, TAB2, + Lists.newArrayList("name=value1")).size()); + } + + @Test + public void testDummyFilterForIndex() throws Exception { + DummyMetaStoreFilterHookImpl.blockResults = true; + try { + assertNotNull(msc.getIndex(DBNAME1, TAB1, INDEX1)); + fail("getPartition() should fail with blocking mode"); + } catch (NoSuchObjectException e) { + // Excepted + } + } + +}
