/**
* 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.security.Permission;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.thrift.TException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.Rule;
import org.junit.rules.ExpectedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.junit.Assert.*;
import org.junit.Before;
public class TestHiveMetaStoreGetMetaConf {
@Rule
public ExpectedException thrown = ExpectedException.none();
private static final Logger LOG = LoggerFactory.getLogger(TestHiveMetaStoreGetMetaConf.class);
private static HiveConf hiveConf;
private static SecurityManager securityManager;
private HiveMetaStoreClient hmsc;
public static class NoExitSecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm) {
// allow anything.
}
@Override
public void checkPermission(Permission perm, Object context) {
// allow anything.
}
@Override
public void checkExit(int status) {
super.checkExit(status);
throw new RuntimeException("System.exit() was called. Raising exception.");
}
}
@AfterClass
public static void tearDown() throws Exception {
LOG.info("Shutting down metastore.");
System.setSecurityManager(securityManager);
}
@BeforeClass
public static void startMetaStoreServer() throws Exception {
securityManager = System.getSecurityManager();
System.setSecurityManager(new NoExitSecurityManager());
HiveConf metastoreConf = new HiveConf();
metastoreConf.setClass(HiveConf.ConfVars.METASTORE_EXPRESSION_PROXY_CLASS.varname,
MockPartitionExpressionForMetastore.class, PartitionExpressionProxy.class);
metastoreConf.setBoolVar(HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL_DDL, false);
int msPort = MetaStoreUtils.startMetaStore(metastoreConf);
hiveConf = new HiveConf(TestHiveMetaStoreGetMetaConf.class);
hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:"
+ msPort);
hiveConf.setVar(HiveConf.ConfVars.PREEXECHOOKS, "");
hiveConf.setVar(HiveConf.ConfVars.POSTEXECHOOKS, "");
hiveConf.setBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY, false);
hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 10);
System.setProperty(HiveConf.ConfVars.PREEXECHOOKS.varname, " ");
System.setProperty(HiveConf.ConfVars.POSTEXECHOOKS.varname, " ");
}
@Before
public void setup() throws MetaException {
hmsc = new HiveMetaStoreClient(hiveConf);
}
@After
public void closeClient() {
if (hmsc != null) {
hmsc.close();
}
}
@Test
public void testGetMetaConfDefault() throws MetaException, TException {
HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL;
String expected = metaConfVar.getDefaultValue();
String actual = hmsc.getMetaConf(metaConfVar.toString());
assertEquals(expected, actual);
}
@Test
public void testGetMetaConfDefaultEmptyString() throws MetaException, TException {
HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_PARTITION_NAME_WHITELIST_PATTERN;
String expected = "";
String actual = hmsc.getMetaConf(metaConfVar.toString());
assertEquals(expected, actual);
}
@Test
public void testGetMetaConfOverridden() throws MetaException, TException {
HiveConf.ConfVars metaConfVar = HiveConf.ConfVars.METASTORE_TRY_DIRECT_SQL_DDL;
String expected = "false";
String actual = hmsc.getMetaConf(metaConfVar.toString());
assertEquals(expected, actual);
}
@Test
public void testGetMetaConfUnknownPreperty() throws MetaException, TException {
String unknownPropertyName = "hive.meta.foo.bar";
thrown.expect(MetaException.class);
thrown.expectMessage("Invalid configuration key " + unknownPropertyName);
hmsc.getMetaConf(unknownPropertyName);
}
}