You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2016/05/10 09:32:21 UTC

lens git commit: LENS-1020: Add server config tests to regression

Repository: lens
Updated Branches:
  refs/heads/master d6b121692 -> 59c2f8b11


LENS-1020: Add server config 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/59c2f8b1
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/59c2f8b1
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/59c2f8b1

Branch: refs/heads/master
Commit: 59c2f8b11d1bfef58865e306b9b589c0ee6e0175
Parents: d6b1216
Author: Archana H <ar...@gmail.com>
Authored: Tue May 10 14:59:03 2016 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Tue May 10 14:59:03 2016 +0530

----------------------------------------------------------------------
 lens-regression/pom.xml                         |   5 +
 .../regression/core/constants/DriverConfig.java |   3 +
 .../core/constants/QueryInventory.java          |   9 +-
 .../core/helpers/LensServerHelper.java          |   5 +-
 .../regression/core/helpers/QueryHelper.java    |   9 +-
 .../regression/core/helpers/SessionHelper.java  |   2 +-
 .../apache/lens/regression/util/AssertUtil.java |   1 +
 .../org/apache/lens/regression/util/Util.java   |  41 +-
 .../lens/regression/client/ITListQueryTest.java |   4 +-
 .../regression/client/ITPreparedQueryTests.java |  22 +-
 .../lens/regression/client/ITQueryApiTests.java |  10 +-
 .../lens/regression/client/KillQueryTests.java  |   4 +-
 .../regression/client/SessionResourceTests.java |   6 +-
 .../regression/config/ITServerConfigTests.java  | 601 +++++++++++++++++++
 14 files changed, 661 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/pom.xml
----------------------------------------------------------------------
diff --git a/lens-regression/pom.xml b/lens-regression/pom.xml
index 08a7ece..b9841e8 100644
--- a/lens-regression/pom.xml
+++ b/lens-regression/pom.xml
@@ -49,6 +49,11 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.lens</groupId>
+      <artifactId>lens-driver-jdbc</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
       <groupId>com.jcraft</groupId>
       <artifactId>jsch</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java
index 5a2df11..da13715 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java
@@ -19,6 +19,7 @@
 
 package org.apache.lens.regression.core.constants;
 
