Repository: lens
Updated Branches:
  refs/heads/master 2f8fae750 -> 3f86f2183


LENS-939 : Add Session tests to regression


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/3f86f218
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/3f86f218
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/3f86f218

Branch: refs/heads/master
Commit: 3f86f2183ff7f823d9f062a93df4d36d602fb981
Parents: 2f8fae7
Author: Archana H <[email protected]>
Authored: Tue Apr 5 15:58:48 2016 +0530
Committer: Deepak Kumar Barr <[email protected]>
Committed: Tue Apr 5 15:58:48 2016 +0530

----------------------------------------------------------------------
 lens-regression/pom.xml                         |  17 +-
 .../regression/core/helpers/SessionHelper.java  |  18 +-
 .../regression/client/SessionResourceTests.java | 381 +++++++++++++++++++
 3 files changed, 409 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/3f86f218/lens-regression/pom.xml
----------------------------------------------------------------------
diff --git a/lens-regression/pom.xml b/lens-regression/pom.xml
index 1943ab2..1a656e3 100644
--- a/lens-regression/pom.xml
+++ b/lens-regression/pom.xml
@@ -44,6 +44,11 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.lens</groupId>
+      <artifactId>lens-server-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
       <groupId>com.jcraft</groupId>
       <artifactId>jsch</artifactId>
     </dependency>
@@ -64,13 +69,15 @@
       <artifactId>jersey-media-multipart</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-common</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.hive</groupId>
       <artifactId>hive-exec</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-client</artifactId>
+    </dependency>
+
   </dependencies>
 
   <build>
@@ -102,7 +109,7 @@
             </plugin>
 
         </plugins>
-    </build>
+  </build>
 
 
 </project>

http://git-wip-us.apache.org/repos/asf/lens/blob/3f86f218/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java
----------------------------------------------------------------------
diff --git 
a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java
 
