You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ga...@apache.org on 2017/08/04 21:14:36 UTC

[15/17] hive git commit: HIVE-17234 Remove HBase metastore from master (Alan Gates, reviewed by Daniel Dai and Sergey Shelukhin)

http://git-wip-us.apache.org/repos/asf/hive/blob/5e061557/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreIntegration.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreIntegration.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreIntegration.java
deleted file mode 100644
index 2cc1373..0000000
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseStoreIntegration.java
+++ /dev/null
@@ -1,1801 +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.hbase;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.hadoop.hive.metastore.HiveMetaStore;
-import org.apache.hadoop.hive.metastore.api.BinaryColumnStatsData;
-import org.apache.hadoop.hive.metastore.api.BooleanColumnStatsData;
-import org.apache.hadoop.hive.metastore.api.ColumnStatistics;
-import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData;
-import org.apache.hadoop.hive.metastore.api.ColumnStatisticsDesc;
-import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
-import org.apache.hadoop.hive.metastore.api.Database;
-import org.apache.hadoop.hive.metastore.api.Decimal;
-import org.apache.hadoop.hive.metastore.api.DecimalColumnStatsData;
-import org.apache.hadoop.hive.metastore.api.DoubleColumnStatsData;
-import org.apache.hadoop.hive.metastore.api.FieldSchema;
-import org.apache.hadoop.hive.metastore.api.Function;
-import org.apache.hadoop.hive.metastore.api.FunctionType;
-import org.apache.hadoop.hive.metastore.api.HiveObjectPrivilege;
-import org.apache.hadoop.hive.metastore.api.HiveObjectRef;
-import org.apache.hadoop.hive.metastore.api.HiveObjectType;
-import org.apache.hadoop.hive.metastore.api.InvalidObjectException;
-import org.apache.hadoop.hive.metastore.api.LongColumnStatsData;
-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.PrincipalPrivilegeSet;
-import org.apache.hadoop.hive.metastore.api.PrincipalType;
-import org.apache.hadoop.hive.metastore.api.PrivilegeBag;
-import org.apache.hadoop.hive.metastore.api.PrivilegeGrantInfo;
-import org.apache.hadoop.hive.metastore.api.ResourceType;
-import org.apache.hadoop.hive.metastore.api.ResourceUri;
-import org.apache.hadoop.hive.metastore.api.Role;
-import org.apache.hadoop.hive.metastore.api.RolePrincipalGrant;
-import org.apache.hadoop.hive.metastore.api.SerDeInfo;
-import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
-import org.apache.hadoop.hive.metastore.api.StringColumnStatsData;
-import org.apache.hadoop.hive.metastore.api.Table;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Integration tests with HBase Mini-cluster for HBaseStore
- */
-public class TestHBaseStoreIntegration extends HBaseIntegrationTests {
-
-  private static final Logger LOG = LoggerFactory.getLogger(TestHBaseStoreIntegration.class.getName());
-
-  @Rule public ExpectedException thrown = ExpectedException.none();
-
-  @BeforeClass
-  public static void startup() throws Exception {
-    HBaseIntegrationTests.startMiniCluster();
-  }
-
-  @AfterClass
-  public static void shutdown() throws Exception {
-    HBaseIntegrationTests.shutdownMiniCluster();
-  }
-
-  @Before
-  public void setup() throws IOException {
-    setupConnection();
-    setupHBaseStore();
-  }
-
-  @Test
-  public void createDb() throws Exception {
-    String dbname = "mydb";
-    Database db = new Database(dbname, "no description", "file:///tmp", emptyParameters);
-    store.createDatabase(db);
-
-    Database d = store.getDatabase("mydb");
-    Assert.assertEquals(dbname, d.getName());
-    Assert.assertEquals("no description", d.getDescription());
-    Assert.assertEquals("file:///tmp", d.getLocationUri());
-  }
-
-  @Test
-  public void dropDb() throws Exception {
-    String dbname = "anotherdb";
-    Database db = new Database(dbname, "no description", "file:///tmp", emptyParameters);
-    store.createDatabase(db);
-
-    Database d = store.getDatabase(dbname);
-    Assert.assertNotNull(d);
-
-    store.dropDatabase(dbname);
-    thrown.expect(NoSuchObjectException.class);
-    store.getDatabase(dbname);
-  }
-
-  @Test
-  public void getAllDbs() throws Exception {
-    String[] dbNames = new String[3];
-    for (int i = 0; i < dbNames.length; i++) {
-      dbNames[i] = "db" + i;
-      Database db = new Database(dbNames[i], "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-    }
-
-    List<String> dbs = store.getAllDatabases();
-    Assert.assertEquals(3, dbs.size());
-    String[] namesFromStore = dbs.toArray(new String[3]);
-    Arrays.sort(namesFromStore);
-    Assert.assertArrayEquals(dbNames, namesFromStore);
-  }
-
-  @Test
-  public void getDbsRegex() throws Exception {
-    String[] dbNames = new String[3];
-    for (int i = 0; i < dbNames.length; i++) {
-      dbNames[i] = "db" + i;
-      Database db = new Database(dbNames[i], "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-    }
-
-    List<String> dbs = store.getDatabases("db1|db2");
-    Assert.assertEquals(2, dbs.size());
-    String[] namesFromStore = dbs.toArray(new String[2]);
-    Arrays.sort(namesFromStore);
-    Assert.assertArrayEquals(Arrays.copyOfRange(dbNames, 1, 3), namesFromStore);
-
-    dbs = store.getDatabases("db*");
-    Assert.assertEquals(3, dbs.size());
-    namesFromStore = dbs.toArray(new String[3]);
-    Arrays.sort(namesFromStore);
-    Assert.assertArrayEquals(dbNames, namesFromStore);
-  }
-
-  @Test
-  public void getFuncsRegex() throws Exception {
-    String dbname = "default";
-    int now = (int)(System.currentTimeMillis()/1000);
-    String[] funcNames = new String[3];
-    for (int i = 0; i < funcNames.length; i++) {
-      funcNames[i] = "func" + i;
-      store.createFunction(new Function(funcNames[i], dbname, "o.a.h.h.myfunc", "me",
-                                        PrincipalType.USER, now, FunctionType.JAVA,
-                                        Arrays.asList(new ResourceUri(ResourceType.JAR,
-                                        "file:/tmp/somewhere"))));
-    }
-
-    List<String> funcs = store.getFunctions(dbname, "func1|func2");
-    Assert.assertEquals(2, funcs.size());
-    String[] namesFromStore = funcs.toArray(new String[2]);
-    Arrays.sort(namesFromStore);
-    Assert.assertArrayEquals(Arrays.copyOfRange(funcNames, 1, 3), namesFromStore);
-
-    funcs = store.getFunctions(dbname, "func*");
-    Assert.assertEquals(3, funcs.size());
-    namesFromStore = funcs.toArray(new String[3]);
-    Arrays.sort(namesFromStore);
-    Assert.assertArrayEquals(funcNames, namesFromStore);
-
-    funcs = store.getFunctions("nosuchdb", "func*");
-    Assert.assertEquals(0, funcs.size());
-  }
-
-  @Test
-  public void createTable() throws Exception {
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    Table table = new Table("mytable", "default", "me", startTime, startTime, 0, sd, null,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    Table t = store.getTable("default", "mytable");
-    Assert.assertEquals(1, t.getSd().getColsSize());
-    Assert.assertEquals("col1", t.getSd().getCols().get(0).getName());
-    Assert.assertEquals("int", t.getSd().getCols().get(0).getType());
-    Assert.assertEquals("nocomment", t.getSd().getCols().get(0).getComment());
-    Assert.assertEquals("serde", t.getSd().getSerdeInfo().getName());
-    Assert.assertEquals("seriallib", t.getSd().getSerdeInfo().getSerializationLib());
-    Assert.assertEquals("file:/tmp", t.getSd().getLocation());
-    Assert.assertEquals("input", t.getSd().getInputFormat());
-    Assert.assertEquals("output", t.getSd().getOutputFormat());
-    Assert.assertEquals("me", t.getOwner());
-    Assert.assertEquals("default", t.getDbName());
-    Assert.assertEquals("mytable", t.getTableName());
-  }
-
-  @Test
-  public void alterTable() throws Exception {
-    String tableName = "alttable";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    Table table = new Table(tableName, "default", "me", startTime, startTime, 0, sd, null,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    startTime += 10;
-    table.setLastAccessTime(startTime);
-    LOG.debug("XXX alter table test");
-    store.alterTable("default", tableName, table);
-
-    Table t = store.getTable("default", tableName);
-    LOG.debug("Alter table time " + t.getLastAccessTime());
-    Assert.assertEquals(1, t.getSd().getColsSize());
-    Assert.assertEquals("col1", t.getSd().getCols().get(0).getName());
-    Assert.assertEquals("int", t.getSd().getCols().get(0).getType());
-    Assert.assertEquals("nocomment", t.getSd().getCols().get(0).getComment());
-    Assert.assertEquals("serde", t.getSd().getSerdeInfo().getName());
-    Assert.assertEquals("seriallib", t.getSd().getSerdeInfo().getSerializationLib());
-    Assert.assertEquals("file:/tmp", t.getSd().getLocation());
-    Assert.assertEquals("input", t.getSd().getInputFormat());
-    Assert.assertEquals("output", t.getSd().getOutputFormat());
-    Assert.assertEquals("me", t.getOwner());
-    Assert.assertEquals("default", t.getDbName());
-    Assert.assertEquals(tableName, t.getTableName());
-    Assert.assertEquals(startTime, t.getLastAccessTime());
-  }
-
-  @Test
-  public void getAllTables() throws Exception {
-    String dbNames[] = new String[]{"db0", "db1"}; // named to match getAllDbs so we get the
-    // right number of databases in that test.
-    String tableNames[] = new String[]{"curly", "larry", "moe"};
-
-    for (int i = 0; i < dbNames.length; i++) {
-      store.createDatabase(new Database(dbNames[i], "no description", "file:///tmp",
-          emptyParameters));
-    }
-
-    for (int i = 0; i < dbNames.length; i++) {
-      for (int j = 0; j < tableNames.length; j++) {
-        int startTime = (int) (System.currentTimeMillis() / 1000);
-        List<FieldSchema> cols = new ArrayList<FieldSchema>();
-        cols.add(new FieldSchema("col1", "int", "nocomment"));
-        SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-        StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false,
-            0,
-            serde, null, null, emptyParameters);
-        Table table = new Table(tableNames[j], dbNames[i], "me", startTime, startTime, 0, sd,
-            null,
-            emptyParameters, null, null, null);
-        store.createTable(table);
-      }
-    }
-
-    List<String> fetchedNames = store.getAllTables(dbNames[0]);
-    Assert.assertEquals(3, fetchedNames.size());
-    String[] sortedFetchedNames = fetchedNames.toArray(new String[fetchedNames.size()]);
-    Arrays.sort(sortedFetchedNames);
-    Assert.assertArrayEquals(tableNames, sortedFetchedNames);
-
-    List<String> regexNames = store.getTables(dbNames[0], "*y");
-    Assert.assertEquals(2, regexNames.size());
-    String[] sortedRegexNames = regexNames.toArray(new String[regexNames.size()]);
-    Arrays.sort(sortedRegexNames);
-    Assert.assertArrayEquals(Arrays.copyOfRange(tableNames, 0, 2), sortedRegexNames);
-
-    List<Table> fetchedTables = store.getTableObjectsByName(dbNames[1],
-        Arrays.asList(Arrays.copyOfRange(tableNames, 1, 3)));
-    Assert.assertEquals(2, fetchedTables.size());
-    sortedFetchedNames = new String[fetchedTables.size()];
-    for (int i = 0; i < fetchedTables.size(); i++) {
-      sortedFetchedNames[i] = fetchedTables.get(i).getTableName();
-    }
-    Arrays.sort(sortedFetchedNames);
-    Assert.assertArrayEquals(Arrays.copyOfRange(tableNames, 1, 3), sortedFetchedNames);
-  }
-
-  @Test
-  public void dropTable() throws Exception {
-    String tableName = "dtable";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    Table table = new Table(tableName, "default", "me", startTime, startTime, 0, sd, null,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    Table t = store.getTable("default", tableName);
-    Assert.assertNotNull(t);
-
-    store.dropTable("default", tableName);
-    Assert.assertNull(store.getTable("default", tableName));
-  }
-
-  @Test
-  public void createPartition() throws Exception {
-    String dbName = "default";
-    String tableName = "myparttable";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    List<String> vals = new ArrayList<String>();
-    vals.add("fred");
-    StorageDescriptor psd = new StorageDescriptor(sd);
-    psd.setLocation("file:/tmp/pc=fred");
-    Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-        emptyParameters);
-    store.addPartition(part);
-
-    Partition p = store.getPartition(dbName, tableName, vals);
-    Assert.assertEquals(1, p.getSd().getColsSize());
-    Assert.assertEquals("col1", p.getSd().getCols().get(0).getName());
-    Assert.assertEquals("int", p.getSd().getCols().get(0).getType());
-    Assert.assertEquals("nocomment", p.getSd().getCols().get(0).getComment());
-    Assert.assertEquals("serde", p.getSd().getSerdeInfo().getName());
-    Assert.assertEquals("seriallib", p.getSd().getSerdeInfo().getSerializationLib());
-    Assert.assertEquals("file:/tmp/pc=fred", p.getSd().getLocation());
-    Assert.assertEquals("input", p.getSd().getInputFormat());
-    Assert.assertEquals("output", p.getSd().getOutputFormat());
-    Assert.assertEquals(dbName, p.getDbName());
-    Assert.assertEquals(tableName, p.getTableName());
-    Assert.assertEquals(1, p.getValuesSize());
-    Assert.assertEquals("fred", p.getValues().get(0));
-  }
-
-  @Test
-  public void addPartitions() throws Exception {
-    String dbName = "default";
-    String tableName = "addParts";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    List<String> partVals = Arrays.asList("alan", "bob", "carl", "doug", "ethan");
-    List<Partition> partitions = new ArrayList<Partition>();
-    for (String val : partVals) {
-      List<String> vals = new ArrayList<String>();
-      vals.add(val);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/pc=" + val);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      partitions.add(part);
-    }
-    store.addPartitions(dbName, tableName, partitions);
-
-    List<String> partNames = store.listPartitionNames(dbName, tableName, (short) -1);
-    Assert.assertEquals(5, partNames.size());
-    String[] names = partNames.toArray(new String[partNames.size()]);
-    Arrays.sort(names);
-    String[] canonicalNames = partVals.toArray(new String[partVals.size()]);
-    for (int i = 0; i < canonicalNames.length; i++) canonicalNames[i] = "pc=" + canonicalNames[i];
-    Assert.assertArrayEquals(canonicalNames, names);
-  }
-
-  @Test
-  public void alterPartitions() throws Exception {
-    String dbName = "default";
-    String tableName = "alterParts";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    List<String> partVals = Arrays.asList("alan", "bob", "carl", "doug", "ethan");
-    List<Partition> partitions = new ArrayList<Partition>();
-    List<List<String>> allVals = new ArrayList<List<String>>();
-    for (String val : partVals) {
-      List<String> vals = new ArrayList<String>();
-      allVals.add(vals);
-      vals.add(val);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/pc=" + val);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      partitions.add(part);
-    }
-    store.addPartitions(dbName, tableName, partitions);
-
-    for (Partition p : partitions) p.setLastAccessTime(startTime + 10);
-    store.alterPartitions(dbName, tableName, allVals, partitions);
-
-    partitions = store.getPartitions(dbName, tableName, -1);
-    for (Partition part : partitions) {
-      Assert.assertEquals(startTime + 10, part.getLastAccessTime());
-    }
-  }
-
-  @Test
-  public void getPartitions() throws Exception {
-    String dbName = "default";
-    String tableName = "manyParts";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    List<String> partVals = Arrays.asList("alan", "bob", "carl", "doug", "ethan");
-    for (String val : partVals) {
-      List<String> vals = new ArrayList<String>();
-      vals.add(val);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/pc=" + val);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      store.addPartition(part);
-
-      Partition p = store.getPartition(dbName, tableName, vals);
-      Assert.assertEquals("file:/tmp/pc=" + val, p.getSd().getLocation());
-    }
-
-    List<Partition> parts = store.getPartitions(dbName, tableName, -1);
-    Assert.assertEquals(5, parts.size());
-    String[] pv = new String[5];
-    for (int i = 0; i < 5; i++) pv[i] = parts.get(i).getValues().get(0);
-    Arrays.sort(pv);
-    Assert.assertArrayEquals(pv, partVals.toArray(new String[5]));
-  }
-
-  @Test
-  public void listPartitions() throws Exception {
-    String dbName = "default";
-    String tableName = "listParts";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    partCols.add(new FieldSchema("region", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    String[][] partVals = new String[][]{{"today", "north america"}, {"tomorrow", "europe"}};
-    for (String[] pv : partVals) {
-      List<String> vals = new ArrayList<String>();
-      for (String v : pv) vals.add(v);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/pc=" + pv[0] + "/region=" + pv[1]);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      store.addPartition(part);
-    }
-
-    List<String> names = store.listPartitionNames(dbName, tableName, (short) -1);
-    Assert.assertEquals(2, names.size());
-    String[] resultNames = names.toArray(new String[names.size()]);
-    Arrays.sort(resultNames);
-    Assert.assertArrayEquals(resultNames, new String[]{"pc=today/region=north america",
-        "pc=tomorrow/region=europe"});
-
-    List<Partition> parts = store.getPartitionsByNames(dbName, tableName, names);
-    Assert.assertArrayEquals(partVals[0], parts.get(0).getValues().toArray(new String[2]));
-    Assert.assertArrayEquals(partVals[1], parts.get(1).getValues().toArray(new String[2]));
-
-    store.dropPartitions(dbName, tableName, names);
-    List<Partition> afterDropParts = store.getPartitions(dbName, tableName, -1);
-    Assert.assertEquals(0, afterDropParts.size());
-  }
-
-  @Test
-  public void listPartitionsWithPs() throws Exception {
-    String dbName = "default";
-    String tableName = "listPartitionsWithPs";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("ds", "string", ""));
-    partCols.add(new FieldSchema("region", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    String[][] partVals = new String[][]{{"today", "north america"}, {"today", "europe"},
-        {"tomorrow", "north america"}, {"tomorrow", "europe"}};
-    for (String[] pv : partVals) {
-      List<String> vals = new ArrayList<String>();
-      for (String v : pv) vals.add(v);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/ds=" + pv[0] + "/region=" + pv[1]);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      store.addPartition(part);
-    }
-
-    // We only test listPartitionNamesPs since it calls listPartitionsPsWithAuth anyway.
-    // Test the case where we completely specify the partition
-    List<String> partitionNames =
-        store.listPartitionNamesPs(dbName, tableName, Arrays.asList(partVals[0]), (short) -1);
-    Assert.assertEquals(1, partitionNames.size());
-    Assert.assertEquals("ds=today/region=north america", partitionNames.get(0));
-
-    // Leave off the last value of the partition
-    partitionNames =
-        store.listPartitionNamesPs(dbName, tableName, Arrays.asList(partVals[0][0]), (short)-1);
-    Assert.assertEquals(2, partitionNames.size());
-    String[] names = partitionNames.toArray(new String[partitionNames.size()]);
-    Arrays.sort(names);
-    Assert.assertArrayEquals(new String[] {"ds=today/region=europe",
-        "ds=today/region=north america"}, names);
-
-    // Put a star in the last value of the partition
-    partitionNames =
-        store.listPartitionNamesPs(dbName, tableName, Arrays.asList("today", "*"), (short)-1);
-    Assert.assertEquals(2, partitionNames.size());
-    names = partitionNames.toArray(new String[partitionNames.size()]);
-    Arrays.sort(names);
-    Assert.assertArrayEquals(new String[] {"ds=today/region=europe",
-        "ds=today/region=north america"}, names);
-
-    // Put a star in the first value of the partition
-    partitionNames =
-        store.listPartitionNamesPs(dbName, tableName, Arrays.asList("*", "europe"), (short)-1);
-    Assert.assertEquals(2, partitionNames.size());
-    names = partitionNames.toArray(new String[partitionNames.size()]);
-    Arrays.sort(names);
-    Assert.assertArrayEquals(new String[] {"ds=today/region=europe",
-        "ds=tomorrow/region=europe"}, names);
-  }
-
-
-  @Test
-  public void getPartitionsByFilter() throws Exception {
-    String dbName = "default";
-    String tableName = "getPartitionsByFilter";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("ds", "string", ""));
-    partCols.add(new FieldSchema("region", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    String[][] partVals = new String[][]{{"20010101", "north america"}, {"20010101", "europe"},
-        {"20010102", "north america"}, {"20010102", "europe"}, {"20010103", "north america"}};
-    for (String[] pv : partVals) {
-      List<String> vals = new ArrayList<String>();
-      for (String v : pv) vals.add(v);
-      StorageDescriptor psd = new StorageDescriptor(sd);
-      psd.setLocation("file:/tmp/ds=" + pv[0] + "/region=" + pv[1]);
-      Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-          emptyParameters);
-      store.addPartition(part);
-    }
-
-    // We only test getPartitionsByFilter since it calls same code as getPartitionsByExpr anyway.
-    // Test the case where we completely specify the partition
-    List<Partition> parts = null;
-    parts = store.getPartitionsByFilter(dbName, tableName, "ds > '20010101'", (short) -1);
-    checkPartVals(parts, "[20010102, north america]", "[20010102, europe]",
-        "[20010103, north america]");
-
-    parts = store.getPartitionsByFilter(dbName, tableName, "ds >= '20010102'", (short) -1);
-    checkPartVals(parts, "[20010102, north america]", "[20010102, europe]",
-        "[20010103, north america]");
-
-    parts = store.getPartitionsByFilter(dbName, tableName,
-        "ds >= '20010102' and region = 'europe' ", (short) -1);
-    // filtering on first partition is only implemented as of now, so it will
-    // not filter on region
-    checkPartVals(parts, "[20010102, north america]", "[20010102, europe]",
-        "[20010103, north america]");
-
-    parts = store.getPartitionsByFilter(dbName, tableName,
-        "ds >= '20010101' and ds < '20010102'", (short) -1);
-    checkPartVals(parts,"[20010101, north america]", "[20010101, europe]");
-
-    parts = store.getPartitionsByFilter(dbName, tableName,
-        "ds = '20010102' or ds < '20010103'", (short) -1);
-    checkPartVals(parts, "[20010101, north america]", "[20010101, europe]",
-        "[20010102, north america]", "[20010102, europe]");
-
-    // test conversion to DNF
-    parts = store.getPartitionsByFilter(dbName, tableName,
-        "ds = '20010102' and (ds = '20010102' or region = 'europe')", (short) -1);
-    // filtering on first partition is only implemented as of now, so it will not filter on region
-    checkPartVals(parts, "[20010102, north america]", "[20010102, europe]");
-
-    parts = store.getPartitionsByFilter(dbName, tableName,
-        "region = 'europe'", (short) -1);
-    // filtering on first partition is only implemented as of now, so it will not filter on region
-    checkPartVals(parts, "[20010101, north america]", "[20010101, europe]",
-        "[20010102, north america]", "[20010102, europe]", "[20010103, north america]");
-
-  }
-
-  /**
-   * Check if the given partitions have same values as given partitions value strings
-   * @param parts given partitions
-   * @param expectedPartVals
-   */
-  private void checkPartVals(List<Partition> parts, String ... expectedPartVals) {
-    Assert.assertEquals("number of partitions", expectedPartVals.length, parts.size());
-    Set<String> partValStrings = new TreeSet<String>();
-    for(Partition part : parts) {
-      partValStrings.add(part.getValues().toString());
-    }
-    partValStrings.equals(new TreeSet(Arrays.asList(expectedPartVals)));
-  }
-
-  @Test
-  public void dropPartition() throws Exception {
-    String dbName = "default";
-    String tableName = "myparttable2";
-    int startTime = (int)(System.currentTimeMillis() / 1000);
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema("col1", "int", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("pc", "string", ""));
-    Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    List<String> vals = Arrays.asList("fred");
-    StorageDescriptor psd = new StorageDescriptor(sd);
-    psd.setLocation("file:/tmp/pc=fred");
-    Partition part = new Partition(vals, dbName, tableName, startTime, startTime, psd,
-        emptyParameters);
-    store.addPartition(part);
-
-    Assert.assertNotNull(store.getPartition(dbName, tableName, vals));
-    store.dropPartition(dbName, tableName, vals);
-    thrown.expect(NoSuchObjectException.class);
-    store.getPartition(dbName, tableName, vals);
-  }
-
-  @Test
-  public void createRole() throws Exception {
-    int now = (int)System.currentTimeMillis()/1000;
-    String roleName = "myrole";
-    store.addRole(roleName, "me");
-
-    Role r = store.getRole(roleName);
-    Assert.assertEquals(roleName, r.getRoleName());
-    Assert.assertEquals("me", r.getOwnerName());
-    Assert.assertTrue(now <= r.getCreateTime());
-  }
-
-  @Test
-  public void dropRole() throws Exception {
-    String roleName = "anotherrole";
-    store.addRole(roleName, "me");
-
-    Role r = store.getRole(roleName);
-    Assert.assertEquals(roleName, r.getRoleName());
-
-    store.removeRole(roleName);
-    thrown.expect(NoSuchObjectException.class);
-    store.getRole(roleName);
-  }
-
-  @Test
-  public void grantRevokeRoles() throws Exception {
-    int now = (int)(System.currentTimeMillis()/1000);
-    String roleName1 = "role1";
-    store.addRole(roleName1, "me");
-    String roleName2 = "role2";
-    store.addRole(roleName2, "me");
-
-    Role role1 = store.getRole(roleName1);
-    Role role2 = store.getRole(roleName2);
-
-    store.grantRole(role1, "fred", PrincipalType.USER, "bob", PrincipalType.USER, false);
-    store.grantRole(role2, roleName1, PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-    store.grantRole(role2, "fred", PrincipalType.USER, "admin", PrincipalType.ROLE, false);
-
-    List<Role> roles = store.listRoles("fred", PrincipalType.USER);
-    Assert.assertEquals(3, roles.size());
-    boolean sawRole1 = false, sawRole2 = false, sawPublic = false;
-    for (Role role : roles) {
-      if (role.getRoleName().equals(roleName1)) {
-        sawRole1 = true;
-      } else if (role.getRoleName().equals(roleName2)) {
-        sawRole2 = true;
-      } else if (role.getRoleName().equals(HiveMetaStore.PUBLIC)) {
-        sawPublic = true;
-      } else {
-        Assert.fail("Unknown role name " + role.getRoleName());
-      }
-    }
-    Assert.assertTrue(sawRole1 && sawRole2 && sawPublic);
-
-    roles = store.listRoles("fred", PrincipalType.ROLE);
-    Assert.assertEquals(0, roles.size());
-
-    roles = store.listRoles(roleName1, PrincipalType.ROLE);
-    Assert.assertEquals(1, roles.size());
-    Role role = roles.get(0);
-    Assert.assertEquals(roleName2, role.getRoleName());
-
-    // Test listing all members in a role
-    List<RolePrincipalGrant> grants = store.listRoleMembers(roleName1);
-    Assert.assertEquals(1, grants.size());
-    Assert.assertEquals("fred", grants.get(0).getPrincipalName());
-    Assert.assertEquals(PrincipalType.USER, grants.get(0).getPrincipalType());
-    Assert.assertTrue("Expected grant time of " + now + " got " + grants.get(0).getGrantTime(),
-        grants.get(0).getGrantTime() >= now);
-    Assert.assertEquals("bob", grants.get(0).getGrantorName());
-    Assert.assertEquals(PrincipalType.USER, grants.get(0).getGrantorPrincipalType());
-    Assert.assertFalse(grants.get(0).isGrantOption());
-
-    grants = store.listRoleMembers(roleName2);
-    Assert.assertEquals(2, grants.size());
-    boolean sawFred = false;
-    sawRole1 = false;
-    for (RolePrincipalGrant m : grants) {
-      if ("fred".equals(m.getPrincipalName())) sawFred = true;
-      else if (roleName1.equals(m.getPrincipalName())) sawRole1 = true;
-      else Assert.fail("Unexpected principal " + m.getPrincipalName());
-    }
-    Assert.assertTrue(sawFred && sawRole1);
-
-    // Revoke a role with grant option, make sure it just goes to no grant option
-    store.revokeRole(role2, roleName1, PrincipalType.ROLE, true);
-    roles = store.listRoles(roleName1, PrincipalType.ROLE);
-    Assert.assertEquals(1, roles.size());
-    Assert.assertEquals(roleName2, roles.get(0).getRoleName());
-
-    grants = store.listRoleMembers(roleName1);
-    Assert.assertFalse(grants.get(0).isGrantOption());
-
-    // Drop a role, make sure it is properly removed from the map
-    store.removeRole(roleName1);
-    roles = store.listRoles("fred", PrincipalType.USER);
-    Assert.assertEquals(2, roles.size());
-    sawRole2 = sawPublic = false;
-    for (Role m : roles) {
-      if (m.getRoleName().equals(roleName2)) sawRole2 = true;
-      else if (m.getRoleName().equals(HiveMetaStore.PUBLIC)) sawPublic = true;
-      else Assert.fail("Unknown role " + m.getRoleName());
-    }
-    Assert.assertTrue(sawRole2 && sawPublic);
-    roles = store.listRoles(roleName1, PrincipalType.ROLE);
-    Assert.assertEquals(0, roles.size());
-
-    // Revoke a role without grant option, make sure it goes away
-    store.revokeRole(role2, "fred", PrincipalType.USER, false);
-    roles = store.listRoles("fred", PrincipalType.USER);
-    Assert.assertEquals(1, roles.size());
-    Assert.assertEquals(HiveMetaStore.PUBLIC, roles.get(0).getRoleName());
-  }
-
-  @Test
-  public void userToRoleMap() throws Exception {
-    String roleName1 = "utrm1";
-    store.addRole(roleName1, "me");
-    String roleName2 = "utrm2";
-    store.addRole(roleName2, "me");
-    String user1 = "wilma";
-    String user2 = "betty";
-
-    Role role1 = store.getRole(roleName1);
-    Role role2 = store.getRole(roleName2);
-
-    store.grantRole(role1, user1, PrincipalType.USER, "bob", PrincipalType.USER, false);
-    store.grantRole(role1, roleName2, PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-
-    List<String> roles = HBaseReadWrite.getInstance().getUserRoles(user1);
-    Assert.assertEquals(2, roles.size());
-    String[] roleNames = roles.toArray(new String[roles.size()]);
-    Arrays.sort(roleNames);
-    Assert.assertArrayEquals(new String[]{roleName1, roleName2}, roleNames);
-
-    store.grantRole(role2, user1, PrincipalType.USER, "admin", PrincipalType.ROLE, false);
-    store.grantRole(role1, user2, PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-    HBaseReadWrite.setConf(conf);
-    roles = HBaseReadWrite.getInstance().getUserRoles(user2);
-    Assert.assertEquals(2, roles.size());
-    roleNames = roles.toArray(new String[roles.size()]);
-    Arrays.sort(roleNames);
-    Assert.assertArrayEquals(new String[]{roleName1, roleName2}, roleNames);
-
-    store.revokeRole(role1, roleName2, PrincipalType.ROLE, false);
-
-    // user1 should still have both roles since she was granted into role1 specifically.  user2
-    // should only have role2 now since role2 was revoked from role1.
-    roles = HBaseReadWrite.getInstance().getUserRoles(user1);
-    Assert.assertEquals(2, roles.size());
-    roleNames = roles.toArray(new String[roles.size()]);
-    Arrays.sort(roleNames);
-    Assert.assertArrayEquals(new String[]{roleName1, roleName2}, roleNames);
-
-    roles = HBaseReadWrite.getInstance().getUserRoles(user2);
-    Assert.assertEquals(1, roles.size());
-    Assert.assertEquals(roleName1, roles.get(0));
-  }
-
-  @Test
-  public void userToRoleMapOnDrop() throws Exception {
-    String roleName1 = "utrmod1";
-    store.addRole(roleName1, "me");
-    String roleName2 = "utrmod2";
-    store.addRole(roleName2, "me");
-    String user1 = "pebbles";
-    String user2 = "bam-bam";
-
-    Role role1 = store.getRole(roleName1);
-    Role role2 = store.getRole(roleName2);
-
-    store.grantRole(role1, user1, PrincipalType.USER, "bob", PrincipalType.USER, false);
-    store.grantRole(role1, roleName2, PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-    store.grantRole(role1, user2, PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-    List<String> roles = HBaseReadWrite.getInstance().getUserRoles(user2);
-    Assert.assertEquals(2, roles.size());
-    String[] roleNames = roles.toArray(new String[roles.size()]);
-    Arrays.sort(roleNames);
-    Assert.assertArrayEquals(new String[]{roleName1, roleName2}, roleNames);
-
-    store.removeRole(roleName2);
-
-    HBaseReadWrite.setConf(conf);
-    roles = HBaseReadWrite.getInstance().getUserRoles(user1);
-    Assert.assertEquals(1, roles.size());
-    Assert.assertEquals(roleName1, roles.get(0));
-
-    roles = HBaseReadWrite.getInstance().getUserRoles(user2);
-    Assert.assertEquals(1, roles.size());
-    Assert.assertEquals(roleName1, roles.get(0));
-  }
-
-  @Test
-  public void grantRevokeGlobalPrivileges() throws Exception {
-    doGrantRevoke(HiveObjectType.GLOBAL, null, null, new String[] {"grpg1", "grpg2"},
-        new String[] {"bugs", "elmer", "daphy", "wiley"});
-  }
-
-  @Test
-  public void grantRevokeDbPrivileges() throws Exception {
-    String dbName = "grdbp_db";
-    try {
-      Database db = new Database(dbName, "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-      doGrantRevoke(HiveObjectType.DATABASE, dbName, null,
-          new String[] {"grdbp_role1", "grdbp_role2"},
-          new String[] {"fred", "barney", "wilma", "betty"});
-    } finally {
-      store.dropDatabase(dbName);
-    }
-  }
-
-  @Test
-  public void grantRevokeTablePrivileges() throws Exception {
-    String dbName = "grtp_db";
-    String tableName = "grtp_table";
-    try {
-      Database db = new Database(dbName, "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-      int startTime = (int)(System.currentTimeMillis() / 1000);
-      List<FieldSchema> cols = new ArrayList<FieldSchema>();
-      cols.add(new FieldSchema("col1", "int", "nocomment"));
-      SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-      StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-          serde, null, null, emptyParameters);
-      Table table = new Table(tableName, dbName, "me", startTime, startTime, 0, sd, null,
-          emptyParameters, null, null, null);
-      store.createTable(table);
-      doGrantRevoke(HiveObjectType.TABLE, dbName, tableName,
-          new String[] {"grtp_role1", "grtp_role2"},
-          new String[] {"batman", "robin", "superman", "wonderwoman"});
-
-    } finally {
-      if (store.getTable(dbName, tableName) != null) store.dropTable(dbName, tableName);
-      store.dropDatabase(dbName);
-    }
-  }
-
-  private void doGrantRevoke(HiveObjectType objectType, String dbName, String tableName,
-                             String[] roleNames, String[] userNames)
-      throws Exception {
-    store.addRole(roleNames[0], "me");
-    store.addRole(roleNames[1], "me");
-    int now = (int)(System.currentTimeMillis() / 1000);
-
-    Role role1 = store.getRole(roleNames[0]);
-    Role role2 = store.getRole(roleNames[1]);
-    store.grantRole(role1, userNames[0], PrincipalType.USER, "bob", PrincipalType.USER, false);
-    store.grantRole(role1, roleNames[1], PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-    store.grantRole(role2, userNames[1], PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-    List<HiveObjectPrivilege> privileges = new ArrayList<HiveObjectPrivilege>();
-    HiveObjectRef hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    PrivilegeGrantInfo grantInfo =
-        new PrivilegeGrantInfo("read", now, "me", PrincipalType.USER, false);
-    HiveObjectPrivilege hop = new HiveObjectPrivilege(hiveObjRef, userNames[0], PrincipalType.USER,
-        grantInfo);
-    privileges.add(hop);
-
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("write", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, roleNames[0], PrincipalType.ROLE, grantInfo);
-    privileges.add(hop);
-
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("exec", now, "me", PrincipalType.USER, false);
-    hop = new HiveObjectPrivilege(hiveObjRef, roleNames[1], PrincipalType.ROLE, grantInfo);
-    privileges.add(hop);
-
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("create", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, userNames[2], PrincipalType.USER, grantInfo);
-    privileges.add(hop);
-
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("create2", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, userNames[2], PrincipalType.USER, grantInfo);
-    privileges.add(hop);
-
-    PrivilegeBag pBag = new PrivilegeBag(privileges);
-    store.grantPrivileges(pBag);
-
-    PrincipalPrivilegeSet pps = getPPS(objectType, dbName, tableName, userNames[0]);
-
-    Assert.assertEquals(1, pps.getUserPrivilegesSize());
-    Assert.assertEquals(1, pps.getUserPrivileges().get(userNames[0]).size());
-    grantInfo = pps.getUserPrivileges().get(userNames[0]).get(0);
-    Assert.assertEquals("read", grantInfo.getPrivilege());
-    Assert.assertTrue(now <= grantInfo.getCreateTime());
-    Assert.assertEquals("me", grantInfo.getGrantor());
-    Assert.assertEquals(PrincipalType.USER, grantInfo.getGrantorType());
-    Assert.assertFalse(grantInfo.isGrantOption());
-
-    Assert.assertEquals(2, pps.getRolePrivilegesSize());
-    Assert.assertEquals(1, pps.getRolePrivileges().get(roleNames[0]).size());
-    grantInfo = pps.getRolePrivileges().get(roleNames[0]).get(0);
-    Assert.assertEquals("write", grantInfo.getPrivilege());
-    Assert.assertTrue(now <= grantInfo.getCreateTime());
-    Assert.assertEquals("me", grantInfo.getGrantor());
-    Assert.assertEquals(PrincipalType.USER, grantInfo.getGrantorType());
-    Assert.assertTrue(grantInfo.isGrantOption());
-
-    Assert.assertEquals(1, pps.getRolePrivileges().get(roleNames[1]).size());
-    grantInfo = pps.getRolePrivileges().get(roleNames[1]).get(0);
-    Assert.assertEquals("exec", grantInfo.getPrivilege());
-    Assert.assertTrue(now <= grantInfo.getCreateTime());
-    Assert.assertEquals("me", grantInfo.getGrantor());
-    Assert.assertEquals(PrincipalType.USER, grantInfo.getGrantorType());
-    Assert.assertFalse(grantInfo.isGrantOption());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[1]);
-
-    Assert.assertEquals(0, pps.getUserPrivilegesSize());
-
-    Assert.assertEquals(1, pps.getRolePrivilegesSize());
-    Assert.assertEquals(1, pps.getRolePrivileges().get(roleNames[1]).size());
-    grantInfo = pps.getRolePrivileges().get(roleNames[1]).get(0);
-    Assert.assertEquals("exec", grantInfo.getPrivilege());
-    Assert.assertTrue(now <= grantInfo.getCreateTime());
-    Assert.assertEquals("me", grantInfo.getGrantor());
-    Assert.assertEquals(PrincipalType.USER, grantInfo.getGrantorType());
-    Assert.assertFalse(grantInfo.isGrantOption());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[2]);
-
-    Assert.assertEquals(1, pps.getUserPrivilegesSize());
-    Assert.assertEquals(2, pps.getUserPrivileges().get(userNames[2]).size());
-    Assert.assertEquals(0, pps.getRolePrivilegesSize());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[3]);
-    Assert.assertEquals(0, pps.getUserPrivilegesSize());
-    Assert.assertEquals(0, pps.getRolePrivilegesSize());
-
-    // Test that removing role removes the role grants
-    store.removeRole(roleNames[1]);
-    checkRoleRemovedFromAllPrivileges(objectType, dbName, tableName, roleNames[1]);
-    pps = getPPS(objectType, dbName, tableName, userNames[0]);
-
-    Assert.assertEquals(1, pps.getRolePrivilegesSize());
-    Assert.assertEquals(1, pps.getRolePrivileges().get(roleNames[0]).size());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[1]);
-
-    Assert.assertEquals(0, pps.getRolePrivilegesSize());
-
-    // Test that revoking with grant option = true just removes grant option
-    privileges.clear();
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("write", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, roleNames[0], PrincipalType.ROLE, grantInfo);
-    privileges.add(hop);
-
-    hiveObjRef = new HiveObjectRef(objectType, dbName, tableName, null, null);
-    grantInfo = new PrivilegeGrantInfo("create2", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, userNames[2], PrincipalType.USER, grantInfo);
-    privileges.add(hop);
-
-    pBag = new PrivilegeBag(privileges);
-    store.revokePrivileges(pBag, true);
-    pps = getPPS(objectType, dbName, tableName, userNames[0]);
-
-    Assert.assertEquals(1, pps.getRolePrivilegesSize());
-    Assert.assertEquals(1, pps.getRolePrivileges().get(roleNames[0]).size());
-    grantInfo = pps.getRolePrivileges().get(roleNames[0]).get(0);
-    Assert.assertEquals("write", grantInfo.getPrivilege());
-    Assert.assertTrue(now <= grantInfo.getCreateTime());
-    Assert.assertEquals("me", grantInfo.getGrantor());
-    Assert.assertEquals(PrincipalType.USER, grantInfo.getGrantorType());
-    Assert.assertFalse(grantInfo.isGrantOption());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[2]);
-
-    Assert.assertEquals(1, pps.getUserPrivilegesSize());
-    Assert.assertEquals(2, pps.getUserPrivileges().get(userNames[2]).size());
-    for (PrivilegeGrantInfo pgi : pps.getUserPrivileges().get(userNames[2])) {
-      if (pgi.getPrivilege().equals("create")) Assert.assertTrue(pgi.isGrantOption());
-      else if (pgi.getPrivilege().equals("create2")) Assert.assertFalse(pgi.isGrantOption());
-      else Assert.fail("huh?");
-    }
-
-    // Test revoking revokes
-    store.revokePrivileges(pBag, false);
-
-    pps = getPPS(objectType, dbName, tableName, userNames[0]);
-
-    Assert.assertEquals(1, pps.getUserPrivilegesSize());
-    Assert.assertEquals(1, pps.getRolePrivilegesSize());
-    Assert.assertEquals(0, pps.getRolePrivileges().get(roleNames[0]).size());
-
-    pps = getPPS(objectType, dbName, tableName, userNames[2]);
-    Assert.assertEquals(1, pps.getUserPrivilegesSize());
-    Assert.assertEquals(1, pps.getUserPrivileges().get(userNames[2]).size());
-    Assert.assertEquals("create", pps.getUserPrivileges().get(userNames[2]).get(0).getPrivilege());
-    Assert.assertEquals(0, pps.getRolePrivilegesSize());
-  }
-
-  private PrincipalPrivilegeSet getPPS(HiveObjectType objectType, String dbName, String tableName,
-                                       String userName)
-      throws InvalidObjectException, MetaException {
-    switch (objectType) {
-      case GLOBAL: return store.getUserPrivilegeSet(userName, null);
-      case DATABASE: return store.getDBPrivilegeSet(dbName, userName, null);
-      case TABLE: return store.getTablePrivilegeSet(dbName, tableName, userName, null);
-      default: throw new RuntimeException("huh?");
-    }
-  }
-
-  private void checkRoleRemovedFromAllPrivileges(HiveObjectType objectType, String dbName,
-                                                 String tableName, String roleName)
-      throws IOException, NoSuchObjectException, MetaException {
-    List<PrivilegeGrantInfo> pgi = null;
-    switch (objectType) {
-      case GLOBAL:
-        pgi = HBaseReadWrite.getInstance().getGlobalPrivs().getRolePrivileges().get(roleName);
-        break;
-
-      case DATABASE:
-        pgi = store.getDatabase(dbName).getPrivileges().getRolePrivileges().get(roleName);
-        break;
-
-      case TABLE:
-        pgi = store.getTable(dbName, tableName).getPrivileges().getRolePrivileges().get(roleName);
-        break;
-
-      default:
-        Assert.fail();
-    }
-
-    Assert.assertNull("Expected null for role " + roleName + " for type " + objectType.toString()
-      + " with db " + dbName + " and table " + tableName, pgi);
-  }
-
-  @Test
-  public void listDbGrants() throws Exception {
-    String dbNames[] = new String[] {"ldbg_db1", "ldbg_db2"};
-    try {
-      Database db = new Database(dbNames[0], "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-      db = new Database(dbNames[1], "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-      String[] roleNames = new String[]{"ldbg_role1", "ldbg_role2"};
-      String[] userNames = new String[]{"frodo", "sam"};
-
-      store.addRole(roleNames[0], "me");
-      store.addRole(roleNames[1], "me");
-      int now = (int)(System.currentTimeMillis() / 1000);
-
-      Role role1 = store.getRole(roleNames[0]);
-      Role role2 = store.getRole(roleNames[1]);
-      store.grantRole(role1, userNames[0], PrincipalType.USER, "bob", PrincipalType.USER, false);
-      store.grantRole(role1, roleNames[1], PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-      store.grantRole(role2, userNames[1], PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-      List<HiveObjectPrivilege> privileges = new ArrayList<HiveObjectPrivilege>();
-      HiveObjectRef hiveObjRef =
-          new HiveObjectRef(HiveObjectType.DATABASE, dbNames[0], null, null, null);
-      PrivilegeGrantInfo grantInfo =
-          new PrivilegeGrantInfo("read", now, "me", PrincipalType.USER, false);
-      HiveObjectPrivilege hop = new HiveObjectPrivilege(hiveObjRef, userNames[0], PrincipalType.USER,
-          grantInfo);
-      privileges.add(hop);
-
-      grantInfo = new PrivilegeGrantInfo("write", now, "me", PrincipalType.USER, true);
-      hop = new HiveObjectPrivilege(hiveObjRef, roleNames[0], PrincipalType.ROLE, grantInfo);
-      privileges.add(hop);
-
-      PrivilegeBag pBag = new PrivilegeBag(privileges);
-      store.grantPrivileges(pBag);
-
-      List<HiveObjectPrivilege> hops =
-          store.listPrincipalDBGrants(roleNames[0], PrincipalType.ROLE, dbNames[0]);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.ROLE, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.DATABASE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("write", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalDBGrants(userNames[0], PrincipalType.USER, dbNames[0]);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.USER, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.DATABASE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("read", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalDBGrants(roleNames[1], PrincipalType.ROLE, dbNames[0]);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listPrincipalDBGrants(userNames[1], PrincipalType.USER, dbNames[0]);
-      Assert.assertEquals(0, hops.size());
-
-      hops = store.listPrincipalDBGrants(roleNames[0], PrincipalType.ROLE, dbNames[1]);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listPrincipalDBGrants(userNames[0], PrincipalType.USER, dbNames[1]);
-      Assert.assertEquals(0, hops.size());
-
-      hops = store.listDBGrantsAll(dbNames[0]);
-      Assert.assertEquals(2, hops.size());
-      boolean sawUser = false, sawRole = false;
-      for (HiveObjectPrivilege h : hops) {
-        if (h.getPrincipalName().equals(userNames[0])) {
-          Assert.assertEquals(PrincipalType.USER, h.getPrincipalType());
-          Assert.assertEquals(HiveObjectType.DATABASE, h.getHiveObject().getObjectType());
-          Assert.assertEquals("read", h.getGrantInfo().getPrivilege());
-          sawUser = true;
-        } else if (h.getPrincipalName().equals(roleNames[0])) {
-          Assert.assertEquals(PrincipalType.ROLE, h.getPrincipalType());
-          Assert.assertEquals(HiveObjectType.DATABASE, h.getHiveObject().getObjectType());
-          Assert.assertEquals("write", h.getGrantInfo().getPrivilege());
-          sawRole = true;
-        }
-      }
-      Assert.assertTrue(sawUser && sawRole);
-
-      hops = store.listPrincipalDBGrantsAll(roleNames[0], PrincipalType.ROLE);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.ROLE, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.DATABASE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("write", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalDBGrantsAll(userNames[0], PrincipalType.USER);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.USER, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.DATABASE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("read", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalDBGrantsAll(roleNames[1], PrincipalType.ROLE);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listPrincipalDBGrantsAll(userNames[1], PrincipalType.USER);
-      Assert.assertEquals(0, hops.size());
-
-
-    } finally {
-      store.dropDatabase(dbNames[0]);
-      store.dropDatabase(dbNames[1]);
-    }
-  }
-
-  @Test
-  public void listGlobalGrants() throws Exception {
-    String[] roleNames = new String[]{"lgg_role1", "lgg_role2"};
-    String[] userNames = new String[]{"merry", "pippen"};
-
-    store.addRole(roleNames[0], "me");
-    store.addRole(roleNames[1], "me");
-    int now = (int)(System.currentTimeMillis() / 1000);
-
-    Role role1 = store.getRole(roleNames[0]);
-    Role role2 = store.getRole(roleNames[1]);
-    store.grantRole(role1, userNames[0], PrincipalType.USER, "bob", PrincipalType.USER, false);
-    store.grantRole(role1, roleNames[1], PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-    store.grantRole(role2, userNames[1], PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-    List<HiveObjectPrivilege> privileges = new ArrayList<HiveObjectPrivilege>();
-    HiveObjectRef hiveObjRef =
-        new HiveObjectRef(HiveObjectType.GLOBAL, null, null, null, null);
-    PrivilegeGrantInfo grantInfo =
-        new PrivilegeGrantInfo("read", now, "me", PrincipalType.USER, false);
-    HiveObjectPrivilege hop = new HiveObjectPrivilege(hiveObjRef, userNames[0], PrincipalType.USER,
-        grantInfo);
-    privileges.add(hop);
-
-    grantInfo = new PrivilegeGrantInfo("write", now, "me", PrincipalType.USER, true);
-    hop = new HiveObjectPrivilege(hiveObjRef, roleNames[0], PrincipalType.ROLE, grantInfo);
-    privileges.add(hop);
-
-    PrivilegeBag pBag = new PrivilegeBag(privileges);
-    store.grantPrivileges(pBag);
-
-    List<HiveObjectPrivilege> hops =
-        store.listPrincipalGlobalGrants(roleNames[0], PrincipalType.ROLE);
-    Assert.assertEquals(1, hops.size());
-    Assert.assertEquals(PrincipalType.ROLE, hops.get(0).getPrincipalType());
-    Assert.assertEquals(HiveObjectType.GLOBAL, hops.get(0).getHiveObject().getObjectType());
-    Assert.assertEquals("write", hops.get(0).getGrantInfo().getPrivilege());
-
-    hops = store.listPrincipalGlobalGrants(userNames[0], PrincipalType.USER);
-    Assert.assertEquals(1, hops.size());
-    Assert.assertEquals(PrincipalType.USER, hops.get(0).getPrincipalType());
-    Assert.assertEquals(HiveObjectType.GLOBAL, hops.get(0).getHiveObject().getObjectType());
-    Assert.assertEquals("read", hops.get(0).getGrantInfo().getPrivilege());
-
-    hops = store.listPrincipalGlobalGrants(roleNames[1], PrincipalType.ROLE);
-    Assert.assertEquals(0, hops.size());
-    hops = store.listPrincipalGlobalGrants(userNames[1], PrincipalType.USER);
-    Assert.assertEquals(0, hops.size());
-
-    hops = store.listGlobalGrantsAll();
-    Assert.assertEquals(2, hops.size());
-    boolean sawUser = false, sawRole = false;
-    for (HiveObjectPrivilege h : hops) {
-      if (h.getPrincipalName().equals(userNames[0])) {
-        Assert.assertEquals(PrincipalType.USER, h.getPrincipalType());
-        Assert.assertEquals(HiveObjectType.GLOBAL, h.getHiveObject().getObjectType());
-        Assert.assertEquals("read", h.getGrantInfo().getPrivilege());
-        sawUser = true;
-      } else if (h.getPrincipalName().equals(roleNames[0])) {
-        Assert.assertEquals(PrincipalType.ROLE, h.getPrincipalType());
-        Assert.assertEquals(HiveObjectType.GLOBAL, h.getHiveObject().getObjectType());
-        Assert.assertEquals("write", h.getGrantInfo().getPrivilege());
-        sawRole = true;
-      }
-    }
-    Assert.assertTrue(sawUser && sawRole);
-  }
-
-  @Test
-  public void listTableGrants() throws Exception {
-    String dbName = "ltg_db";
-    String[] tableNames = new String[] {"ltg_t1", "ltg_t2"};
-    try {
-      Database db = new Database(dbName, "no description", "file:///tmp", emptyParameters);
-      store.createDatabase(db);
-      int startTime = (int)(System.currentTimeMillis() / 1000);
-      List<FieldSchema> cols = new ArrayList<FieldSchema>();
-      cols.add(new FieldSchema("col1", "int", "nocomment"));
-      SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-      StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-          serde, null, null, emptyParameters);
-      Table table = new Table(tableNames[0], dbName, "me", startTime, startTime, 0, sd, null,
-          emptyParameters, null, null, null);
-      store.createTable(table);
-      table = new Table(tableNames[1], dbName, "me", startTime, startTime, 0, sd, null,
-          emptyParameters, null, null, null);
-      store.createTable(table);
-      String[] roleNames = new String[]{"ltg_role1", "ltg_role2"};
-      String[] userNames = new String[]{"gandalf", "radagast"};
-
-      store.addRole(roleNames[0], "me");
-      store.addRole(roleNames[1], "me");
-      int now = (int)(System.currentTimeMillis() / 1000);
-
-      Role role1 = store.getRole(roleNames[0]);
-      Role role2 = store.getRole(roleNames[1]);
-      store.grantRole(role1, userNames[0], PrincipalType.USER, "bob", PrincipalType.USER, false);
-      store.grantRole(role1, roleNames[1], PrincipalType.ROLE, "admin", PrincipalType.ROLE, true);
-      store.grantRole(role2, userNames[1], PrincipalType.USER, "bob", PrincipalType.USER, false);
-
-      List<HiveObjectPrivilege> privileges = new ArrayList<HiveObjectPrivilege>();
-      HiveObjectRef hiveObjRef =
-          new HiveObjectRef(HiveObjectType.TABLE, dbName, tableNames[0], null, null);
-      PrivilegeGrantInfo grantInfo =
-          new PrivilegeGrantInfo("read", now, "me", PrincipalType.USER, false);
-      HiveObjectPrivilege hop = new HiveObjectPrivilege(hiveObjRef, userNames[0], PrincipalType.USER,
-          grantInfo);
-      privileges.add(hop);
-
-      grantInfo = new PrivilegeGrantInfo("write", now, "me", PrincipalType.USER, true);
-      hop = new HiveObjectPrivilege(hiveObjRef, roleNames[0], PrincipalType.ROLE, grantInfo);
-      privileges.add(hop);
-
-      PrivilegeBag pBag = new PrivilegeBag(privileges);
-      store.grantPrivileges(pBag);
-
-      List<HiveObjectPrivilege> hops =
-          store.listAllTableGrants(roleNames[0], PrincipalType.ROLE, dbName, tableNames[0]);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.ROLE, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.TABLE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("write", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listAllTableGrants(userNames[0], PrincipalType.USER, dbName, tableNames[0]);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.USER, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.TABLE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("read", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listAllTableGrants(roleNames[1], PrincipalType.ROLE, dbName, tableNames[0]);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listAllTableGrants(userNames[1], PrincipalType.USER, dbName, tableNames[0]);
-      Assert.assertEquals(0, hops.size());
-
-      hops = store.listAllTableGrants(roleNames[0], PrincipalType.ROLE, dbName, tableNames[1]);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listAllTableGrants(userNames[0], PrincipalType.USER, dbName, tableNames[1]);
-      Assert.assertEquals(0, hops.size());
-
-      hops = store.listTableGrantsAll(dbName, tableNames[0]);
-      Assert.assertEquals(2, hops.size());
-      boolean sawUser = false, sawRole = false;
-      for (HiveObjectPrivilege h : hops) {
-        if (h.getPrincipalName().equals(userNames[0])) {
-          Assert.assertEquals(PrincipalType.USER, h.getPrincipalType());
-          Assert.assertEquals(HiveObjectType.TABLE, h.getHiveObject().getObjectType());
-          Assert.assertEquals("read", h.getGrantInfo().getPrivilege());
-          sawUser = true;
-        } else if (h.getPrincipalName().equals(roleNames[0])) {
-          Assert.assertEquals(PrincipalType.ROLE, h.getPrincipalType());
-          Assert.assertEquals(HiveObjectType.TABLE, h.getHiveObject().getObjectType());
-          Assert.assertEquals("write", h.getGrantInfo().getPrivilege());
-          sawRole = true;
-        }
-      }
-      Assert.assertTrue(sawUser && sawRole);
-
-      hops = store.listPrincipalTableGrantsAll(roleNames[0], PrincipalType.ROLE);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.ROLE, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.TABLE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("write", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalTableGrantsAll(userNames[0], PrincipalType.USER);
-      Assert.assertEquals(1, hops.size());
-      Assert.assertEquals(PrincipalType.USER, hops.get(0).getPrincipalType());
-      Assert.assertEquals(HiveObjectType.TABLE, hops.get(0).getHiveObject().getObjectType());
-      Assert.assertEquals("read", hops.get(0).getGrantInfo().getPrivilege());
-
-      hops = store.listPrincipalDBGrantsAll(roleNames[1], PrincipalType.ROLE);
-      Assert.assertEquals(0, hops.size());
-      hops = store.listPrincipalDBGrantsAll(userNames[1], PrincipalType.USER);
-      Assert.assertEquals(0, hops.size());
-
-
-    } finally {
-      store.dropTable(dbName, tableNames[0]);
-      store.dropTable(dbName, tableNames[1]);
-      store.dropDatabase(dbName);
-    }
-  }
-
-  @Test
-  public void tableStatistics() throws Exception {
-    long now = System.currentTimeMillis();
-    String dbname = "default";
-    String tableName = "statstable";
-    String boolcol = "boolcol";
-    String longcol = "longcol";
-    String doublecol = "doublecol";
-    String stringcol = "stringcol";
-    String binarycol = "bincol";
-    String decimalcol = "deccol";
-    long trues = 37;
-    long falses = 12;
-    long booleanNulls = 2;
-    long longHigh = 120938479124L;
-    long longLow = -12341243213412124L;
-    long longNulls = 23;
-    long longDVs = 213L;
-    double doubleHigh = 123423.23423;
-    double doubleLow = 0.00001234233;
-    long doubleNulls = 92;
-    long doubleDVs = 1234123421L;
-    long strMaxLen = 1234;
-    double strAvgLen = 32.3;
-    long strNulls = 987;
-    long strDVs = 906;
-    long binMaxLen = 123412987L;
-    double binAvgLen = 76.98;
-    long binNulls = 976998797L;
-    Decimal decHigh = new Decimal();
-    decHigh.setScale((short)3);
-    decHigh.setUnscaled("3876".getBytes()); // I have no clue how this is translated, but it
-    // doesn't matter
-    Decimal decLow = new Decimal();
-    decLow.setScale((short)3);
-    decLow.setUnscaled("38".getBytes());
-    long decNulls = 13;
-    long decDVs = 923947293L;
-
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema(boolcol, "boolean", "nocomment"));
-    cols.add(new FieldSchema(longcol, "long", "nocomment"));
-    cols.add(new FieldSchema(doublecol, "double", "nocomment"));
-    cols.add(new FieldSchema(stringcol, "varchar(32)", "nocomment"));
-    cols.add(new FieldSchema(binarycol, "binary", "nocomment"));
-    cols.add(new FieldSchema(decimalcol, "decimal(5, 3)", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    Table table = new Table(tableName, dbname, "me", (int)now / 1000, (int)now / 1000, 0, sd, null,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-
-    ColumnStatistics stats = new ColumnStatistics();
-    ColumnStatisticsDesc desc = new ColumnStatisticsDesc();
-    desc.setLastAnalyzed(now);
-    desc.setDbName(dbname);
-    desc.setTableName(tableName);
-    desc.setIsTblLevel(true);
-    stats.setStatsDesc(desc);
-
-    // Do one column of each type
-    ColumnStatisticsObj obj = new ColumnStatisticsObj();
-    obj.setColName(boolcol);
-    obj.setColType("boolean");
-    ColumnStatisticsData data = new ColumnStatisticsData();
-    BooleanColumnStatsData boolData = new BooleanColumnStatsData();
-    boolData.setNumTrues(trues);
-    boolData.setNumFalses(falses);
-    boolData.setNumNulls(booleanNulls);
-    data.setBooleanStats(boolData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    obj = new ColumnStatisticsObj();
-    obj.setColName(longcol);
-    obj.setColType("long");
-    data = new ColumnStatisticsData();
-    LongColumnStatsData longData = new LongColumnStatsData();
-    longData.setHighValue(longHigh);
-    longData.setLowValue(longLow);
-    longData.setNumNulls(longNulls);
-    longData.setNumDVs(longDVs);
-    data.setLongStats(longData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    obj = new ColumnStatisticsObj();
-    obj.setColName(doublecol);
-    obj.setColType("double");
-    data = new ColumnStatisticsData();
-    DoubleColumnStatsData doubleData = new DoubleColumnStatsData();
-    doubleData.setHighValue(doubleHigh);
-    doubleData.setLowValue(doubleLow);
-    doubleData.setNumNulls(doubleNulls);
-    doubleData.setNumDVs(doubleDVs);
-    data.setDoubleStats(doubleData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    store.updateTableColumnStatistics(stats);
-
-    stats = store.getTableColumnStatistics(dbname, tableName,
-        Arrays.asList(boolcol, longcol, doublecol));
-
-    // We'll check all of the individual values later.
-    Assert.assertEquals(3, stats.getStatsObjSize());
-
-    // check that we can fetch just some of the columns
-    stats = store.getTableColumnStatistics(dbname, tableName, Arrays.asList(boolcol));
-    Assert.assertEquals(1, stats.getStatsObjSize());
-
-    stats = new ColumnStatistics();
-    stats.setStatsDesc(desc);
-
-
-    obj = new ColumnStatisticsObj();
-    obj.setColName(stringcol);
-    obj.setColType("string");
-    data = new ColumnStatisticsData();
-    StringColumnStatsData strData = new StringColumnStatsData();
-    strData.setMaxColLen(strMaxLen);
-    strData.setAvgColLen(strAvgLen);
-    strData.setNumNulls(strNulls);
-    strData.setNumDVs(strDVs);
-    data.setStringStats(strData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    obj = new ColumnStatisticsObj();
-    obj.setColName(binarycol);
-    obj.setColType("binary");
-    data = new ColumnStatisticsData();
-    BinaryColumnStatsData binData = new BinaryColumnStatsData();
-    binData.setMaxColLen(binMaxLen);
-    binData.setAvgColLen(binAvgLen);
-    binData.setNumNulls(binNulls);
-    data.setBinaryStats(binData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    obj = new ColumnStatisticsObj();
-    obj.setColName(decimalcol);
-    obj.setColType("decimal(5,3)");
-    data = new ColumnStatisticsData();
-    DecimalColumnStatsData decData = new DecimalColumnStatsData();
-    LOG.debug("Setting decimal high value to " + decHigh.getScale() + " <" + new String(decHigh.getUnscaled()) + ">");
-    decData.setHighValue(decHigh);
-    decData.setLowValue(decLow);
-    decData.setNumNulls(decNulls);
-    decData.setNumDVs(decDVs);
-    data.setDecimalStats(decData);
-    obj.setStatsData(data);
-    stats.addToStatsObj(obj);
-
-    store.updateTableColumnStatistics(stats);
-
-    stats = store.getTableColumnStatistics(dbname, tableName,
-        Arrays.asList(boolcol, longcol, doublecol, stringcol, binarycol, decimalcol));
-    Assert.assertEquals(now, stats.getStatsDesc().getLastAnalyzed());
-    Assert.assertEquals(dbname, stats.getStatsDesc().getDbName());
-    Assert.assertEquals(tableName, stats.getStatsDesc().getTableName());
-    Assert.assertTrue(stats.getStatsDesc().isIsTblLevel());
-
-    Assert.assertEquals(6, stats.getStatsObjSize());
-
-    ColumnStatisticsData colData = stats.getStatsObj().get(0).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.BOOLEAN_STATS, colData.getSetField());
-    boolData = colData.getBooleanStats();
-    Assert.assertEquals(trues, boolData.getNumTrues());
-    Assert.assertEquals(falses, boolData.getNumFalses());
-    Assert.assertEquals(booleanNulls, boolData.getNumNulls());
-
-    colData = stats.getStatsObj().get(1).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.LONG_STATS, colData.getSetField());
-    longData = colData.getLongStats();
-    Assert.assertEquals(longHigh, longData.getHighValue());
-    Assert.assertEquals(longLow, longData.getLowValue());
-    Assert.assertEquals(longNulls, longData.getNumNulls());
-    Assert.assertEquals(longDVs, longData.getNumDVs());
-
-    colData = stats.getStatsObj().get(2).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.DOUBLE_STATS, colData.getSetField());
-    doubleData = colData.getDoubleStats();
-    Assert.assertEquals(doubleHigh, doubleData.getHighValue(), 0.01);
-    Assert.assertEquals(doubleLow, doubleData.getLowValue(), 0.01);
-    Assert.assertEquals(doubleNulls, doubleData.getNumNulls());
-    Assert.assertEquals(doubleDVs, doubleData.getNumDVs());
-
-    colData = stats.getStatsObj().get(3).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.STRING_STATS, colData.getSetField());
-    strData = colData.getStringStats();
-    Assert.assertEquals(strMaxLen, strData.getMaxColLen());
-    Assert.assertEquals(strAvgLen, strData.getAvgColLen(), 0.01);
-    Assert.assertEquals(strNulls, strData.getNumNulls());
-    Assert.assertEquals(strDVs, strData.getNumDVs());
-
-    colData = stats.getStatsObj().get(4).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.BINARY_STATS, colData.getSetField());
-    binData = colData.getBinaryStats();
-    Assert.assertEquals(binMaxLen, binData.getMaxColLen());
-    Assert.assertEquals(binAvgLen, binData.getAvgColLen(), 0.01);
-    Assert.assertEquals(binNulls, binData.getNumNulls());
-
-    colData = stats.getStatsObj().get(5).getStatsData();
-    Assert.assertEquals(ColumnStatisticsData._Fields.DECIMAL_STATS, colData.getSetField());
-    decData = colData.getDecimalStats();
-    Assert.assertEquals(decHigh, decData.getHighValue());
-    Assert.assertEquals(decLow, decData.getLowValue());
-    Assert.assertEquals(decNulls, decData.getNumNulls());
-    Assert.assertEquals(decDVs, decData.getNumDVs());
-
-  }
-
-  @Test
-  public void partitionStatistics() throws Exception {
-    long now = System.currentTimeMillis();
-    String dbname = "default";
-    String tableName = "statspart";
-    String[] partNames = {"ds=today", "ds=yesterday"};
-    String[] partVals = {"today", "yesterday"};
-    String boolcol = "boolcol";
-    String longcol = "longcol";
-    String doublecol = "doublecol";
-    String stringcol = "stringcol";
-    String binarycol = "bincol";
-    String decimalcol = "deccol";
-    long trues = 37;
-    long falses = 12;
-    long booleanNulls = 2;
-    long strMaxLen = 1234;
-    double strAvgLen = 32.3;
-    long strNulls = 987;
-    long strDVs = 906;
-
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
-    cols.add(new FieldSchema(boolcol, "boolean", "nocomment"));
-    cols.add(new FieldSchema(longcol, "long", "nocomment"));
-    cols.add(new FieldSchema(doublecol, "double", "nocomment"));
-    cols.add(new FieldSchema(stringcol, "varchar(32)", "nocomment"));
-    cols.add(new FieldSchema(binarycol, "binary", "nocomment"));
-    cols.add(new FieldSchema(decimalcol, "decimal(5, 3)", "nocomment"));
-    SerDeInfo serde = new SerDeInfo("serde", "seriallib", null);
-    StorageDescriptor sd = new StorageDescriptor(cols, "file:/tmp", "input", "output", false, 0,
-        serde, null, null, emptyParameters);
-    List<FieldSchema> partCols = new ArrayList<FieldSchema>();
-    partCols.add(new FieldSchema("ds", "string", ""));
-    Table table = new Table(tableName, dbname, "me", (int)now / 1000, (int)now / 1000, 0, sd, partCols,
-        emptyParameters, null, null, null);
-    store.createTable(table);
-    for (String partVal : partVals) {
-      Partition part = new Partition(Arrays.asList(partVal), dbname, tableName, (int) now / 1000,
-          (int) now / 1000, sd, emptyParameters);
-      store.addPartition(part);
-    }
-    
-    for (int i = 0; i < partNames.length; i++) {
-      ColumnStatistics stats = new ColumnStatistics();
-      ColumnStatisticsDesc desc = new ColumnStatisticsDesc();
-      desc.setLastAnalyzed(now);
-      desc.setDbName(dbname);
-      desc.setTableName(tableName);
-      desc.setIsTblLevel(false);
-      desc.setPartName(partNames[i]);
-      stats.setStatsDesc(desc);
-
-      ColumnStatisticsObj obj = new ColumnStatisticsObj();
-      obj.setColName(boolcol);
-      obj.setColType("boolean");
-      ColumnStatisticsData data = new ColumnStatisticsData();
-      BooleanColumnStatsData boolData = new BooleanColumnStatsData();
-      boolData.setNumTrues(trues);
-      boolData.setNumFalses(falses);
-      boolData.setNumNulls(booleanNulls);
-      data.setBooleanStats(boolData);
-      obj.setStatsData(data);
-      stats.addToStatsObj(obj);
-
-      store.updatePartitionColumnStatistics(stats, Arrays.asList(partVals[i]));
-    }
-
-    List<ColumnStatistics> statsList = store.getPartitionColumnStatistics(dbname, tableName,
-        Arrays.asList(partNames), Arrays.asList(boolcol));
-
-    Assert.assertEquals(2, statsList.size());
-    for (int i = 0; i < partNames.length; i++) {
-      Assert.assertEquals(1, statsList.get(i).getStatsObjSize());
-    }
-
-    for (int i = 0; i < partNames.length; i++) {
-      ColumnStatistics stats = new ColumnStatistics();
-      ColumnStatisticsDesc desc = new ColumnStatisticsDesc();
-      desc.setLastAnalyzed(now);
-      desc.setDbName(dbname);
-      desc.setTableName(tableName);
-      desc.setIsTblLevel(false);
-      desc.setPartName(partNames[i]);
-      stats.setStatsDesc(desc);
-
-      ColumnStatisticsObj obj = new ColumnStatisticsObj();
-      obj.setColName(stringcol);
-      obj.setColType("string");
-      ColumnStatisticsData data = new ColumnStatisticsData();
-      StringColumnStatsData strData = new StringColumnStatsData();
-      strData.setMaxColLen(strMaxLen);
-      strData.setAvgColLen(strAvgLen);
-      strData.setNumNulls(strNulls);
-      strData.setNumDVs(strDVs);
-      data.setStringStats(strData);
-      obj.setStatsData(data);
-      stats.addToStatsObj(obj);
-
-      store.updatePartitionColumnStatistics(stats, Arrays.asList(partVals[i]));
-    }
-
-    // Make sure when we ask for one we only get one
-    statsList = store.getPartitionColumnStatistics(dbname, tableName,
-        Arrays.asList(partNames), Arrays.asList(boolcol));
-
-    Assert.assertEquals(2, statsList.size());
-    for (int i = 0; i < partNames.length; i++) {
-      Assert.assertEquals(1, statsList.get(i).getStatsObjSize());
-    }
-
-    statsList = store.getPartitionColumnStatistics(dbname, tableName,
-        Arrays.asList(partNames), Arrays.asList(boolcol, stringcol));
-
-    Assert.assertEquals(2, statsList.size());
-    for (int i = 0; i < partNames.length; i++) {
-      Assert.assertEquals(2, statsList.get(i).getStatsObjSize());
-      // Just check one piece of the data, I don't need to check it all again
-      Assert.assertEquals(booleanNulls,
-          statsList.get(i).getStatsObj().get(0).getStatsData().getBooleanStats().getNumNulls());
-      Assert.assertEquals(strDVs,
-          statsList.get(i).getStatsObj().get(1).getStatsData().getStringStats().getNumDVs());
-    }
-  }
-
-  @Test
-  public void delegationToken() throws Exception {
-    store.addToken("abc", "def");
-    store.addToken("ghi", "jkl");
-
-    Assert.assertEquals("def", store.getToken("abc"));
-    Assert.assertEquals("jkl", store.getToken("ghi"));
-    Assert.assertNull(store.getToken("wabawaba"));
-    String[] allToks = store.getAllTokenIdentifiers().toArray(new String[2]);
-    Arrays.sort(allToks);
-    Assert.assertArrayEquals(new String[]{"abc", "ghi"}, allToks);
-
-    store.removeToken("abc");
-    store.removeToken("wabawaba");
-
-    Assert.assertNull(store.getToken("abc"));
-    Assert.assertEquals("jkl", store.getToken("ghi"));
-    allToks = store.getAllTokenIdentifiers().toArray(new String[1]);
-    Assert.assertArrayEquals(new String[]{"ghi"}, allToks);
-  }
-
-  @Test
-  public void masterKey() throws Exception {
-    Assert.assertEquals(0, store.addMasterKey("k1"));
-    Assert.assertEquals(1, store.addMasterKey("k2"));
-
-    String[] keys = store.getMasterKeys();
-    Arrays.sort(keys);
-    Assert.assertArrayEquals(new String[]{"k1", "k2"}, keys);
-
-    store.updateMasterKey(0, "k3");
-    keys = store.getMasterKeys();
-    Arrays.sort(keys);
-    Assert.assertArrayEquals(new String[]{"k2", "k3"}, keys);
-
-    store.removeMasterKey(1);
-    keys = store.getMasterKeys();
-    Assert.assertArrayEquals(new String[]{"k3"}, keys);
-
-    thrown.expect(NoSuchObjectException.class);
-    store.updateMasterKey(72, "whatever");
-  }
-
-}