/* * 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.accumulo; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.security.Authorizations; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.accumulo.serde.AccumuloIndexParameters; import org.apache.hadoop.hive.accumulo.serde.AccumuloSerDeParameters; import org.junit.Test; import java.util.List; import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TestAccumuloIndexParameters { public static class MockAccumuloIndexScanner implements AccumuloIndexScanner { @Override public void init(Configuration conf) { } @Override public boolean isIndexed(String columnName) { return false; } @Override public List<Range> getIndexRowRanges(String column, Range indexRange) { return null; } } @Test public void testDefaultScanner() { try { AccumuloIndexScanner scanner = new AccumuloIndexParameters(new Configuration()).createScanner(); assertTrue(scanner instanceof AccumuloDefaultIndexScanner); } catch (AccumuloIndexScannerException e) { fail("Unexpected exception thrown"); } } @Test public void testUserHandler() throws AccumuloIndexScannerException { Configuration conf = new Configuration(); conf.set(AccumuloIndexParameters.INDEX_SCANNER, MockAccumuloIndexScanner.class.getName()); AccumuloIndexScanner scanner = new AccumuloIndexParameters(conf).createScanner(); assertTrue(scanner instanceof MockAccumuloIndexScanner); } @Test public void testBadHandler() { Configuration conf = new Configuration(); conf.set(AccumuloIndexParameters.INDEX_SCANNER, "a.class.does.not.exist.IndexHandler"); try { AccumuloIndexScanner scanner = new AccumuloIndexParameters(conf).createScanner(); } catch (AccumuloIndexScannerException e) { return; } fail("Failed to throw exception for class not found"); } @Test public void getIndexColumns() { Configuration conf = new Configuration(); conf.set(AccumuloIndexParameters.INDEXED_COLUMNS, "a,b,c"); Set<String> cols = new AccumuloIndexParameters(conf).getIndexColumns(); assertEquals(3, cols.size()); assertTrue("Missing column a", cols.contains("a")); assertTrue("Missing column b", cols.contains("b")); assertTrue("Missing column c", cols.contains("c")); } @Test public void getMaxIndexRows() { Configuration conf = new Configuration(); conf.setInt(AccumuloIndexParameters.MAX_INDEX_ROWS, 10); int maxRows = new AccumuloIndexParameters(conf).getMaxIndexRows(); assertEquals(10, maxRows); } @Test public void getAuths() { Configuration conf = new Configuration(); conf.set(AccumuloSerDeParameters.AUTHORIZATIONS_KEY, "public,open"); Authorizations auths = new AccumuloIndexParameters(conf).getTableAuths(); assertEquals(2, auths.size()); assertTrue("Missing auth public", auths.contains("public")); assertTrue("Missing auth open", auths.contains("open")); } }