Repository: lens
Updated Branches:
  refs/heads/master a2b6125c6 -> e4f26aae8


http://git-wip-us.apache.org/repos/asf/lens/blob/e4f26aae/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 3b091f5..45f41c2 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
@@ -1633,6 +1633,153 @@ public class TestMetastoreService extends 
LensJerseyTest {
     }
   }
 
+  private XCubeSegmentation createCubeSegmentation(String segName) {
+    return createCubeSegmentation(segName, "testCube");
+  }
+
+  private XCubeSegmentation createCubeSegmentation(String segName, String 
cubeName) {
+    XCubeSegmentation seg = cubeObjectFactory.createXCubeSegmentation();
+
+    //Create Xproperties
+    XProperties props1 = cubeObjectFactory.createXProperties();
+    XProperty prop1 = new XProperty();
+    prop1.setName("prop_key1");
+    prop1.setValue("prop_val1");
+    props1.getProperty().add(prop1);
+
+    XProperties props2 = cubeObjectFactory.createXProperties();
+    XProperty prop2 = new XProperty();
+    prop2.setName("prop_key2");
+    prop2.setValue("prop_val2");
+    props2.getProperty().add(prop2);
+
+    // Create XcubeSegments
+    XCubeSegments cubes =  new XCubeSegments();
+    XCubeSegment c1 = cubeObjectFactory.createXCubeSegment();
+    c1.setCubeName("cube1");
+    c1.setSegmentParameters(props1);
+
+    XCubeSegment c2 = cubeObjectFactory.createXCubeSegment();
+    c2.setCubeName("cube2");
+    c2.setSegmentParameters(props2);
+
+    cubes.getCubeSegment().add(c1);
+    cubes.getCubeSegment().add(c2);
+
+    seg.setProperties(new XProperties());
+    seg.setName(segName);
+    seg.setWeight(10.0);
+    seg.setCubeName(cubeName);
+    seg.setCubeSegements(cubes);
+    Map<String, String> properties = LensUtil.getHashMap("foo", "bar");
+    
seg.getProperties().getProperty().addAll(JAXBUtils.xPropertiesFromMap(properties));
+
+    return seg;
+  }
+
+  @Test(dataProvider = "mediaTypeData")
+  public void testCreateAndAlterCubeSegmentation(MediaType mediaType) throws 
Exception {
+    final String segname = "testCreateCubeSegmentation";
+    final String DB = dbPFX + "testCreateCubeSegmentation_DB" + 
mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+
+    try {
+      XCubeSegmentation seg = createCubeSegmentation(segname);
+
+      APIResult result = target()
+              .path("metastore")
+              .path("cubesegmentations").queryParam("sessionid", lensSessionId)
+              .request(mediaType)
+              .post(Entity.entity(
+                              new 
GenericEntity<JAXBElement<XCubeSegmentation>>(
+                                      
cubeObjectFactory.createXCubeSegmentation(seg)){}, mediaType),
+                      APIResult.class);
+      assertSuccess(result);
+
+      // Get all cube segmentations, this should contain the cube segmentation 
created earlier
+      StringList segNames = target().path("metastore/cubesegmentations")
+              .queryParam("sessionid", 
lensSessionId).request(mediaType).get(StringList.class);
+      assertTrue(segNames.getElements().contains(segname.toLowerCase()));
+
+      // Get the created cubesegmentation
+      JAXBElement<XCubeSegmentation> gotCubeSegmentation = 
target().path("metastore/cubesegmentations")
+              .path(segname)
+              .queryParam("sessionid", lensSessionId).request(mediaType)
+              .get(new GenericType<JAXBElement<XCubeSegmentation>>() {});
+      XCubeSegmentation gotSeg = gotCubeSegmentation.getValue();
+      assertTrue(gotSeg.getName().equalsIgnoreCase(segname));
+      assertEquals(gotSeg.getWeight(), 10.0);
+      CubeSegmentation cs = 
JAXBUtils.cubeSegmentationFromXCubeSegmentation(seg);
+
+      // Check for cube segemnts
+      boolean foundCube1 = false;
+      for (CubeSegment cube : cs.getCubeSegments()) {
+        if (cube.getName().equalsIgnoreCase("cube1")
+            && cube.getProperties().get("prop_key1").equals("prop_val1")) {
+          foundCube1 = true;
+          break;
+        }
+      }
+      assertTrue(foundCube1);
+      assertEquals(cs.getProperties().get("foo"), "bar");
+
+      // update cube segmentation
+      XCubeSegmentation update = 
JAXBUtils.xsegmentationFromCubeSegmentation(cs);
+      XCubeSegments cubes =  new XCubeSegments();
+      XCubeSegment c1 = cubeObjectFactory.createXCubeSegment();
+      c1.setCubeName("cube11");
+      XCubeSegment c2 = cubeObjectFactory.createXCubeSegment();
+      c2.setCubeName("cube22");
+      cubes.getCubeSegment().add(c1);
+      cubes.getCubeSegment().add(c2);
+
+      update.setWeight(20.0);
+      update.setCubeSegements(cubes);
+
+      result = 
target().path("metastore").path("cubesegmentations").path(segname)
+              .queryParam("sessionid", lensSessionId).request(mediaType)
+              .put(Entity.entity(new 
GenericEntity<JAXBElement<XCubeSegmentation>>(
+                cubeObjectFactory.createXCubeSegmentation(update)){}, 
mediaType),
+              APIResult.class);
+      assertSuccess(result);
+
+      // Get the updated table
+      JAXBElement<XCubeSegmentation>  gotUpdatedCubeSeg = 
target().path("metastore/cubesegmentations").path(segname)
+              .queryParam("sessionid", lensSessionId).request(mediaType)
+              .get(new GenericType<JAXBElement<XCubeSegmentation>>() {});
+      XCubeSegmentation gotUpSeg = gotUpdatedCubeSeg.getValue();
+      CubeSegmentation usg = 
JAXBUtils.cubeSegmentationFromXCubeSegmentation(gotUpSeg);
+
+      assertEquals(usg.getCubeSegments().size(), 2);
+      for (CubeSegment segmnt : usg.getCubeSegments()) {
+        assertTrue(segmnt.getName().equals("cube11") || 
segmnt.getName().equals("cube22"));
+      }
+
+      // Finally, drop the cube segmentation
+      result = 
target().path("metastore").path("cubesegmentations").path(segname)
+              .queryParam("sessionid", lensSessionId).request(mediaType)
+              .delete(APIResult.class);
+
+      assertSuccess(result);
+
+      // Drop again, this time it should give a 404
+      try {
+        target().path("metastore").path("cubesegmentations").path(segname)
+                .queryParam("cascade", "true")
+                .queryParam("sessionid", lensSessionId).request(mediaType)
+                .delete(APIResult.class);
+        fail("Expected 404");
+      } catch (NotFoundException nfe) {
+        // PASS
+      }
+    } finally {
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
+    }
+  }
+
   private XFactTable createFactTable(String factName) {
     return createFactTable(factName, "testCube");
   }

Reply via email to