You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by sh...@apache.org on 2015/12/30 08:10:39 UTC

[20/50] [abbrv] lens git commit: LENS-871 : Fix Dropping any partition in dimtable is clearing latest cache for that dimtable.

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestFactPartition.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestFactPartition.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestFactPartition.java
index 3f2ae6f..e802c3c 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestFactPartition.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestFactPartition.java
@@ -39,8 +39,8 @@ public class TestFactPartition {
 
   @Test
   public void testGetFormattedFilter() throws Exception {
-    String dailyFormat = DAILY.format().format(DATE);
-    String hourlyFormat = HOURLY.format().format(DATE);
+    String dailyFormat = DAILY.format(DATE);
+    String hourlyFormat = HOURLY.format(DATE);
     assertEquals(fp1.getFormattedFilter("table"), "table.p = '" + dailyFormat + "'");
     assertEquals(fp2.getFormattedFilter("table2"),
       "table2.p = '" + dailyFormat + "' AND table2.q = '" + hourlyFormat + "'");

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestTimePartition.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestTimePartition.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestTimePartition.java
index 2cbbd0c..729bcab 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestTimePartition.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestTimePartition.java
@@ -39,7 +39,7 @@ public class TestTimePartition {
   @Test(dataProvider = "update-periods")
   public void test(UpdatePeriod up) throws LensException {
     // Normal date object parsable
-    String nowStr = up.format().format(NOW);
+    String nowStr = up.format(NOW);
     // Create partition by date object or it's string representation -- both should be same.
     TimePartition nowPartition = TimePartition.of(up, NOW);
     TimePartition nowStrPartition = TimePartition.of(up, nowStr);

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/metadata/UpdatePeriodTest.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/UpdatePeriodTest.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/UpdatePeriodTest.java
index b21341d..b7ee8cc 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/UpdatePeriodTest.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/UpdatePeriodTest.java
@@ -54,7 +54,7 @@ public class UpdatePeriodTest {
     for (int i = 0; i < 5000; i++) {
       Date randomDate = randomDateGenerator.nextDate();
       randomDate = period.truncate(randomDate);
-      assertEquals(randomDate, period.format().parse(period.format().format(randomDate)));
+      assertEquals(randomDate, period.parse(period.format(randomDate)));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
index 999faa0..1357035 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
@@ -19,15 +19,11 @@
 
 package org.apache.lens.cube.parse;
 
-import static java.util.Calendar.DAY_OF_MONTH;
-import static java.util.Calendar.HOUR_OF_DAY;
-import static java.util.Calendar.MONTH;
+import static java.util.Calendar.*;
 
 import static org.apache.lens.cube.metadata.UpdatePeriod.*;
 
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.*;
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -58,7 +54,6 @@ import org.apache.hadoop.mapred.TextInputFormat;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-
 import com.google.common.collect.Sets;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -105,7 +100,6 @@ public class CubeTestSetup {
   public static final String DERIVED_CUBE_NAME1 = "der1";
   public static final String DERIVED_CUBE_NAME2 = "der2";
   public static final String DERIVED_CUBE_NAME3 = "der3";
-  public static final String DERIVED_CUBE_NAME4 = "der4";
 
   // Time Instances as Date Type
   public static final Date NOW;
@@ -140,9 +134,31 @@ public class CubeTestSetup {
   private static Map<String, String> factValidityProperties = Maps.newHashMap();
   @Getter
   private static Map<String, List<UpdatePeriod>> storageToUpdatePeriodMap = new LinkedHashMap<>();
+  public static class DateOffsetProvider extends HashMap<Integer, Date> {
+    private final UpdatePeriod updatePeriod;
+    Calendar calendar = Calendar.getInstance();
+
+    public DateOffsetProvider(UpdatePeriod updatePeriod) {
+      this.updatePeriod = updatePeriod;
+    }
+    {
+      put(0, calendar.getTime());
+    }
+
+    @Override
+    public Date get(Object key) {
+      if (!containsKey(key) && key instanceof Integer) {
+        calendar.setTime(super.get(0));
+        calendar.add(updatePeriod.calendarField(), (Integer) key);
+        put((Integer) key, calendar.getTime());
+      }
+      return super.get(key);
+    }
+  }
 
   static {
     Calendar cal = Calendar.getInstance();
+    // Keep in sync
     NOW = cal.getTime();
     log.debug("Test now:{}", NOW);
 
@@ -280,24 +296,18 @@ public class CubeTestSetup {
 
   public static String getExpectedQuery(String cubeName, String selExpr, String whereExpr, String postWhereExpr,
     String rangeWhere, String storageTable, List<String> notLatestConditions) {
-    StringBuilder expected = new StringBuilder();
-    expected.append(selExpr);
-    expected.append(getDbName() + storageTable);
-    expected.append(" ");
-    expected.append(cubeName);
-    expected.append(" WHERE ");
-    expected.append("(");
+    StringBuilder expected = new StringBuilder()
+      .append(selExpr).append(getDbName()).append(storageTable).append(" ").append(cubeName)
+      .append(" WHERE ").append("(");
     if (notLatestConditions != null) {
       for (String cond : notLatestConditions) {
         expected.append(cond).append(" AND ");
       }
     }
     if (whereExpr != null) {
-      expected.append(whereExpr);
-      expected.append(" AND ");
+      expected.append(whereExpr).append(" AND ");
     }
-    expected.append(rangeWhere);
-    expected.append(")");
+    expected.append(rangeWhere).append(")");
     if (postWhereExpr != null) {
       expected.append(postWhereExpr);
     }
@@ -1561,7 +1571,7 @@ public class CubeTestSetup {
       TimePartition tp = TimePartition.of(HOURLY, temp);
       ttdStoreAll.add(tp);
       ttd2StoreAll.add(tp);
-      partitions.add(HOURLY.format().format(temp));
+      partitions.add(HOURLY.format(temp));
       StoragePartitionDesc sPartSpec = new StoragePartitionDesc(fact.getName(), timeParts, null, HOURLY);
       storagePartitionDescs.add(sPartSpec);
       cal.add(HOUR_OF_DAY, 1);
@@ -2036,8 +2046,6 @@ public class CubeTestSetup {
     dimColumns.add(new FieldSchema("name", "string", "field1"));
     dimColumns.add(new FieldSchema("cyleDim2Id", "string", "link to cyclic dim 2"));
 
-    Map<String, List<TableReference>> dimensionReferences = new HashMap<String, List<TableReference>>();
-    dimensionReferences.put("cyleDim2Id", Arrays.asList(new TableReference("cycleDim2", "id")));
 
     Map<String, UpdatePeriod> dumpPeriods = new HashMap<String, UpdatePeriod>();
     ArrayList<FieldSchema> partCols = new ArrayList<FieldSchema>();

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
index 1ea22b7..ee84a4c 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
@@ -500,8 +500,8 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     assertEquals(
       pruneCause.getDetails().get("testfact2_base").iterator().next().getMissingPartitions().iterator().next(),
       "ttd:["
-        + UpdatePeriod.SECONDLY.format().format(DateUtils.addDays(DateUtils.truncate(TWODAYS_BACK, Calendar.HOUR), -10))
-        + ", " + UpdatePeriod.SECONDLY.format().format(DateUtils.addDays(DateUtils.truncate(NOW, Calendar.HOUR), 10))
+        + UpdatePeriod.SECONDLY.format(DateUtils.addDays(DateUtils.truncate(TWODAYS_BACK, Calendar.HOUR), -10))
+        + ", " + UpdatePeriod.SECONDLY.format(DateUtils.addDays(DateUtils.truncate(NOW, Calendar.HOUR), 10))
         + ")");
 
     // fail on partial false. Should go to fallback column. Also testing transitivity of timedim relations

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
index e20e0e8..9a2493c 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
@@ -67,7 +67,7 @@ public class TestBetweenTimeRangeWriter extends TestTimeRangeWriter {
   public void validateSingle(String whereClause, DateFormat format) {
     List<String> parts = new ArrayList<String>();
     if (format == null) {
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.ONE_DAY_BACK));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.ONE_DAY_BACK));
     } else {
       parts.add(format.format(CubeTestSetup.ONE_DAY_BACK));
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-cube/src/test/java/org/apache/lens/cube/parse/TestORTimeRangeWriter.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestORTimeRangeWriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestORTimeRangeWriter.java
index 0e7db1b..4a23818 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestORTimeRangeWriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestORTimeRangeWriter.java
@@ -43,9 +43,9 @@ public class TestORTimeRangeWriter extends TestTimeRangeWriter {
   public void validateDisjoint(String whereClause, DateFormat format) {
     List<String> parts = new ArrayList<String>();
     if (format == null) {
-      parts.add(UpdatePeriod.MONTHLY.format().format(CubeTestSetup.TWO_MONTHS_BACK));
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.TWODAYS_BACK));
-      parts.add(UpdatePeriod.HOURLY.format().format(CubeTestSetup.NOW));
+      parts.add(UpdatePeriod.MONTHLY.format(CubeTestSetup.TWO_MONTHS_BACK));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.TWODAYS_BACK));
+      parts.add(UpdatePeriod.HOURLY.format(CubeTestSetup.NOW));
     } else {
       parts.add(format.format(CubeTestSetup.TWO_MONTHS_BACK));
       parts.add(format.format(CubeTestSetup.TWODAYS_BACK));
@@ -60,9 +60,9 @@ public class TestORTimeRangeWriter extends TestTimeRangeWriter {
   public void validateConsecutive(String whereClause, DateFormat format) {
     List<String> parts = new ArrayList<String>();
     if (format == null) {
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.ONE_DAY_BACK));
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.TWODAYS_BACK));
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.NOW));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.ONE_DAY_BACK));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.TWODAYS_BACK));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.NOW));
     } else {
       parts.add(format.format(CubeTestSetup.ONE_DAY_BACK));
       parts.add(format.format(CubeTestSetup.TWODAYS_BACK));
@@ -77,7 +77,7 @@ public class TestORTimeRangeWriter extends TestTimeRangeWriter {
   public void validateSingle(String whereClause, DateFormat format) {
     List<String> parts = new ArrayList<String>();
     if (format == null) {
-      parts.add(UpdatePeriod.DAILY.format().format(CubeTestSetup.ONE_DAY_BACK));
+      parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.ONE_DAY_BACK));
     } else {
       parts.add(format.format(CubeTestSetup.ONE_DAY_BACK));
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
----------------------------------------------------------------------
diff --git a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
index fc57c94..722a2da 100644
--- a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
+++ b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
@@ -909,7 +909,7 @@ public class TestHiveDriver {
         p = UpdatePeriod.HOURLY;
         break;
       }
-      FactPartition part = new FactPartition(partEls[0], p.format().parse(partSpec), p, null, p.format(),
+      FactPartition part = new FactPartition(partEls[0], p.parse(partSpec), p, null, p.format(),
         Collections.singleton("table1"));
       factParts.add(part);
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-server-api/src/main/java/org/apache/lens/server/api/util/LensUtil.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/util/LensUtil.java b/lens-server-api/src/main/java/org/apache/lens/server/api/util/LensUtil.java
index 6dcb2d7..c3b6d26 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/util/LensUtil.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/util/LensUtil.java
@@ -18,6 +18,7 @@
  */
 package org.apache.lens.server.api.util;
 
+import java.util.HashMap;
 import java.util.Set;
 
 import org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory;
@@ -83,4 +84,13 @@ public final class LensUtil {
       throw new IllegalStateException(e);
     }
   }
+
+  public static <K, V> HashMap<K, V> getHashMap(Object... args) {
+    assert (args.length % 2 == 0);
+    HashMap<K, V> map = new HashMap<>();
+    for (int i = 0; i < args.length; i += 2) {
+      map.put((K) args[i], (V) args[i + 1]);
+    }
+    return map;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
index 27f9e0e..66ed938 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
@@ -870,7 +870,7 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
         String dateStr = partSpec.get(partCol);
         Date date = null;
         try {
-          date = period.format().parse(dateStr);
+          date = period.parse(dateStr);
         } catch (Exception e) {
           continue;
         }
@@ -919,11 +919,9 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
     String storageName, String filter) throws LensException {
     try {
       acquire(sessionid);
-      String tableName = MetastoreUtil.getStorageTableName(cubeTableName,
-        Storage.getPrefix(storageName));
+      String tableName = MetastoreUtil.getStorageTableName(cubeTableName, Storage.getPrefix(storageName));
       CubeMetastoreClient msClient = getClient(sessionid);
-      List<Partition> partitions = msClient.getPartitionsByFilter(
-        tableName, filter);
+      List<Partition> partitions = msClient.getPartitionsByFilter(tableName, filter);
       for (Partition part : partitions) {
         try {
           Map<String, Date> timeSpec = new HashMap<String, Date>();

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java b/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
index f5db7bc..a5883f7 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
@@ -859,7 +859,7 @@ public final class JAXBUtils {
           XTimePartSpecElement timePartSpecElement = new XTimePartSpecElement();
           timePartSpecElement.setKey(entry.getKey());
           timePartSpecElement
-            .setValue(getXMLGregorianCalendar(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).format().parse(
+            .setValue(getXMLGregorianCalendar(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).parse(
               entry.getValue())));
           xp.getTimePartitionSpec().getPartSpecElement().add(timePartSpecElement);
         } else {

http://git-wip-us.apache.org/repos/asf/lens/blob/87049563/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
index 5f9f639..3bc692e 100644
--- a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
@@ -28,15 +28,20 @@ import java.util.*;
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.*;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 import javax.xml.bind.JAXBElement;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
-import org.apache.lens.api.*;
+import org.apache.lens.api.APIResult;
 import org.apache.lens.api.APIResult.Status;
+import org.apache.lens.api.DateTime;
+import org.apache.lens.api.LensSessionHandle;
+import org.apache.lens.api.StringList;
 import org.apache.lens.api.error.LensCommonErrorCode;
 import org.apache.lens.api.metastore.*;
 import org.apache.lens.api.result.LensAPIResult;
@@ -46,6 +51,7 @@ import org.apache.lens.server.LensJerseyTest;
 import org.apache.lens.server.LensServices;
 import org.apache.lens.server.LensTestUtil;
 import org.apache.lens.server.api.metastore.CubeMetastoreService;
+import org.apache.lens.server.api.util.LensUtil;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
@@ -56,12 +62,17 @@ import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.mapred.SequenceFileInputFormat;
 
 import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.*;
+import org.glassfish.jersey.media.multipart.FormDataBodyPart;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataMultiPart;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -74,6 +85,10 @@ public class TestMetastoreService extends LensJerseyTest {
   CubeMetastoreServiceImpl metastoreService;
   LensSessionHandle lensSessionId;
 
+  private void assertSuccess(APIResult result) {
+    assertEquals(result.getStatus(), Status.SUCCEEDED, String.valueOf(result));
+  }
+
   @BeforeTest
   public void setUp() throws Exception {
     super.setUp();
@@ -114,17 +129,17 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = target().path("metastore").path("databases")
       .queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(dbName), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
 
     // set
     result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
       .put(Entity.xml(dbName), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
 
     // set without session id, we should get bad request
     try {
-      result = dbTarget.request(mediaType).put(Entity.xml(dbName), APIResult.class);
+      dbTarget.request(mediaType).put(Entity.xml(dbName), APIResult.class);
       fail("Should have thrown bad request exception");
     } catch (BadRequestException badReq) {
       // expected
@@ -142,7 +157,7 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
       .post(Entity.xml(newDb), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
 
     // Create again
     result = dbTarget.queryParam("sessionid", lensSessionId).queryParam("ignoreIfExisting", false)
@@ -161,13 +176,13 @@ public class TestMetastoreService extends LensJerseyTest {
     // First create the database
     APIResult create = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
       .post(Entity.xml(dbName), APIResult.class);
-    assertEquals(create.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(create);
 
     // Now drop it
     APIResult drop = dbTarget.path(dbName)
       .queryParam("cascade", "true")
       .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-    assertEquals(drop.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(drop);
   }
 
   @Test
@@ -189,7 +204,7 @@ public class TestMetastoreService extends LensJerseyTest {
       Assert.assertTrue(allDbs.getElements().contains(db));
     }
 
-    List<String> expected = new ArrayList<String>(Arrays.asList(dbsToCreate));
+    List<String> expected = Lists.newArrayList(dbsToCreate);
     // Default is always there
     expected.add("default");
 
@@ -206,7 +221,7 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
       .post(Entity.xml(dbName), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   private void createStorage(String storageName) throws Exception {
@@ -224,7 +239,7 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(
       cubeObjectFactory.createXStorage(xs)), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   private void dropStorage(String storageName) throws Exception {
@@ -232,7 +247,7 @@ public class TestMetastoreService extends LensJerseyTest {
 
     APIResult result = target
       .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   private void dropDatabase(String dbName) throws Exception {
@@ -240,21 +255,19 @@ public class TestMetastoreService extends LensJerseyTest {
 
     APIResult result = dbTarget.queryParam("cascade", "true")
       .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   private void setCurrentDatabase(String dbName) throws Exception {
     WebTarget dbTarget = target().path("metastore").path("databases/current");
     APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(dbName),
       APIResult.class);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   private String getCurrentDatabase() throws Exception {
-    WebTarget dbTarget = target().path("metastore").path("databases/current");
-    Invocation.Builder builder = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType);
-    String response = builder.get(String.class);
-    return response;
+    return target().path("metastore").path("databases/current")
+      .queryParam("sessionid", lensSessionId).request(mediaType).get(String.class);
   }
 
   private XBaseCube createTestCube(String cubeName) throws Exception {
@@ -439,6 +452,16 @@ public class TestMetastoreService extends LensJerseyTest {
     return cube;
   }
 
+  private void assertCubesExistence(List<String> cubes, Map<String, Boolean> expectedExistence) {
+    for (String cube : cubes) {
+      for (Map.Entry<String, Boolean> expectedCubeEntry : expectedExistence.entrySet()) {
+        if (cube.equalsIgnoreCase(expectedCubeEntry.getKey())) {
+          assertTrue(expectedCubeEntry.getValue(), expectedCubeEntry.getKey() + " is not supposed to be in the list");
+        }
+      }
+    }
+  }
+
   @Test
   public void testCreateCube() throws Exception {
     final String DB = dbPFX + "test_create_cube";
@@ -448,10 +471,10 @@ public class TestMetastoreService extends LensJerseyTest {
     try {
       final XCube cube = createTestCube("testCube1");
       final WebTarget target = target().path("metastore").path("cubes");
-      APIResult result = null;
+      APIResult result;
       try {
         // first try without a session id
-        result = target.request(mediaType).post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+        target.request(mediaType).post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
         fail("Should have thrown bad request exception");
       } catch (BadRequestException badReq) {
         // expected
@@ -459,19 +482,11 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target.queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
       assertNotNull(result);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       StringList cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId).request(mediaType)
         .get(StringList.class);
-      boolean foundcube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-          break;
-        }
-      }
-
-      assertTrue(foundcube);
+      assertCubesExistence(cubes.getElements(), LensUtil.<String, Boolean>getHashMap("testCube1", Boolean.TRUE));
       // create invalid derived cube
       XCube dcube = createDerivedCube("testderived", "testCube1", true);
       result = target.queryParam("sessionid", lensSessionId).request(
@@ -484,57 +499,26 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target.queryParam("sessionid", lensSessionId).request(
         mediaType).post(Entity.xml(cubeObjectFactory.createXCube(dcube)), APIResult.class);
       assertNotNull(result);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId).request(mediaType)
         .get(StringList.class);
-      boolean foundDcube = false;
-      foundcube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-        }
-        if (c.equalsIgnoreCase("testderived")) {
-          foundDcube = true;
-        }
-      }
-
-      assertTrue(foundcube);
-      assertTrue(foundDcube);
 
+      assertCubesExistence(cubes.getElements(),
+        LensUtil.<String, Boolean>getHashMap("testCube1", true, "testderived", true));
       // get all base cubes
       cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId)
         .queryParam("type", "base").request(mediaType).get(StringList.class);
-      foundDcube = false;
-      foundcube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-        }
-        if (c.equalsIgnoreCase("testderived")) {
-          foundDcube = true;
-        }
-      }
 
-      assertTrue(foundcube);
-      assertFalse(foundDcube);
+      assertCubesExistence(cubes.getElements(),
+        LensUtil.<String, Boolean>getHashMap("testCube1", true, "testderived", false));
 
       // get all derived cubes
       cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId)
         .queryParam("type", "derived").request(mediaType).get(StringList.class);
-      foundDcube = false;
-      foundcube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-        }
-        if (c.equalsIgnoreCase("testderived")) {
-          foundDcube = true;
-        }
-      }
 
-      assertFalse(foundcube);
-      assertTrue(foundDcube);
+      assertCubesExistence(cubes.getElements(),
+        LensUtil.<String, Boolean>getHashMap("testCube1", false, "testderived", true));
 
       // Create a non queryable cube
       final XCube qcube = createTestCube("testNoQueryCube");
@@ -546,51 +530,21 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target.queryParam("sessionid", lensSessionId).request(
         mediaType).post(Entity.xml(cubeObjectFactory.createXCube(qcube)), APIResult.class);
       assertNotNull(result);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // get all cubes
       cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId)
         .queryParam("type", "all").request(mediaType).get(StringList.class);
-      foundDcube = false;
-      foundcube = false;
-      boolean foundQCube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-        }
-        if (c.equalsIgnoreCase("testderived")) {
-          foundDcube = true;
-        }
-        if (c.equalsIgnoreCase("testNoQueryCube")) {
-          foundQCube = true;
-        }
-      }
 
-      assertTrue(foundcube);
-      assertTrue(foundDcube);
-      assertTrue(foundQCube);
+      assertCubesExistence(cubes.getElements(),
+        LensUtil.<String, Boolean>getHashMap("testCube1", true, "testderived", true, "testNoQueryCube", true));
 
       // get queryable cubes
       cubes = target().path("metastore/cubes").queryParam("sessionid", lensSessionId)
         .queryParam("type", "queryable").request(mediaType).get(StringList.class);
-      foundDcube = false;
-      foundcube = false;
-      foundQCube = false;
-      for (String c : cubes.getElements()) {
-        if (c.equalsIgnoreCase("testCube1")) {
-          foundcube = true;
-        }
-        if (c.equalsIgnoreCase("testderived")) {
-          foundDcube = true;
-        }
-        if (c.equalsIgnoreCase("testNoQueryCube")) {
-          foundQCube = true;
-        }
-      }
+      assertCubesExistence(cubes.getElements(),
+        LensUtil.<String, Boolean>getHashMap("testCube1", true, "testderived", true, "testNoQueryCube", false));
 
-      assertTrue(foundcube);
-      assertTrue(foundDcube);
-      assertFalse(foundQCube);
     } finally {
       dropDatabase(DB);
       setCurrentDatabase(prevDb);
@@ -623,7 +577,7 @@ public class TestMetastoreService extends LensJerseyTest {
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now get
       target = target().path("metastore").path("cubes").path("testGetCube");
@@ -639,7 +593,7 @@ public class TestMetastoreService extends LensJerseyTest {
         cube.getDimAttributes().getDimAttribute().size());
       assertEquals(actual.getExpressions().getExpression().size(), cube.getExpressions().getExpression().size());
       assertEquals(actual.getJoinChains().getJoinChain().size(), cube.getJoinChains().getJoinChain().size());
-      Map<String, XJoinChain> chains = new HashMap<String, XJoinChain>();
+      Map<String, XJoinChain> chains = new HashMap<>();
       for (XJoinChain xjc : actual.getJoinChains().getJoinChain()) {
         chains.put(xjc.getName(), xjc);
       }
@@ -721,7 +675,7 @@ public class TestMetastoreService extends LensJerseyTest {
       element = cubeObjectFactory.createXCube(dcube);
       result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now get
       target = target().path("metastore").path("cubes").path("testGetDerivedCube");
@@ -753,7 +707,7 @@ public class TestMetastoreService extends LensJerseyTest {
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       final XCube dcube = createDerivedCube("test_drop_derived_cube", "test_drop_cube", false);
       target = target().path("metastore").path("cubes");
@@ -761,11 +715,11 @@ public class TestMetastoreService extends LensJerseyTest {
       element = cubeObjectFactory.createXCube(dcube);
       result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       target = target().path("metastore").path("cubes").path("test_drop_derived_cube");
       result = target.queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now get should give 404
       try {
@@ -779,7 +733,7 @@ public class TestMetastoreService extends LensJerseyTest {
 
       target = target().path("metastore").path("cubes").path("test_drop_cube");
       result = target.queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now get should give 404
       try {
@@ -811,7 +765,7 @@ public class TestMetastoreService extends LensJerseyTest {
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Update something
       // Add a measure and dimension
@@ -835,7 +789,7 @@ public class TestMetastoreService extends LensJerseyTest {
       element = cubeObjectFactory.createXCube(cube);
       result = target.path(cubeName)
         .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       JAXBElement<XCube> got =
         target.path(cubeName)
@@ -862,7 +816,7 @@ public class TestMetastoreService extends LensJerseyTest {
       element = cubeObjectFactory.createXCube(dcube);
       result =
         target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Update something
       // Add a measure and dimension
@@ -878,7 +832,7 @@ public class TestMetastoreService extends LensJerseyTest {
       element = cubeObjectFactory.createXCube(dcube);
       result = target.path("test_update_derived")
         .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       got = target.path("test_update_derived")
         .queryParam("sessionid", lensSessionId).request(mediaType).get(new GenericType<JAXBElement<XCube>>() {});
@@ -938,7 +892,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result = target.path("store1")
         .queryParam("sessionid", lensSessionId).queryParam("storage", "store1")
         .request(mediaType).put(Entity.xml(cubeObjectFactory.createXStorage(store1)), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       store1 = target.path("store1").queryParam("sessionid", lensSessionId).request(mediaType).get(XStorage.class);
       assertEquals(store1.getName(), "store1");
@@ -1033,7 +987,7 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = target().path("metastore").path("dimensions")
       .queryParam("sessionid", lensSessionId).request(
         mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension)), APIResult.class);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
     XDimensionTable dt = createDimTable("testdim", dimTableName);
     dt.getStorageTables().getStorageTable().add(createStorageTblElement("test", dimTableName, "HOURLY"));
     final FormDataMultiPart mp = new FormDataMultiPart();
@@ -1047,7 +1001,7 @@ public class TestMetastoreService extends LensJerseyTest {
       .path("dimtables")
       .request(mediaType)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
     return dt;
   }
 
@@ -1187,13 +1141,13 @@ public class TestMetastoreService extends LensJerseyTest {
     APIResult result = target.queryParam("sessionid", lensSessionId).request(
       mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension)), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
 
     // create
     result = target.queryParam("sessionid", lensSessionId).request(
       mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension2)), APIResult.class);
     assertNotNull(result);
-    assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+    assertSuccess(result);
   }
 
   @Test
@@ -1306,7 +1260,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result = target.path("testdim")
         .queryParam("sessionid", lensSessionId)
         .request(mediaType).put(Entity.xml(cubeObjectFactory.createXDimension(testDim)), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       XDimension altered = target.path("testdim").queryParam("sessionid", lensSessionId).request(mediaType).get(
         XDimension.class);
@@ -1327,7 +1281,7 @@ public class TestMetastoreService extends LensJerseyTest {
       // drop the dimension
       result = target.path("testdim")
         .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now get should give 404
       try {
@@ -1369,11 +1323,11 @@ public class TestMetastoreService extends LensJerseyTest {
         target().path("metastore/dimtables").path(table)
           .queryParam("cascade", "true")
           .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Drop again, should get 404 now
       try {
-        result = target().path("metastore/dimtables").path(table)
+        target().path("metastore/dimtables").path(table)
           .queryParam("cascade", "true")
           .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
         fail("Should have got 404");
@@ -1428,7 +1382,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .put(Entity.xml(cubeObjectFactory.createXDimensionTable(dt2)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get the updated table
       JAXBElement<XDimensionTable> dtElement2 = target().path("metastore/dimtables").path(table)
@@ -1465,7 +1419,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .put(Entity.xml(cubeObjectFactory.createXDimensionTable(dt3)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get the updated table
       JAXBElement<XDimensionTable> dtElement4 = target().path("metastore/dimtables").path(table)
@@ -1495,7 +1449,7 @@ public class TestMetastoreService extends LensJerseyTest {
         target().path("metastore/dimtables").path(table)
           .queryParam("cascade", "true")
           .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
     } finally {
       setCurrentDatabase(prevDb);
       dropDatabase(DB);
@@ -1542,7 +1496,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       StringList storages = target().path("metastore").path("dimtables")
         .path(table).path("storages")
@@ -1566,7 +1520,7 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target().path("metastore/dimtables/").path(table).path("storages").path("test")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       storages = target().path("metastore").path("dimtables")
         .path(table).path("storages")
@@ -1591,7 +1545,7 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       storages = target().path("metastore").path("dimtables")
         .path(table).path("storages")
@@ -1632,12 +1586,12 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       result = target().path("metastore/dimtables/").path(table).path("storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
 
       JAXBElement<XDimensionTable> dt = target().path("metastore/dimtables").path(table)
@@ -1679,8 +1633,7 @@ public class TestMetastoreService extends LensJerseyTest {
     f.getColumns().getColumn().add(c2);
 
 
-    Map<String, String> properties = new HashMap<String, String>();
-    properties.put("foo", "bar");
+    Map<String, String> properties = LensUtil.getHashMap("foo", "bar");
     f.getProperties().getProperty().addAll(JAXBUtils.xPropertiesFromMap(properties));
     return f;
   }
@@ -1710,7 +1663,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path("facts")
         .request(mediaType)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get all fact names, this should contain the fact table
       StringList factNames = target().path("metastore/facts")
@@ -1748,11 +1701,11 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
 
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Drop again, this time it should give a 404
       try {
-        result = target().path("metastore").path("facts").path(table)
+        target().path("metastore").path("facts").path(table)
           .queryParam("cascade", "true")
           .queryParam("sessionid", lensSessionId).request(mediaType)
           .delete(APIResult.class);
@@ -1792,7 +1745,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path("facts")
         .request(mediaType)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get the created table
       JAXBElement<XFactTable> gotFactElement = target().path("metastore/facts").path(table)
@@ -1818,7 +1771,7 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target().path("metastore").path("facts").path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .put(Entity.xml(cubeObjectFactory.createXFactTable(update)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get the updated table
       gotFactElement = target().path("metastore/facts").path(table)
@@ -1859,11 +1812,11 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
 
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Drop again, this time it should give a 404
       try {
-        result = target().path("metastore").path("facts").path(table)
+        target().path("metastore").path("facts").path(table)
           .queryParam("cascade", "true")
           .queryParam("sessionid", lensSessionId).request(mediaType)
           .delete(APIResult.class);
@@ -1903,7 +1856,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path("facts")
         .request(mediaType)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Test get storages
       StringList storageList = target().path("metastore/facts").path(table).path("storages")
@@ -1916,7 +1869,7 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target().path("metastore/facts").path(table).path("storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Get the fact storage
       StringList got = target().path("metastore/facts").path(table).path("storages")
@@ -1941,10 +1894,9 @@ public class TestMetastoreService extends LensJerseyTest {
       // Drop new storage
       result = target().path("metastore/facts").path(table).path("storages").path("S3")
         .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
-      assertEquals(result.getStatus(), Status.SUCCEEDED);
+      assertSuccess(result);
 
       // Now S3 should not be available
-      storageList = null;
       storageList = target().path("metastore/facts").path(table).path("storages")
         .queryParam("sessionid", lensSessionId).request(mediaType).get(StringList.class);
       assertEquals(storageList.getElements().size(), 2);
@@ -1958,15 +1910,17 @@ public class TestMetastoreService extends LensJerseyTest {
   private XPartition createPartition(String cubeTableName, Date partDate) {
     return createPartition(cubeTableName, partDate, "dt");
   }
+
   private XTimePartSpecElement createTimePartSpecElement(Date partDate, String timeDimension) {
     XTimePartSpecElement timePart = cubeObjectFactory.createXTimePartSpecElement();
     timePart.setKey(timeDimension);
     timePart.setValue(JAXBUtils.getXMLGregorianCalendar(HOURLY.truncate(partDate)));
     return timePart;
   }
+
   private XPartition createPartition(String cubeTableName, Date partDate, final String timeDimension) {
 
-    return createPartition(cubeTableName, Arrays.asList(createTimePartSpecElement(partDate, timeDimension)));
+    return createPartition(cubeTableName, Lists.newArrayList(createTimePartSpecElement(partDate, timeDimension)));
   }
 
   private XPartition createPartition(String cubeTableName, final List<XTimePartSpecElement> timePartSpecs) {
@@ -2007,9 +1961,7 @@ public class TestMetastoreService extends LensJerseyTest {
       final XCube cube = createTestCube(cubeName);
       APIResult result = target().path("metastore").path("cubes").queryParam("sessionid", lensSessionId)
         .request(mediaType).post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
-      if (!result.getStatus().equals(APIResult.Status.SUCCEEDED)) {
-        throw new RuntimeException("Setup failure: Cube Creation failed : " + result.getMessage());
-      }
+      assertSuccess(result);
 
       // Create two facts and fact storage tables with one of the facts
       // not having one of the time dimensions in the partition
@@ -2049,9 +2001,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path("storages/" + storages[0] + "/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
-      if (!partAddResult.getStatus().equals(APIResult.Status.SUCCEEDED)) {
-        throw new RuntimeException("Setup failure: Partition Creation failed : " + partAddResult.getMessage());
-      }
+      assertSuccess(partAddResult);
 
       // End: Setup
 
@@ -2106,7 +2056,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .path("facts")
         .request(mediaType)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       APIResult partAddResult;
       // Add null partition
@@ -2131,7 +2081,7 @@ public class TestMetastoreService extends LensJerseyTest {
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
-      assertEquals(partAddResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partAddResult);
 
       // add same should fail
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
@@ -2143,7 +2093,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult partUpdateResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .put(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
-      assertEquals(partUpdateResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partUpdateResult);
 
       JAXBElement<XPartitionList> partitionsElement = target().path("metastore/facts").path(table)
         .path("storages/S2/partitions")
@@ -2161,7 +2111,7 @@ public class TestMetastoreService extends LensJerseyTest {
       XTimePartSpecElement timePartSpec = readPartition.getTimePartitionSpec().getPartSpecElement().iterator().next();
       XPartSpecElement fullPartSpec = readPartition.getFullPartitionSpec().getPartSpecElement().iterator().next();
       assertEquals(timePartSpec.getKey(), fullPartSpec.getKey());
-      assertEquals(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).format().format(JAXBUtils.getDateFromXML(
+      assertEquals(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).format(JAXBUtils.getDateFromXML(
         timePartSpec.getValue())), fullPartSpec.getValue());
       DateTime date =
         target().path("metastore/cubes").path("testCube").path("latestdate").queryParam("timeDimension", "dt")
@@ -2185,7 +2135,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
 
-      assertEquals(dropResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(dropResult);
 
       // Verify partition was dropped
       partitionsElement = target().path("metastore/facts").path(table).path("storages/S2/partitions")
@@ -2227,7 +2177,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
           APIResult.class);
-      assertEquals(partAddResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partAddResult);
 
       // Verify partition was added
       partitionsElement = target().path("metastore/facts").path(table).path("storages/S2/partitions")
@@ -2239,12 +2189,12 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(partitions.getPartition().size(), 1);
 
       // Drop again by values
-      String[] val = new String[]{HOURLY.format().format(partDate)};
+      String[] val = new String[]{HOURLY.format(partDate)};
       dropResult = target().path("metastore/facts").path(table).path("storages/S2/partition")
         .queryParam("values", StringUtils.join(val, ","))
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
-      assertEquals(dropResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(dropResult);
 
       // Verify partition was dropped
       partitionsElement = target().path("metastore/facts").path(table).path("storages/S2/partitions")
@@ -2286,7 +2236,7 @@ public class TestMetastoreService extends LensJerseyTest {
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
-      assertEquals(partAddResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partAddResult);
 
       // create call for same
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
@@ -2299,7 +2249,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult partUpdateResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .put(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
-      assertEquals(partUpdateResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partUpdateResult);
 
       JAXBElement<XPartitionList> partitionsElement = target().path("metastore/dimtables").path(table)
         .path("storages/test/partitions")
@@ -2332,7 +2282,7 @@ public class TestMetastoreService extends LensJerseyTest {
       XTimePartSpecElement timePartSpec = postedPartition.getTimePartitionSpec().getPartSpecElement().iterator().next();
       XPartSpecElement fullPartSpec = postedPartition.getFullPartitionSpec().getPartSpecElement().iterator().next();
       assertEquals(timePartSpec.getKey(), fullPartSpec.getKey());
-      assertEquals(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).format().format(JAXBUtils.getDateFromXML(
+      assertEquals(UpdatePeriod.valueOf(xp.getUpdatePeriod().name()).format(JAXBUtils.getDateFromXML(
         timePartSpec.getValue())), fullPartSpec.getValue());
 
       assertNull(latestPartition.getTimePartitionSpec());
@@ -2355,7 +2305,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
 
-      assertEquals(dropResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(dropResult);
 
       // Verify partition was dropped
       partitionsElement = target().path("metastore/dimtables").path(table).path("storages/test/partitions")
@@ -2389,7 +2339,7 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
           APIResult.class);
-      assertEquals(partAddResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(partAddResult);
 
       // Verify partition was added
       partitionsElement = target().path("metastore/dimtables").path(table).path("storages/test/partitions")
@@ -2401,18 +2351,39 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(partitions.getPartition().size(), 2);
 
       // Drop again by values
-      String[] val = new String[]{HOURLY.format().format(partDate)};
+      String[] val = new String[]{HOURLY.format(partDate)};
       dropResult = target().path("metastore/dimtables").path(table).path("storages/test/partition")
         .queryParam("values", StringUtils.join(val, ","))
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .delete(APIResult.class);
-      assertEquals(dropResult.getStatus(), Status.SUCCEEDED);
+      assertSuccess(dropResult);
 
       // Verify partition was dropped
       partitionsElement = target().path("metastore/dimtables").path(table).path("storages/test/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .get(new GenericType<JAXBElement<XPartitionList>>() {});
+      partitions = partitionsElement.getValue();
+      assertNotNull(partitions);
+      assertEquals(partitions.getPartition().size(), 0);
+
+      // add again, this time we'll drop by filter
+      partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partitions")
+        .queryParam("sessionid", lensSessionId).request(mediaType)
+        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
+          APIResult.class);
+      assertSuccess(partAddResult);
 
+      // drop by filter
+      dropResult = target().path("metastore/dimtables").path(table).path("storages/test/partitions")
+        .queryParam("filter", "dt='" + HOURLY.format(partDate) + "'")
+        .queryParam("sessionid", lensSessionId).request(mediaType)
+        .delete(APIResult.class);
+      assertSuccess(dropResult);
+
+      // Verify partition was dropped
+      partitionsElement = target().path("metastore/dimtables").path(table).path("storages/test/partitions")
+        .queryParam("sessionid", lensSessionId).request(mediaType)
+        .get(new GenericType<JAXBElement<XPartitionList>>() {});
       partitions = partitionsElement.getValue();
       assertNotNull(partitions);
       assertEquals(partitions.getPartition().size(), 0);
@@ -2507,7 +2478,7 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result =
         target().path("metastore").path("cubes").queryParam("sessionid",
           lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // get a cube table
       Response response = target.path("testhiveCube").queryParam(
@@ -2567,14 +2538,14 @@ public class TestMetastoreService extends LensJerseyTest {
         cubeTarget.queryParam("sessionid", lensSessionId).request(mediaType)
           .post(Entity.xml(cubeObjectFactory.createXCube(flatTestCube)), APIResult.class);
       assertNotNull(result);
-      assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
+      assertSuccess(result);
 
       // create chained dimensions - testdim and testdim2
       createdChainedDimensions();
 
       // Now test flattened view
       final WebTarget flatCubeTarget = target().path("metastore").path("flattened").path("flattestcube");
-      XFlattenedColumns flattenedColumns = null;
+      XFlattenedColumns flattenedColumns;
       JAXBElement<XFlattenedColumns> actualElement = flatCubeTarget.queryParam("sessionid", lensSessionId).request()
         .get(new GenericType<JAXBElement<XFlattenedColumns>>() {});
       flattenedColumns = actualElement.getValue();
@@ -2584,12 +2555,12 @@ public class TestMetastoreService extends LensJerseyTest {
       assertNotNull(columns);
       assertTrue(!columns.isEmpty());
 
-      Set<String> tables = new HashSet<String>();
-      Set<String> colSet = new HashSet<String>();
+      Set<String> tables = new HashSet<>();
+      Set<String> colSet = new HashSet<>();
       populateActualTablesAndCols(columns, tables, colSet);
 
-      assertEquals(tables, new HashSet<String>(Arrays.asList("flattestcube", "testdim", "testdim2")));
-      assertEquals(colSet, new HashSet<String>(Arrays.asList(
+      assertEquals(tables, Sets.newHashSet("flattestcube", "testdim", "testdim2"));
+      assertEquals(colSet, Sets.newHashSet(
         "flattestcube.msr1",
         "flattestcube.msr2",
         "flattestcube.dim1",
@@ -2607,7 +2578,7 @@ public class TestMetastoreService extends LensJerseyTest {
         "dim2chain-testdim2.col2",
         "dim2chain-testdim2.col1",
         "dim2chain-testdim2.dimexpr"
-      )));
+      ));
 
       // Now test flattened view for dimension
       final WebTarget flatDimTarget = target().path("metastore").path("flattened").path("testdim");
@@ -2620,12 +2591,12 @@ public class TestMetastoreService extends LensJerseyTest {
       assertNotNull(columns);
       assertTrue(!columns.isEmpty());
 
-      tables = new HashSet<String>();
-      colSet = new HashSet<String>();
+      tables = new HashSet<>();
+      colSet = new HashSet<>();
       populateActualTablesAndCols(columns, tables, colSet);
 
-      assertEquals(tables, new HashSet<String>(Arrays.asList("testdim", "testdim2")));
-      assertEquals(colSet, new HashSet<String>(Arrays.asList(
+      assertEquals(tables, Sets.newHashSet("testdim", "testdim2"));
+      assertEquals(colSet, Sets.newHashSet(
         "testdim.col2",
         "testdim.col1",
         "testdim.col3",
@@ -2635,7 +2606,7 @@ public class TestMetastoreService extends LensJerseyTest {
         "chain1-testdim2.col2",
         "chain1-testdim2.col1",
         "chain1-testdim2.dimexpr"
-      )));
+      ));
 
     } finally {
       dropDatabase(DB);
@@ -2649,8 +2620,10 @@ public class TestMetastoreService extends LensJerseyTest {
     // Create a fact table object linked to cubeName
     XFactTable f = createFactTable(tableName, cubeName);
     // Create a storage tables
-    f.getStorageTables().getStorageTable().add(createStorageTblElement("S1", tableName, timePartColNames, "HOURLY"));
-
+    for(String storage: storages) {
+      f.getStorageTables().getStorageTable()
+        .add(createStorageTblElement(storage, tableName, timePartColNames, "HOURLY"));
+    }
 
     // Call API to create a fact table and storage table
     final FormDataMultiPart mp = new FormDataMultiPart();
@@ -2664,9 +2637,7 @@ public class TestMetastoreService extends LensJerseyTest {
       .path("facts")
       .request(mediaType)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-    if (!result.getStatus().equals(APIResult.Status.SUCCEEDED)) {
-      throw new RuntimeException("Fact/Storage Table Creation failed");
-    }
+    assertSuccess(result);
   }
 
   private String getUniqueDbName() {