b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java
index 3c640e2..c829f2a 100644
--- 
a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java
+++ 
b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java
@@ -85,10 +85,10 @@ public class SessionHelper extends ServiceManagerHelper {
     Response response = this.exec("delete", "/session", servLens, null, query);
 
     APIResult result = response.readEntity(APIResult.class);
-    if (result.getStatus() == APIResult.Status.SUCCEEDED) {
+    if (result.getStatus() != APIResult.Status.SUCCEEDED) {
       throw new LensException("Status should be SUCCEEDED");
     }
-    if (response.getStatus() == 200) {
+    if (response.getStatus() != Response.Status.OK.getStatusCode()) {
       throw new LensException("Status code should be 200");
     }
     if (result.getMessage() == null) {
@@ -187,4 +187,18 @@ public class SessionHelper extends ServiceManagerHelper {
     removeResourcesJar(path, sessionHandleString);
   }
 
+  public String getSessionParam(String sessionHandleString, String param) 
throws Exception {
+    MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+    query.put("key", param);
+    Response response = this.exec("get", "/session/params", servLens, null, 
query);
+    AssertUtil.assertSucceededResponse(response);
+    String responseString = response.readEntity(String.class);
+    log.info(responseString);
+    HashMap<String, String> map = Util.stringListToMap(responseString);
+    return map.get(param);
+  }
+
+  public String getSessionParam(String param) throws Exception {
+    return getSessionParam(sessionHandleString, param);
+  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/3f86f218/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java
----------------------------------------------------------------------
diff --git 
a/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java
 
b/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java
new file mode 100644
index 0000000..0dad6b3
--- /dev/null
+++ 
b/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java
@@ -0,0 +1,381 @@
+/**
+ * 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.lens.regression.client;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import javax.xml.bind.JAXBException;
+
+import org.apache.lens.api.StringList;
+import org.apache.lens.api.query.LensQuery;
+import org.apache.lens.api.query.QueryHandle;
+import org.apache.lens.api.query.QueryStatus;
+import org.apache.lens.regression.core.constants.MetastoreURL;
+import org.apache.lens.regression.core.constants.QueryInventory;
+import org.apache.lens.regression.core.constants.SessionURL;
+import org.apache.lens.regression.core.helpers.LensServerHelper;
+import org.apache.lens.regression.core.helpers.MetastoreHelper;
+import org.apache.lens.regression.core.helpers.QueryHelper;
+import org.apache.lens.regression.core.helpers.ServiceManagerHelper;
+import org.apache.lens.regression.core.helpers.SessionHelper;
+import org.apache.lens.regression.core.testHelper.BaseTestClass;
+import org.apache.lens.regression.core.type.FormBuilder;
+import org.apache.lens.regression.core.type.MapBuilder;
+import org.apache.lens.regression.util.AssertUtil;
+import org.apache.lens.regression.util.HadoopUtil;
+import org.apache.lens.regression.util.Util;
+import org.apache.lens.server.api.error.LensException;
+
+import org.apache.log4j.Logger;
+
+import org.testng.Assert;
+import org.testng.annotations.*;
+
+import com.jcraft.jsch.JSchException;
+
+public class SessionResourceTests extends BaseTestClass {
+
+  WebTarget servLens;
+  private String sessionHandleString;
+
+  LensServerHelper lens = getLensServerHelper();
+  MetastoreHelper mHelper = getMetastoreHelper();
+  SessionHelper sHelper = getSessionHelper();
+  QueryHelper qHelper = getQueryHelper();
+
+  private final String hdfsJarPath = lens.getServerHdfsUrl() + "/tmp";
+  private final String localJarPath = new File("").getAbsolutePath() + 
"/lens-regression/target/testjars/";
+  private final String hiveUdfJar = "hiveudftest.jar";
+  private final String serverResourcePath = "/tmp/regression/resources";
+
+  private static Map<String, String> defaultParams = new HashMap<String, 
String>();
+  static {
+    defaultParams.put("lens.query.enable.persistent.resultset", "false");
+    defaultParams.put("lens.query.enable.persistent.resultset.indriver", 
"false");
+  }
+
+  private static String newParamsKey = "datanucleus.autoCreateSchema";
+  private static String newParamsValue = "false";
+  private static String createSleepFunction = "CREATE TEMPORARY FUNCTION sleep 
AS 'SampleUdf'";
+  private static Logger logger = Logger.getLogger(SessionResourceTests.class);
+
+
+  @BeforeClass(alwaysRun = true)
+  public void initialize() throws IOException, JSchException, JAXBException, 
LensException {
+    servLens = ServiceManagerHelper.init();
+
+    HadoopUtil.uploadJars(localJarPath + "/" + hiveUdfJar, hdfsJarPath);
+    logger.info("Creating Local Resource Directory in Server Machine");
+    Util.runRemoteCommand("mkdir -p " + serverResourcePath);
+    String path = hdfsJarPath + "/" + hiveUdfJar;
+    logger.info("Copying " + path + " to Local Resource Directory in Server 
Machine");
+    Util.runRemoteCommand("hadoop fs -get " + path + " " + serverResourcePath);
+  }
+
+  @BeforeMethod(alwaysRun = true)
+  public void setUp(Method method) throws Exception {
+    logger.info("Test Name: " + method.getName());
+    logger.info("Creating a new Session");
+    sessionHandleString = lens.openSession(lens.getCurrentDB());
+  }
+
+  @AfterMethod(alwaysRun = true)
+  public void closeSession() throws Exception {
+    logger.info("Closing Session");
+    lens.closeSession();
+  }
+
+  public boolean checkSessionParamMap(String sessionHandle)  throws Exception {
+    MapBuilder query = new MapBuilder("sessionid", sessionHandle);
+    query.put("verbose", "true");
+    Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, 
query);
+    String responseString = response.readEntity(String.class);
+    HashMap<String, String> map = Util.stringListToMap(responseString);
+    if (map == null){
+      return false;
+    }
+    return true;
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionGet() throws Exception {
+    Response response = lens.exec("get", "/session", servLens, null, null);
+    AssertUtil.assertSucceededResponse(response);
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionPostDelete() throws Exception {
+
+    Map<String, String> resource = new HashMap<String, String>();
+    resource.put("username", lens.getUserName());
+    resource.put("password", lens.getPassword());
+
+    FormBuilder formData = new FormBuilder(resource);
+    Response response = lens.sendForm("post", SessionURL.SESSION_BASE_URL, 
formData);
+    AssertUtil.assertSucceededResponse(response);
+    String sessionHandle = response.readEntity(String.class);
+    Assert.assertTrue(checkSessionParamMap(sessionHandle), "Session is 
Closed");
+
+    MapBuilder query = new MapBuilder("sessionid", sessionHandle);
+    response = lens.exec("delete", SessionURL.SESSION_BASE_URL, servLens, 
null, query);
+    AssertUtil.assertSucceeded(response);
+    Assert.assertFalse(checkSessionParamMap(sessionHandle), "Session is Still 
Open");
+  }
+
+  @Test(enabled = true)
+  public void testSessionParamsGetVerbose()  throws Exception {
+    Assert.assertTrue(checkSessionParamMap(sessionHandleString), "Returned 
Empty Params list");
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionParamsGetNPut()  throws Exception {
+
+    Map<String, String> resource = new HashMap<String, String>();
+    resource.put("sessionid", sessionHandleString);
+    resource.put("key", newParamsKey);
+    resource.put("value", newParamsValue);
+
+    FormBuilder formData = new FormBuilder(resource);
+    Response response = lens.sendForm("put", SessionURL.SESSION_PARAMS_URL, 
formData);
+    AssertUtil.assertSucceeded(response);
+
+    MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+    query.put("key", "datanucleus.autoCreateSchema");
+    response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
+    String responseString = response.readEntity(String.class);
+    HashMap<String, String> map = Util.stringListToMap(responseString);
+    Assert.assertEquals(map.get("datanucleus.autoCreateSchema"),
+            newParamsValue, "From Session Params Put");
+    Assert.assertEquals(map.size(), 1, "Params List contains more than one 
param");
+  }
+
+  //Negative Test Case
+  @Test(enabled = true)
+  public void testSessionGetUndefinedParams()  throws Exception {
+
+    String undefinedParamsKey = "test123";
+    MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+    query.put("key", undefinedParamsKey);
+    Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, 
query);
+    String responseString = response.readEntity(String.class);
+    HashMap<String, String> map = Util.stringListToMap(responseString);
+    Assert.assertNull(map, "Get should have returned empty params list, but 
didnt");
+  }
+
+/*
+ * Testing if Session is restored after server restart
+ */
+
+  @Test(enabled = true)
+  public void testSessionRestore() throws Exception {
+    Map<String, String> resource = new HashMap<String, String>();
+    resource.put("sessionid", sessionHandleString);
+    resource.put("key", newParamsKey);
+    resource.put("value", newParamsValue);
+
+    FormBuilder formData = new FormBuilder(resource);
+    Response response = lens.sendForm("put", SessionURL.SESSION_PARAMS_URL, 
formData);
+    AssertUtil.assertSucceeded(response);
+
+    lens.restart();
+
+    MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+    query.put("key", "datanucleus.autoCreateSchema");
+    response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
+    String responseString = response.readEntity(String.class);
+    HashMap<String, String> map = Util.stringListToMap(responseString);
+    Assert.assertEquals(map.get("datanucleus.autoCreateSchema"),
+            newParamsValue, "From Session Params Put");
+    Assert.assertEquals(map.size(), 1, "Params List contains more than one 
param");
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionHDFSResourcePutNDelete()  throws Exception {
+
+    String path = hdfsJarPath + "/" + hiveUdfJar;
+    sHelper.addResourcesJar(path);
+    sHelper.setAndValidateParam(defaultParams);
+
+    QueryHandle queryHandle = (QueryHandle) 
qHelper.executeQuery(createSleepFunction).getData();
+    LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+    Assert.assertEquals(lensQuery.getStatus().getStatus(), 
QueryStatus.Status.SUCCESSFUL);
+    Assert.assertEquals(lensQuery.getStatus().getStatusMessage().trim(),
+            "Query is successful!", "Query did not succeed");
+
+    sHelper.removeResourcesJar(path);
+
+    queryHandle = (QueryHandle) 
qHelper.executeQuery(createSleepFunction).getData();
+    lensQuery = qHelper.waitForCompletion(queryHandle);
+    Assert.assertEquals(lensQuery.getStatus().getStatus(), 
QueryStatus.Status.FAILED);
+    Assert.assertNotEquals(lensQuery.getStatus().getStatusMessage().trim(),
+            "Query is successful!", "Query Should have Failed but it Passed");
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionLocalResourcePutNDelete()  throws Exception {
+
+    String path = serverResourcePath + "/" + hiveUdfJar;
+    sHelper.addResourcesJar(path);
+    sHelper.setAndValidateParam(defaultParams);
+
+    QueryHandle queryHandle = (QueryHandle) 
qHelper.executeQuery(createSleepFunction).getData();
+    LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+    Assert.assertEquals(lensQuery.getStatus().getStatus(), 
QueryStatus.Status.SUCCESSFUL);
+    Assert.assertEquals(lensQuery.getStatus().getStatusMessage().trim(),
+            "Query is successful!", "Query did not succeed");
+
+    sHelper.removeResourcesJar(path);
+
+    queryHandle = (QueryHandle) 
qHelper.executeQuery(createSleepFunction).getData();
+    lensQuery = qHelper.waitForCompletion(queryHandle);
+    Assert.assertEquals(lensQuery.getStatus().getStatus(), 
QueryStatus.Status.FAILED);
+    Assert.assertNotEquals(lensQuery.getStatus().getStatusMessage().trim(),
+            "Query is successful!", "Query Should have Failed but it Passed");
+
+  }
+
+  @Test(enabled = true)
+  public void testListResources()  throws Exception {
+
+    String path = serverResourcePath + "/" + hiveUdfJar;
+    sHelper.addResourcesJar(path);
+
+    MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+    Response response = lens.sendQuery("get", 
SessionURL.SESSION_LIST_RESOURCE_URL, query);
+    logger.info(response);
+    AssertUtil.assertSucceededResponse(response);
+    StringList responseString = response.readEntity(StringList.class);
+    List<String> jars = responseString.getElements();
+    for(String t : jars) {
+      Assert.assertTrue(t.contains(hiveUdfJar));
+    }
+    System.out.println(responseString);
+  }
+
+
+  @Test(enabled = true)
+  public void testSessionGone()  throws Exception {
+    String newSession = sHelper.openNewSession("test", "test");
+    sHelper.closeNewSession(newSession);
+    MapBuilder query = new MapBuilder("sessionid", newSession);
+
+    // Get Session Params with closed session
+    Response response = lens.sendQuery("get", 
SessionURL.SESSION_LIST_RESOURCE_URL, query);
+    logger.info(response);
+    AssertUtil.assertGoneResponse(response);
+
+    //Setting DB with closed session Handle
+    response = lens.exec("post", MetastoreURL.METASTORE_DATABASES_URL, 
servLens,
+            null, query, MediaType.APPLICATION_XML_TYPE, null, 
lens.getCurrentDB());
+    AssertUtil.assertGoneResponse(response);
+
+    //Explain Query with closed session Handle
+    FormBuilder formData = new FormBuilder();
+    formData.add("sessionid", newSession);
+    formData.add("query", QueryInventory.QUERY);
+    formData.add("operation", "EXPLAIN");
+    formData.add("conf", "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"yes\"?><conf />");
+    response = lens.exec("post", "/queryapi/queries", servLens, null, null,
+            MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, 
formData.getForm());
+    AssertUtil.assertGoneResponse(response);
+
+    //Execute Query with closed session Handle
+    formData = new FormBuilder();
+    formData.add("sessionid", newSession);
+    formData.add("query", QueryInventory.QUERY);
+    formData.add("operation", "EXECUTE");
+    formData.add("conf", "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"yes\"?><conf />");
+    response = lens.exec("post", "/queryapi/queries", servLens, null, null,
+            MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, 
formData.getForm());
+    AssertUtil.assertGoneResponse(response);
+
+  }
+
+  @Test(enabled = true)
+  public void testOpenSessionWithDB()  throws Exception {
+
+    String newDb = "opensessionwithdb";
+    mHelper.createDatabase(newDb);
+    String newSession = sHelper.openNewSession("test", "test", newDb);
+    String curDB = mHelper.getCurrentDatabase(newSession);
+    Assert.assertEquals(curDB, newDb, "Could not open session with passed db");
+    sHelper.closeNewSession(newSession);
+    mHelper.dropDatabase(newDb);
+  }
+
+  @Test(enabled = true)
+  public void testOpenSessionDefault()  throws Exception {
+
+    String newSession = sHelper.openNewSession("test", "test");
+    String curDB = mHelper.getCurrentDatabase(newSession);
+    Assert.assertEquals(curDB, "default", "Could not open session with passed 
db");
+    sHelper.closeNewSession(newSession);
+  }
+
+
+  @Test(enabled = true)
+  public void testOpenSessionDBDoesnotExist()  throws Exception {
+
+    FormBuilder formData = new FormBuilder();
+    formData.add("username", "test");
+    formData.add("password", "test");
+    formData.add("database", "dbdoesnotexist");
+
+    Response response = mHelper.exec("post", "/session", servLens, null, null,
+            MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, 
formData.getForm());
+    AssertUtil.assertFailedResponse(response);
+
+  }
+
+  @Test(enabled = true)
+  public void testDBCeption()  throws Exception {
+
+    String newDb = "opensessionwithdb";
+    String newDb1 = "opensessionwithdb1";
+    mHelper.createDatabase(newDb);
+    mHelper.createDatabase(newDb1);
+
+    String newSession = sHelper.openNewSession("test", "test", newDb);
+    String curDB = mHelper.getCurrentDatabase(newSession);
+    Assert.assertEquals(curDB, newDb, "Could not open session with passed db");
+
+    mHelper.setCurrentDatabase(newSession, newDb1);
+    curDB = mHelper.getCurrentDatabase(newSession);
+    Assert.assertEquals(curDB, newDb1, "Could not open session with passed 
db");
+    sHelper.closeNewSession(newSession);
+    mHelper.dropDatabase(newDb);
+    mHelper.dropDatabase(newDb1);
+  }
+
+}

Reply via email to