+import org.apache.lens.driver.jdbc.JDBCDriverConfConstants;
 import org.apache.lens.server.api.query.constraint.MaxConcurrentDriverQueriesConstraintFactory;
 
 public class DriverConfig {
@@ -33,6 +34,8 @@ public class DriverConfig {
       MAX_CONCURRENT_QUERIES_PER_PRIORITY_KEY;
   public static final String QUEUE_MAX_CONCURRENT = MaxConcurrentDriverQueriesConstraintFactory.
       MAX_CONCURRENT_QUERIES_PER_QUEUE_KEY;
+  public static final String JDBC_POOL_SIZE = JDBCDriverConfConstants.ConnectionPoolProperties.
+      JDBC_POOL_MAX_SIZE.getConfigKey();
 
 }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java
index 869a96b..8de3994 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java
@@ -39,7 +39,11 @@ public class QueryInventory {
 
 
   private QueryInventory() {
+  }
 
+  public static String getSleepQuery(String time){
+    String query = String.format(SLEEP_QUERY_TIME, time);
+    return query;
   }
 
   public static final String QUERY = "cube select id,name from sample_dim where name != 'first'";
@@ -70,8 +74,7 @@ public class QueryInventory {
 
   public static final String SLEEP_FUNCTION = "CREATE TEMPORARY FUNCTION sleep AS 'hive.udf.SampleUdf'";
   public static final String SLEEP_QUERY = "cube select sleep(name) from sample_dim where name != 'first'";
-
-  //  public static final String SLEEP_QUERY = "cube select sleep(name,20000) from sample_dim where name != 'first'";
+  public static final String SLEEP_QUERY_TIME = "cube select sleepTime(name,%s) from sample_dim where name != 'first'";
 
   public static final String NO_CUBE_KEYWORD_QUERY = "select sample_dim_chain.name, measure4 from sample_cube where "
       + "time_range_in(dt, '2014-06-24-23', '2014-06-25-00')";
@@ -79,3 +82,5 @@ public class QueryInventory {
   public static final String QUOTE_QUERY = "cube select id,name from sample_dim2 where name != 'first\\'s'";
 
 }
+
+

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java
index 2f8b9c0..8019182 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/LensServerHelper.java
@@ -50,14 +50,15 @@ public class LensServerHelper extends ServiceManagerHelper {
     int counter = 0;
     Util.runRemoteCommand("bash /usr/local/lens/server/bin/lens-ctl stop");
     Util.runRemoteCommand("bash /usr/local/lens/server/bin/lens-ctl start");
+
     Response response = this.exec("get", "", servLens, null, null, MediaType.TEXT_PLAIN_TYPE, MediaType.TEXT_PLAIN);
     while (response == null && counter < 40) {
-      Thread.sleep(5000);
       log.info("Waiting for Lens server to come up ");
+      Thread.sleep(1000);
       response = this.exec("get", "", servLens, null, null, MediaType.TEXT_PLAIN_TYPE, MediaType.TEXT_PLAIN);
-      log.info("Response:{}", response);
       counter++;
     }
+
     AssertUtil.assertSucceededResponse(response);
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java
index 2b4a750..8bd5290 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java
@@ -299,13 +299,20 @@ public class QueryHelper extends ServiceManagerHelper {
    * @return the query Result
    */
 
-  public QueryResult getResultSet(QueryHandle queryHandle, String fromIndex, String fetchSize,
+  public Response getResultSetResponse(QueryHandle queryHandle, String fromIndex, String fetchSize,
       String sessionHandleString) throws  LensException {
 
     MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "fromindex", fromIndex,
         "fetchsize", fetchSize);
     Response response = this.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset", servLens,
         null, query, MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_XML, null);
+    return response;
+  }
+
+  public QueryResult getResultSet(QueryHandle queryHandle, String fromIndex, String fetchSize,
+      String sessionHandleString) throws  LensException {
+
+    Response response = getResultSetResponse(queryHandle, fromIndex, fetchSize, sessionHandleString);
     AssertUtil.assertSucceededResponse(response);
     QueryResult result = response.readEntity(new GenericType<QueryResult>(){});
     return result;

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/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 4918882..f7ec3e1 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
@@ -119,7 +119,7 @@ public class SessionHelper extends ServiceManagerHelper {
     MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
     Response response = this.exec("delete", SessionURL.SESSION_BASE_URL, servLens, null, query, null,
         outputMediaType, null);
-    AssertUtil.assertSucceededResponse(response);
+    AssertUtil.assertSucceeded(response);
     log.info("Closed Session : {}", sessionHandleString);
   }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java b/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java
index ea36858..c4763aa 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/util/AssertUtil.java
@@ -41,6 +41,7 @@ public class AssertUtil {
    * @param response Response
    * @throws LensException
    */
+
   public static void assertSucceeded(Response response) throws LensException {
     if (response.getStatus() != 200) {
       throw new LensException("Status code should be 200");

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java b/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java
index 6c3d234..1a538da 100644
--- a/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java
+++ b/lens-regression/src/main/java/org/apache/lens/regression/util/Util.java
@@ -62,10 +62,9 @@ import lombok.extern.slf4j.Slf4j;
 public class Util {
 
   private static final String PROPERTY_FILE = "lens.properties";
-  private static String localFilePath = "src/test/resources/";
+  private static String localFilePath = "lens-regression/target/";
   private static String localFile;
   private static String backupFile;
-  private static String remoteFile;
 
   private Util() {
 
@@ -232,22 +231,16 @@ public class Util {
   }
 
   public static void changeConfig(HashMap<String, String> map, String remotePath) throws Exception {
-    String fileName;
-    remoteFile = remotePath;
 
-    Path p = Paths.get(remoteFile);
-
-    fileName = p.getFileName().toString();
+    Path p = Paths.get(remotePath);
+    String fileName = p.getFileName().toString();
     backupFile = localFilePath + "backup-" + fileName;
     localFile = localFilePath + fileName;
-    log.info("Copying " + remoteFile + " to " + localFile);
-    remoteFile("get", remoteFile, localFile);
-    File locfile = new File(localFile);
-    File remfile = new File(backupFile);
-    Files.copy(locfile.toPath(), remfile.toPath(), REPLACE_EXISTING);
-
-    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+    log.info("Copying " + remotePath + " to " + localFile);
+    remoteFile("get", remotePath, localFile);
+    Files.copy(new File(localFile).toPath(), new File(backupFile).toPath(), REPLACE_EXISTING);
+
+    DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     Document doc = docBuilder.parse(new FileInputStream(localFile));
     doc.normalize();
 
@@ -256,8 +249,7 @@ public class Util {
     Element rootElement = (Element) root;
     NodeList property = rootElement.getElementsByTagName("property");
 
-    for (int i = 0; i < property.getLength(); i++)   //Deleting redundant properties from the document
-    {
+    for (int i = 0; i < property.getLength(); i++) {  //Deleting redundant properties from the document
       Node prop = property.item(i);
       Element propElement = (Element) prop;
       Node propChild = propElement.getElementsByTagName("name").item(0);
@@ -267,7 +259,6 @@ public class Util {
         rootElement.removeChild(prop);
         i--;
       }
-
     }
 
     Iterator<Entry<String, String>> ab = map.entrySet().iterator();
@@ -289,7 +280,7 @@ public class Util {
       newNodeElement.appendChild(newValue);
     }
     prettyPrint(doc);
-    remoteFile("put", remoteFile, localFile);
+    remoteFile("put", remotePath, localFile);
   }
 
   /*
@@ -340,16 +331,10 @@ public class Util {
   }
 
   public static void changeConfig(String remotePath) throws JSchException, SftpException {
-    String fileName;
-    remoteFile = remotePath;
-
-    Path p = Paths.get(remoteFile);
-
-    fileName = p.getFileName().toString();
+    String fileName = Paths.get(remotePath).getFileName().toString();
     backupFile = localFilePath + "backup-" + fileName;
-
-    log.info("Copying " + backupFile + " to " + remoteFile);
-    remoteFile("put", remoteFile, backupFile);
+    log.info("Copying " + backupFile + " to " + remotePath);
+    remoteFile("put", remotePath, backupFile);
   }
 
   public static Map<String, String> mapFromXProperties(XProperties xProperties) {

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java
index 60cf26c..2188363 100644
--- a/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java
+++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java
@@ -465,13 +465,15 @@ public class ITListQueryTest extends BaseTestClass {
     Thread.sleep(1000);
 
     String startTime2 = String.valueOf(System.currentTimeMillis());
+    Thread.sleep(2000);
     QueryHandle q2 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName2, diffSession1).getData();
+    Thread.sleep(2000);
     String endTime2 = String.valueOf(System.currentTimeMillis());
 
     Thread.sleep(1000);
 
     String startTime3 = String.valueOf(System.currentTimeMillis());
-    Thread.sleep(1000);
+    Thread.sleep(2000);
     QueryHandle q3 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName3, diffSession2).getData();
     qHelper.killQueryByQueryHandle(q3);
     String endTime3 = String.valueOf(System.currentTimeMillis());

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java
index bf40c74..7be0936 100644
--- a/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java
+++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java
@@ -375,16 +375,8 @@ public class ITPreparedQueryTests extends BaseTestClass {
 
     //TODO : Destroy by user is not working, Commented the fail part, Uncomment it when fixed
 
-    String user2 = "diff", pass = "diff";
-    String session1 = sHelper.openNewSession(user2, pass);
-
-    FormBuilder formData=new FormBuilder();
-    formData.add("sessionid", session1);
-    formData.add("type", "jar");
-    formData.add("path", "file:///usr/local/lens/webapp/lens-server/WEB-INF/lib/lens-query-lib-1.2.5.jar");
-
-    Response response=lens.sendForm("put", "/session/resources/add", formData);
-    AssertUtil.assertSucceededResponse(response);
+    String user = "diff", pass = "diff";
+    String session1 = sHelper.openNewSession(user, pass, lens.getCurrentDB());
 
     QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY);
     Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed marker");
@@ -394,19 +386,19 @@ public class ITPreparedQueryTests extends BaseTestClass {
     Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed");
     logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2);
 
-    response = qHelper.getPreparedQuery(queryPrepareHandle1);
-    AssertUtil.assertSucceededResponse(response);
+    Response response = qHelper.getPreparedQuery(queryPrepareHandle1);
+    Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
     response = qHelper.getPreparedQuery(queryPrepareHandle2);
-    AssertUtil.assertSucceededResponse(response);
+    Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
 
     qHelper.destroyPreparedQuery(null, lens.getUserName());
 
     response = qHelper.getPreparedQuery(queryPrepareHandle1);
     AssertUtil.assertFailedResponse(response);
     response = qHelper.getPreparedQuery(queryPrepareHandle2);
-    //AssertUtil.assertSucceededResponse(response);
+//    Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
 
-    qHelper.destroyPreparedQuery(null, user2);
+    qHelper.destroyPreparedQuery(null, user);
 
     response = qHelper.getPreparedQuery(queryPrepareHandle1);
     AssertUtil.assertFailedResponse(response);

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java
index e16b220..f18053d 100644
--- a/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java
+++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java
@@ -118,12 +118,12 @@ public class ITQueryApiTests extends BaseTestClass {
     Assert.assertNull(qH);
   }
 
-    /* Bug : LENS-1005
+  /* Bug : LENS-1005
      Fails bcos json output cannot be input for any API.
-     Here query handle is in json which caanot be passed to get query status
+     Here query handle is in json which cannot be passed to get query status
   */
 
-  @Test
+  @Test(enabled = false)
   public void testExecuteJson() throws Exception {
     QueryHandle handle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY, null,
         sessionHandleString, null, MediaType.APPLICATION_JSON).getData();
@@ -321,8 +321,8 @@ public class ITQueryApiTests extends BaseTestClass {
     while (lq.getStatus().getStatus() != QueryStatus.Status.SUCCESSFUL) {
       Response response = qHelper.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset",
           servLens, null, query);
-      AssertUtil.assertFailedResponse(response);
-      System.out.println("trial : " + i++);
+      Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+      logger.info("trial : " + i++);
       lq = qHelper.getLensQuery(sessionHandleString, queryHandle);
     }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java
index 8aabe2d..e588c1b 100644
--- a/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java
+++ b/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java
@@ -303,6 +303,7 @@ public class KillQueryTests extends BaseTestClass {
     logger.info("Start Time of 1st Query : " + startTime1);
     Thread.sleep(1000);
     QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY).getData();
+    Thread.sleep(1000);
     String endTime1 = String.valueOf(System.currentTimeMillis());
     logger.info("End Time of 1st Query : " + endTime1);
 
@@ -312,6 +313,7 @@ public class KillQueryTests extends BaseTestClass {
     logger.info("Start Time of 2nd Query : " + startTime2);
     Thread.sleep(1000);
     QueryHandle queryHandle2 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY).getData();
+    Thread.sleep(1000);
     String endTime2 = String.valueOf(System.currentTimeMillis());
     logger.info("End Time of 2nd Query : " + endTime2);
 
@@ -347,7 +349,7 @@ public class KillQueryTests extends BaseTestClass {
     Thread.sleep(1000);
 
     QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName1).getData();
-    logger.info("1st QUERY HANDLE : " + queryHandle1);
+    Thread.sleep(1000);
 
     String endTime1 = String.valueOf(System.currentTimeMillis());
     logger.info("End Time of 1st Query : " + endTime1);

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/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
index 62dd0ba..d6a0ba9 100644
--- 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
@@ -143,14 +143,10 @@ public class SessionResourceTests extends BaseTestClass {
   //Negative Test Case
   @Test
   public void testSessionGetUndefinedParams() throws Exception {
-
     String undefinedParamsKey = "test123";
     MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", undefinedParamsKey);
     Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
-    AssertUtil.assertSucceededResponse(response);
-    StringList strList = response.readEntity(new GenericType<StringList>(StringList.class));
-    HashMap<String, String> map = Util.stringListToMap(strList);
-    Assert.assertNull(map, "Get should have returned empty params list, but didnt");
+    Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
   }
 
 /*

http://git-wip-us.apache.org/repos/asf/lens/blob/59c2f8b1/lens-regression/src/test/java/org/apache/lens/regression/config/ITServerConfigTests.java
----------------------------------------------------------------------
diff --git a/lens-regression/src/test/java/org/apache/lens/regression/config/ITServerConfigTests.java b/lens-regression/src/test/java/org/apache/lens/regression/config/ITServerConfigTests.java
new file mode 100644
index 0000000..f326a4f
--- /dev/null
+++ b/lens-regression/src/test/java/org/apache/lens/regression/config/ITServerConfigTests.java
@@ -0,0 +1,601 @@
+/**
+ * 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.config;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+
+import org.apache.lens.api.StringList;
+import org.apache.lens.api.error.LensHttpStatus;
+import org.apache.lens.api.query.InMemoryQueryResult;
+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.QueryURL;
+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.Util;
+import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.error.LensException;
+import org.apache.lens.server.api.util.LensUtil;
+
+import org.apache.log4j.Logger;
+
+import org.testng.Assert;
+import org.testng.annotations.*;
+
+import com.jcraft.jsch.JSchException;
+
+
+public class ITServerConfigTests extends BaseTestClass {
+
+  private WebTarget servLens;
+  private String sessionHandleString;
+
+  LensServerHelper lens = getLensServerHelper();
+  MetastoreHelper mHelper = getMetastoreHelper();
+  SessionHelper sHelper = getSessionHelper();
+  QueryHelper qHelper = getQueryHelper();
+
+  private final String confFilePath = lens.getServerDir() + "/conf/lens-site.xml";
+  private final String backupConfFilePath = lens.getServerDir() + "/conf/backup-lens-site.xml";
+  private static String lensKillCmd = "ps -ef | grep -i lens | grep -v lens-client | grep -v \"grep\" | "
+      + "awk '{print $2}' | xargs -L1 kill -9";
+
+  private static Logger logger = Logger.getLogger(ITServerConfigTests.class);
+
+
+  @BeforeClass(alwaysRun = true)
+  public void initialize() throws IOException, JSchException {
+    servLens = ServiceManagerHelper.init();
+  }
+
+  @BeforeMethod(alwaysRun = true)
+  public void setUp(Method method) throws Exception {
+    logger.info("Test Name: " + method.getName());
+    Util.runRemoteCommand("cp " + confFilePath + " " + backupConfFilePath);
+  }
+
+
+  @AfterMethod(alwaysRun = true)
+  public void restoreConfig() throws JSchException, IOException, LensException, InterruptedException {
+    logger.info("Executing after method\n");
+    Util.runRemoteCommand("cp " + backupConfFilePath + " " + confFilePath);
+    lens.restart();
+  }
+
+
+  // Session is not getting timedout,
+  // Opened JIRA lens-295
+
+  @Test(enabled = false)
+  public void testServerSessionTimeoutSeconds() throws Exception {
+
+    String sessionHandle = null;
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SESSION_TIMEOUT_SECONDS, "30");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      sessionHandle = sHelper.openNewSession("user", "pass");
+      sHelper.setAndValidateParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER, "test");
+
+      // Waiting for session timeout
+      Thread.sleep(40000);
+
+      MapBuilder query = new MapBuilder("sessionid", sessionHandle, "key", LensConfConstants.SESSION_CLUSTER_USER);
+      Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
+      Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+
+    } finally {
+      if (sessionHandle!=null) {
+        sHelper.closeNewSession(sessionHandle);
+      }
+    }
+  }
+
+  /*
+   * for "lens.server.restart.enabled" and "lens.server.recover.onrestart"
+  */
+
+
+  @DataProvider(name = "boolean_values")
+  public Object[][] data() {
+    String[][] testData = {{"true"}, {"false"}};
+    return testData;
+  }
+
+  @Test(enabled = true, dataProvider = "boolean_values")
+  public void testServerRestartEnabled(String restartEnabled) throws Exception {
+
+    HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_STATE_PERSISTENCE_ENABLED,
+        restartEnabled);
+    Util.changeConfig(map, confFilePath);
+    lens.restart();
+
+    String session = sHelper.openNewSession("user", "pass");
+    lens.restart();
+
+    MapBuilder query = new MapBuilder("sessionid", session);
+    Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
+
+    if (restartEnabled.equalsIgnoreCase("true")) {
+      Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+      sHelper.closeNewSession(session);
+    } else {
+      Assert.assertEquals(response.getStatus(), Response.Status.GONE.getStatusCode());
+    }
+  }
+
+  /*
+   * Test for Property lens.server.snapshot.interval
+  */
+
+  @Test(enabled = true)
+  public void testSnapshotInterval() throws Exception {
+
+    String sessionHandle = null;
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_STATE_PERSISTENCE_INTERVAL_MILLIS,
+          "10000");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      sessionHandle = sHelper.openNewSession("user", "pass");
+      sHelper.setAndValidateParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER, "test");
+      //Waiting for snapshot interval time
+      Thread.sleep(11000);
+      Util.runRemoteCommand(lensKillCmd);  //killing so that lens shouldn't have gracefull shutdown
+      lens.restart();
+
+      String value = sHelper.getSessionParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER);
+      Assert.assertEquals(value, "test");
+
+    } finally {
+      if (sessionHandle != null) {
+        sHelper.closeNewSession(sessionHandle);
+      }
+    }
+
+  }
+
+  /*
+  * Negative Test for Property lens.server.snapshot.interval
+  */
+
+
+  @Test(enabled = true)
+  public void negativeTestSnapshotInterval() throws Exception {
+
+    String sessionHandle = null;
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_STATE_PERSISTENCE_INTERVAL_MILLIS,
+          "50000");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      sessionHandle = sHelper.openNewSession("user", "pass");
+      sHelper.setAndValidateParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER, "test");
+
+      Util.runRemoteCommand(lensKillCmd);
+      lens.restart();
+
+      MapBuilder query = new MapBuilder("sessionid", sessionHandle, "key", LensConfConstants.SESSION_CLUSTER_USER);
+      Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query);
+      Assert.assertEquals(response.getStatus(), Response.Status.GONE.getStatusCode(), "Snapshot interval test failed");
+
+    } finally {
+      if (sessionHandle != null) {
+        sHelper.closeNewSession(sessionHandle);
+      }
+    }
+  }
+
+
+  /*
+   * Test for Property lens.server.persist.location
+  */
+
+  @DataProvider(name = "location_provider")
+  public Object[][] locationProvider() {
+    String[][] locations = {{"file:///tmp/lensserver"}, {lens.getServerHdfsUrl() + "/tmp/lensserver"}};
+    return locations;
+  }
+
+  @Test(enabled = true, dataProvider = "location_provider")
+  public void testSessionPersistLocation(String location) throws Exception {
+
+    String sessionHandle = null;
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_STATE_PERSIST_LOCATION, location);
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      sessionHandle = sHelper.openNewSession("user", "pass");
+      sHelper.setAndValidateParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER, "test");
+
+      lens.restart();
+
+      String value = sHelper.getSessionParam(sessionHandle, LensConfConstants.SESSION_CLUSTER_USER);
+      Assert.assertEquals(value, "test");
+
+    } finally {
+      if (sessionHandle != null) {
+        sHelper.closeNewSession(sessionHandle);
+      }
+    }
+  }
+
+
+  @DataProvider(name = "query_provider")
+  public Object[][] queryProvider() {
+    String[][] query = {{QueryInventory.HIVE_CUBE_QUERY}, {QueryInventory.JDBC_CUBE_QUERY}};
+    return query;
+  }
+
+
+  /*
+   * Test for Property lens.server.mode=READ_ONLY
+  */
+
+  //This is failing
+  @Test(enabled = false)
+  public void testServerModeReadOnly() throws Exception {
+
+    try {
+      sessionHandleString = lens.openSession();
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_MODE, "READ_ONLY");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      sHelper.setAndValidateParam(sessionHandleString, LensConfConstants.SESSION_CLUSTER_USER, "test");
+
+      FormBuilder formData = new FormBuilder();
+      formData.add("sessionid", sessionHandleString);
+      formData.add("query", QueryInventory.QUERY);
+      formData.add("operation", "EXECUTE");
+      formData.add("conf", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />");
+      Response response = lens.sendForm("post", QueryURL.QUERY_URL, formData);
+      Assert.assertEquals(response.getStatus(), Response.Status.METHOD_NOT_ALLOWED.getStatusCode());
+
+      MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+      response = lens.sendQuery("get", QueryURL.QUERYAPI_BASE_URL, query);
+      Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+
+    } finally {
+      lens.closeSession();
+    }
+  }
+
+  /*
+  *  Test for Property lens.server.mode=METASTORE_READONLY,METASTORE_NODROP,OPEN
+  */
+
+
+  @Test(enabled = true)
+  public void testServerMode() throws Exception {
+
+    try {
+      sessionHandleString = lens.openSession(lens.getCurrentDB());
+      String newDb = "TestMetastoreService_testDb1";
+
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.SERVER_MODE, "METASTORE_READONLY");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+      Response response = mHelper.exec("post", MetastoreURL.METASTORE_DATABASES_URL, servLens,
+          null, query, MediaType.APPLICATION_XML_TYPE, null, newDb);
+      Assert.assertEquals(response.getStatus(), Response.Status.METHOD_NOT_ALLOWED.getStatusCode());
+
+      map.put(LensConfConstants.SERVER_MODE, "METASTORE_NODROP");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      response = mHelper.exec("post", MetastoreURL.METASTORE_DATABASES_URL, servLens,
+          null, query, MediaType.APPLICATION_XML_TYPE, null, newDb);
+      AssertUtil.assertSucceededResponse(response);
+      StringList allDb = mHelper.listDatabases();
+      Assert.assertTrue(allDb.getElements().contains(newDb.toLowerCase()), "Unable to Create DB");
+
+      query.put("cascade", "true");
+      response = mHelper.exec("delete", MetastoreURL.METASTORE_DATABASES_URL + "/" + newDb, servLens,
+          null, query, MediaType.APPLICATION_XML_TYPE, null);
+      Assert.assertEquals(response.getStatus(), Response.Status.METHOD_NOT_ALLOWED.getStatusCode());
+
+      map.put(LensConfConstants.SERVER_MODE, "OPEN");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      response = mHelper.exec("delete", MetastoreURL.METASTORE_DATABASES_URL + "/" + newDb, servLens,
+          null, query, MediaType.APPLICATION_XML_TYPE, null);
+      AssertUtil.assertSucceededResponse(response);
+      allDb = mHelper.listDatabases();
+      Assert.assertFalse(allDb.getElements().contains(newDb.toLowerCase()), "Unable to Create DB");
+
+    } finally {
+      if (sessionHandleString != null) {
+        lens.closeSession();
+      }
+    }
+  }
+
+
+  /*
+  * Test for Lens statistics related Properties
+  */
+
+  //TODO : Need to implement this correctly
+  //Rollover value is being ignored
+  @Test(enabled = false)
+  public void testLensStatistics() throws Exception {
+
+    try {
+      sessionHandleString = sHelper.openSession(lens.getCurrentDB());
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.STATS_ROLLUP_SCAN_RATE, "60000",
+          LensConfConstants.STATISTICS_DATABASE_KEY, "stats",
+          LensConfConstants.STATISTICS_WAREHOUSE_KEY, lens.getServerHdfsUrl() + "/tmp/lens/statistics/warehouse");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      FormBuilder formData = new FormBuilder();
+      formData.add("sessionid", sessionHandleString);
+      formData.add("type", "jar");
+      formData.add("path", "file:///usr/local/lens/webapp/lens-server/WEB-INF/lib/lens-query-lib-1.2.3-SNAPSHOT.jar");
+      String time = String.valueOf(System.currentTimeMillis());
+      Response response = lens.sendForm("put", "/session/resources/add", formData);
+      AssertUtil.assertSucceededResponse(response);
+
+      QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY).getData();
+      LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+      Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL);
+
+      QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.WRONG_QUERY).getData();
+      LensQuery lensQuery1 = qHelper.waitForCompletion(queryHandle1);
+
+      Thread.sleep(120000);
+      mHelper.setCurrentDatabase("stats");
+
+      QueryHandle statsQuery = (QueryHandle) qHelper.executeQuery("select handle from stats.queryexecutionstatistics")
+          .getData();
+      lensQuery = qHelper.waitForCompletion(statsQuery);
+      Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL);
+
+      InMemoryQueryResult resultSet = (InMemoryQueryResult) qHelper.getResultSet(statsQuery, "0", "100");
+      for (int i = 0; i < resultSet.getRows().size(); i++) {
+        logger.info(resultSet.getRows().get(i).toString());
+      }
+      Assert.assertTrue(resultSet.getRows().contains(queryHandle), "lensStats are not Saved");
+      Assert.assertTrue(resultSet.getRows().contains(queryHandle1), "lensStats are not Saved");
+
+    } finally {
+      sHelper.closeSession();
+    }
+  }
+
+  //TODO : Add for all possible combination of enablePersistentResultSet and enablePersistentResultSetInDriver
+
+  /*
+  * Test for Property lens.server.max.finished.queries for persistent result set
+  */
+
+  //This is failing
+  @Test(enabled = true)
+  public void testQueryResultRetention() throws Exception {
+    try {
+      sessionHandleString = lens.openSession(lens.getCurrentDB());
+      sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true");
+      sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
+
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.RESULTSET_PURGE_ENABLED, "true",
+          LensConfConstants.RESULTSET_PURGE_INTERVAL_IN_SECONDS, "10",
+          LensConfConstants.QUERY_RESULTSET_RETENTION, "20 sec",
+          LensConfConstants.HDFS_OUTPUT_RETENTION, "60 min");
+
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      MapBuilder query = new MapBuilder("sessionid", sessionHandleString);
+
+      QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY).getData();
+      LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+      Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL);
+
+      Response response = qHelper.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset",
+          servLens, null, query);
+      AssertUtil.assertSucceededResponse(response);
+
+      Thread.sleep(40000);
+
+      response = qHelper.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset",
+          servLens, null, query);
+      Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+
+    } finally {
+      if (sessionHandleString != null) {
+        lens.closeSession();
+      }
+    }
+  }
+
+
+  /*
+  * InMemoryResultSet should be purged after ttl time is over or its read once
+  */
+
+  @Test(enabled = true, dataProvider = "query_provider")
+  public void testInMemoryPurger(String query) throws Exception {
+
+    sessionHandleString = lens.openSession(lens.getCurrentDB());
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false");
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_MAIL_NOTIFY, "false");
+
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.INMEMORY_RESULT_SET_TTL_SECS, "20",
+          LensConfConstants.PURGE_INTERVAL, "10000"); //in millis
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(query).getData();
+      LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+      Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL);
+
+      Response response = qHelper.getResultSetResponse(queryHandle, "0", "100", sessionHandleString);
+      Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+
+      Thread.sleep(30000); //waiting till query gets purged ( ttl + purge interval time)
+
+      response = qHelper.getResultSetResponse(queryHandle, "0", "100", sessionHandleString);
+      Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+
+    } finally {
+      if (sessionHandleString != null) {
+        sHelper.closeNewSession(sessionHandleString);
+      }
+    }
+  }
+
+  // Behaviour is not the same for hive query before result is purged
+  @Test(enabled = true)
+  public void readInmemoryTwiceBeforePurgerTime() throws Exception {
+
+    sessionHandleString = lens.openSession(lens.getCurrentDB());
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false");
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
+    sHelper.setAndValidateParam(LensConfConstants.QUERY_MAIL_NOTIFY, "false");
+
+    try {
+
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.INMEMORY_RESULT_SET_TTL_SECS, "500",
+          LensConfConstants.PURGE_INTERVAL, "10000");
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY).getData();
+      LensQuery lensQuery = qHelper.waitForCompletion(queryHandle);
+      Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed");
+
+      Response response = qHelper.getResultSetResponse(queryHandle, "0", "100", sessionHandleString);
+      Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+
+      response = qHelper.getResultSetResponse(queryHandle, "0", "100", sessionHandleString);
+      //Currently its throwing 500 which needs to be fixed. LENS-823
+      Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+
+    } finally {
+      lens.closeSession();
+    }
+  }
+
+
+  @Test(enabled = true)
+  public void testMaxSessionPerUser() throws Exception {
+
+    String user = "test", pwd = "test";
+    List<String> sessionList = new ArrayList<String>();
+    int maxSession = 3;
+
+    try {
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.MAX_SESSIONS_PER_USER,
+          Integer.toString(maxSession));
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      for (int i = 1; i <= maxSession; i++) {
+        sessionList.add(sHelper.openNewSession(user, pwd, lens.getCurrentDB()));
+      }
+
+      Response response = sHelper.openSessionReturnResponse(user, pwd, lens.getCurrentDB(), null);
+      Assert.assertEquals(response.getStatus(), LensHttpStatus.TOO_MANY_REQUESTS.getStatusCode());
+
+    } finally {
+      for (String session : sessionList) {
+        if (session != null) {
+          sHelper.closeNewSession(session);
+        }
+      }
+    }
+  }
+
+  @Test(enabled = true)
+  public void testMaxSessionPerUserDelete() throws Exception {
+
+    String user1 = "test1", user2 = "test2";
+    String pwd1 = "test1", pwd2 = "test2";
+
+    List<String> sessionList1 = new ArrayList<String>();
+    List<String> sessionList2 = new ArrayList<String>();
+    int maxSession = 5;
+
+    try {
+
+      HashMap<String, String> map = LensUtil.getHashMap(LensConfConstants.MAX_SESSIONS_PER_USER,
+          Integer.toString(maxSession));
+      Util.changeConfig(map, confFilePath);
+      lens.restart();
+
+      for (int i = 0; i < maxSession; i++) {
+        sessionList1.add(sHelper.openNewSession(user1, pwd1, lens.getCurrentDB()));
+        sessionList2.add(sHelper.openNewSession(user2, pwd2, lens.getCurrentDB()));
+      }
+
+      for (int i = 0; i < maxSession; i++) {
+
+        Response response1 = sHelper.openSessionReturnResponse(user1, pwd1, null, null);
+        Response response2 = sHelper.openSessionReturnResponse(user2, pwd2, null, null);
+
+        Assert.assertEquals(response1.getStatus(), LensHttpStatus.TOO_MANY_REQUESTS.getStatusCode());
+        Assert.assertEquals(response2.getStatus(), LensHttpStatus.TOO_MANY_REQUESTS.getStatusCode());
+
+        sHelper.closeNewSession(sessionList1.remove(1));
+        sHelper.closeNewSession(sessionList2.remove(1));
+
+        sessionList1.add(sHelper.openNewSession(user1, pwd1, lens.getCurrentDB()));
+        sessionList2.add(sHelper.openNewSession(user2, pwd2, lens.getCurrentDB()));
+      }
+
+    }finally {
+      for (int i = 0; i < sessionList1.size(); i++) {
+        sHelper.closeNewSession(sessionList1.get(i));
+        sHelper.closeNewSession(sessionList2.get(i));
+      }
+    }
+  }
+}
+