You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bo...@apache.org on 2018/08/21 21:34:09 UTC

[geode] branch develop updated: GEODE-5571: Added query to history before query execution

This is an automated email from the ASF dual-hosted git repository.

boglesby pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 291fae0  GEODE-5571: Added query to history before query execution
291fae0 is described below

commit 291fae083fa521df81f70f61d45c892db5001f05
Author: Barry Oglesby <bo...@users.noreply.github.com>
AuthorDate: Tue Aug 21 14:34:03 2018 -0700

    GEODE-5571: Added query to history before query execution
---
 .../controllers/PulseControllerJUnitTest.java      | 100 ++++++++++++++++++++-
 .../internal/controllers/PulseController.java      |  67 ++++++--------
 .../scripts/pulsescript/pages/DataBrowserQuery.js  |   4 +-
 3 files changed, 126 insertions(+), 45 deletions(-)

diff --git a/geode-pulse/src/integrationTest/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/integrationTest/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
index de172bc..0dafa51 100644
--- a/geode-pulse/src/integrationTest/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/integrationTest/java/org/apache/geode/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -19,10 +19,14 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
 import static org.powermock.api.mockito.PowerMockito.spy;
 import static org.powermock.api.mockito.PowerMockito.when;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
@@ -807,11 +811,105 @@ public class PulseControllerJUnitTest {
     doReturn(mapper.createObjectNode().put("foo", "bar")).when(cluster).executeQuery(anyString(),
         anyString(), anyInt());
 
+    String query = "SELECT * FROM " + REGION_PATH;
     this.mockMvc
-        .perform(get("/dataBrowserQuery").param("query", "SELECT * FROM " + REGION_PATH)
+        .perform(get("/dataBrowserQuery").param("query", query)
             .param("members", MEMBER_NAME).principal(principal)
             .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk()).andExpect(jsonPath("$.foo").value("bar"));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
+  }
+
+  @Test
+  public void dataBrowserQueryWithMessageResult() throws Exception {
+    String message = "Query is invalid due to error : Region mentioned in query probably missing /";
+    doReturn(mapper.createObjectNode().put("message", message)).when(cluster).executeQuery(
+        anyString(),
+        anyString(), anyInt());
+
+    String query = "SELECT * FROM " + REGION_PATH;
+    this.mockMvc
+        .perform(get("/dataBrowserQuery").param("query", query)
+            .param("members", MEMBER_NAME).principal(principal)
+            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
+        .andExpect(status().isOk()).andExpect(jsonPath("$.message").value(message));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
+  }
+
+  @Test
+  public void dataBrowserQueryWithExceptionResult() throws Exception {
+    doThrow(new IllegalStateException()).when(cluster).executeQuery(anyString(),
+        anyString(), anyInt());
+
+    String query = "SELECT * FROM " + REGION_PATH;
+    this.mockMvc
+        .perform(get("/dataBrowserQuery").param("query", query)
+            .param("members", MEMBER_NAME).principal(principal)
+            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
+        .andExpect(status().isOk()).andExpect(content().string("{}"));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
+  }
+
+  @Test
+  public void dataBrowserExport() throws Exception {
+    doReturn(mapper.createObjectNode().put("foo", "bar")).when(cluster).executeQuery(anyString(),
+        anyString(), anyInt());
+
+    String query = "SELECT * FROM " + REGION_PATH;
+    this.mockMvc
+        .perform(get("/dataBrowserExport").param("query", query)
+            .param("members", MEMBER_NAME).principal(principal)
+            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
+        .andExpect(status().isOk())
+        .andExpect(header().string("Content-Disposition", "attachment; filename=results.json"))
+        .andExpect(jsonPath("$.foo").value("bar"));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
+  }
+
+  @Test
+  public void dataBrowserExportWithMessageResult() throws Exception {
+    String message = "Query is invalid due to error : Region mentioned in query probably missing /";
+    doReturn(mapper.createObjectNode().put("message", message)).when(cluster).executeQuery(
+        anyString(),
+        anyString(), anyInt());
+
+    String query = "SELECT * FROM " + REGION_PATH;
+    this.mockMvc
+        .perform(get("/dataBrowserExport").param("query", query)
+            .param("members", MEMBER_NAME).principal(principal)
+            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
+        .andExpect(status().isOk())
+        .andExpect(header().string("Content-Disposition", "attachment; filename=results.json"))
+        .andExpect(jsonPath("$.message").value(message));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
+  }
+
+  @Test
+  public void dataBrowserExportWithExceptionResult() throws Exception {
+    doThrow(new IllegalStateException()).when(cluster).executeQuery(anyString(),
+        anyString(), anyInt());
+
+    String query = "SELECT * FROM " + REGION_PATH;
+    this.mockMvc
+        .perform(get("/dataBrowserExport").param("query", query)
+            .param("members", MEMBER_NAME).principal(principal)
+            .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
+        .andExpect(status().isOk())
+        .andExpect(header().string("Content-Disposition", "attachment; filename=results.json"))
+        .andExpect(content().string("{}"));
+
+    // Verify cluster addQueryInHistory is invoked
+    verify(this.cluster).addQueryInHistory(query, principal.getName());
   }
 
   @Test
diff --git a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
index b74c243..4ba3a5e 100644
--- a/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
+++ b/geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java
@@ -319,27 +319,7 @@ public class PulseController {
       logger.debug(e);
     }
 
-    ObjectNode queryResult = mapper.createObjectNode();
-    try {
-
-      if (StringUtils.isNotBlank(query)) {
-        // get cluster object
-        Cluster cluster = Repository.get().getCluster();
-        String userName = request.getUserPrincipal().getName();
-
-        // Call execute query method
-        queryResult = cluster.executeQuery(query, members, limit);
-
-        // Add query in history if query is executed successfully
-        if (!queryResult.has("error")) {
-          // Add html escaped query to history
-          String escapedQuery = StringEscapeUtils.escapeHtml(query);
-          cluster.addQueryInHistory(escapedQuery, userName);
-        }
-      }
-    } catch (Exception e) {
-      logger.debug("Exception Occurred : ", e);
-    }
+    ObjectNode queryResult = executeQuery(request, query, members, limit);
 
     response.getOutputStream().write(queryResult.toString().getBytes());
   }
@@ -406,27 +386,7 @@ public class PulseController {
       logger.debug(e);
     }
 
-    ObjectNode queryResult = mapper.createObjectNode();
-    try {
-
-      if (StringUtils.isNotBlank(query)) {
-        // get cluster object
-        Cluster cluster = Repository.get().getCluster();
-        String userName = request.getUserPrincipal().getName();
-
-        // Call execute query method
-        queryResult = cluster.executeQuery(query, members, limit);
-
-        // Add query in history if query is executed successfully
-        if (!queryResult.has("error")) {
-          // Add html escaped query to history
-          String escapedQuery = StringEscapeUtils.escapeHtml(query);
-          cluster.addQueryInHistory(escapedQuery, userName);
-        }
-      }
-    } catch (Exception e) {
-      logger.debug("Exception Occurred : ", e);
-    }
+    ObjectNode queryResult = executeQuery(request, query, members, limit);
 
     response.setContentType("application/json");
     response.setHeader("Content-Disposition", "attachment; filename=results.json");
@@ -474,4 +434,27 @@ public class PulseController {
       logger.debug("Exception Occurred : ", e);
     }
   }
+
+  private ObjectNode executeQuery(HttpServletRequest request, String query, String members,
+      int limit) {
+    ObjectNode queryResult = mapper.createObjectNode();
+    try {
+
+      if (StringUtils.isNotBlank(query)) {
+        // get cluster object
+        Cluster cluster = Repository.get().getCluster();
+        String userName = request.getUserPrincipal().getName();
+
+        // Add html escaped query to history
+        String escapedQuery = StringEscapeUtils.escapeHtml(query);
+        cluster.addQueryInHistory(escapedQuery, userName);
+
+        // Call execute query method
+        queryResult = cluster.executeQuery(query, members, limit);
+      }
+    } catch (Exception e) {
+      logger.debug("Exception Occurred : ", e);
+    }
+    return queryResult;
+  }
 }
diff --git a/geode-pulse/src/main/webapp/scripts/pulsescript/pages/DataBrowserQuery.js b/geode-pulse/src/main/webapp/scripts/pulsescript/pages/DataBrowserQuery.js
index 9ef656a..2a59382 100644
--- a/geode-pulse/src/main/webapp/scripts/pulsescript/pages/DataBrowserQuery.js
+++ b/geode-pulse/src/main/webapp/scripts/pulsescript/pages/DataBrowserQuery.js
@@ -154,11 +154,11 @@ function executeDBQuery(){
         if(!isEmpty($('#memberAccordion').html())){
           populateResultGrids();
         }
-        // Update queries list in history panel
-        updateQueryHistory("view","");
         //$('.queryHistoryScroll-pane').jScrollPane();/*Custome scroll*/
         
       }
+      // Update queries list in history panel
+      updateQueryHistory("view","");
     }
     
     // Hide Loading/Busy symbol