@Test
  public void testGetPartitionsWithSpec() throws Throwable {
    // create a table with multiple partitions
    List<Partition> createdPartitions = setupProjectionTestTable();
    Table tbl = client.getTable("compdb", "comptbl");
    GetPartitionsRequest request = new GetPartitionsRequest();
    GetProjectionsSpec projectSpec = new GetProjectionsSpec();
    projectSpec.setFieldList(Arrays
        .asList("dbName", "tableName", "catName", "parameters", "lastAccessTime", "sd.location",
            "values", "createTime", "sd.serdeInfo.serializationLib", "sd.cols"));
    projectSpec.setExcludeParamKeyPattern("exclude%");
    GetPartitionsFilterSpec filter = new GetPartitionsFilterSpec();
    request.setDbName("compdb");
    request.setTblName("comptbl");
    request.setFilterSpec(filter);
    request.setProjectionSpec(projectSpec);
    GetPartitionsResponse response;
    try {
      response = client.getPartitionsWithSpecs(request);
    } catch (Exception ex) {
      ex.printStackTrace();
      LOG.error("Exception while retriveing partitions", ex);
      throw ex;
    }

    Assert.assertEquals(1, response.getPartitionSpecSize());
    PartitionSpecWithSharedSD partitionSpecWithSharedSD =
        response.getPartitionSpec().get(0).getSharedSDPartitionSpec();
    Assert.assertNotNull(partitionSpecWithSharedSD.getSd());
    StorageDescriptor sharedSD = partitionSpecWithSharedSD.getSd();
    Assert.assertEquals("Root location should be set to table location", tbl.getSd().getLocation(),
        sharedSD.getLocation());
    Assert.assertFalse("Fields which are not requested should not be set",
        sharedSD.isSetParameters());
    Assert.assertNotNull(
        "serializationLib class was requested but was not found in the returned partition",
        sharedSD.getSerdeInfo().getSerializationLib());
    Assert.assertNotNull("db name was requested but was not found in the returned partition",
        response.getPartitionSpec().get(0).getDbName());
    Assert.assertNotNull("Table name was requested but was not found in the returned partition",
        response.getPartitionSpec().get(0).getTableName());
    Assert.assertTrue("sd.cols was requested but was not found in the returned response",
        partitionSpecWithSharedSD.getSd().isSetCols());
    List<FieldSchema> origSdCols = createdPartitions.get(0).getSd().getCols();
    Assert.assertEquals("Size of the requested sd.cols should be same", origSdCols.size(),
        partitionSpecWithSharedSD.getSd().getCols().size());
    for (int i = 0; i < origSdCols.size(); i++) {
      FieldSchema origFs = origSdCols.get(i);
      FieldSchema returnedFs = partitionSpecWithSharedSD.getSd().getCols().get(i);
      Assert.assertEquals("Field schemas returned different than expected", origFs, returnedFs);
    }
    /*Assert
        .assertNotNull("Catalog name was requested but was not found in the returned partition",
            response.getPartitionSpec().get(0).getCatName());*/

    List<PartitionWithoutSD> partitionWithoutSDS = partitionSpecWithSharedSD.getPartitions();
    Assert.assertEquals(createdPartitions.size(), partitionWithoutSDS.size());
    for (int i = 0; i < createdPartitions.size(); i++) {
      Partition origPartition = createdPartitions.get(i);
      PartitionWithoutSD returnedPartitionWithoutSD = partitionWithoutSDS.get(i);
      Assert.assertEquals(String.format("Location returned for Partition %d is not correct", i),
          origPartition.getSd().getLocation(),
          sharedSD.getLocation() + returnedPartitionWithoutSD.getRelativePath());
      Assert.assertTrue("createTime was request but is not set",
          returnedPartitionWithoutSD.isSetCreateTime());
      Assert.assertTrue("Partition parameters were requested but are not set",
          returnedPartitionWithoutSD.isSetParameters());
      // first partition has parameters set
      if (i == 0) {
        Assert.assertTrue("partition parameters not set",
            returnedPartitionWithoutSD.getParameters().containsKey("key1"));
        Assert.assertEquals("partition parameters does not contain included keys", "val1",
            returnedPartitionWithoutSD.getParameters().get("key1"));
        // excluded parameter should not be returned
        Assert.assertFalse("Excluded parameter key returned",
            returnedPartitionWithoutSD.getParameters().containsKey("excludeKey1"));
        Assert.assertFalse("Excluded parameter key returned",
            returnedPartitionWithoutSD.getParameters().containsKey("excludeKey2"));
      }
      List<String> returnedVals = returnedPartitionWithoutSD.getValues();
      List<String> actualVals = origPartition.getValues();
      for (int j = 0; j < actualVals.size(); j++) {
        Assert.assertEquals(actualVals.get(j), returnedVals.get(j));
      }
    }
  }
tests create table and partition and tries to drop the table without
droppping the partition
standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java