Return-Path: X-Original-To: apmail-geode-commits-archive@minotaur.apache.org Delivered-To: apmail-geode-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 29EEE1872B for ; Wed, 24 Feb 2016 22:14:19 +0000 (UTC) Received: (qmail 88981 invoked by uid 500); 24 Feb 2016 22:14:12 -0000 Delivered-To: apmail-geode-commits-archive@geode.apache.org Received: (qmail 88951 invoked by uid 500); 24 Feb 2016 22:14:12 -0000 Mailing-List: contact commits-help@geode.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@geode.incubator.apache.org Delivered-To: mailing list commits@geode.incubator.apache.org Received: (qmail 88942 invoked by uid 99); 24 Feb 2016 22:14:12 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Feb 2016 22:14:12 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 5801BC04EC for ; Wed, 24 Feb 2016 22:14:12 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.549 X-Spam-Level: X-Spam-Status: No, score=-3.549 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.329] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id NBLbFd8smsnG for ; Wed, 24 Feb 2016 22:14:03 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id 1E1955FB54 for ; Wed, 24 Feb 2016 22:14:01 +0000 (UTC) Received: (qmail 69136 invoked by uid 99); 24 Feb 2016 22:07:20 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Feb 2016 22:07:20 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CD5EFE8ED9; Wed, 24 Feb 2016 22:07:20 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: klund@apache.org To: commits@geode.incubator.apache.org Date: Wed, 24 Feb 2016 22:07:26 -0000 Message-Id: In-Reply-To: <86bf10aa7fc2419abf319471338d66ad@git.apache.org> References: <86bf10aa7fc2419abf319471338d66ad@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [07/20] incubator-geode git commit: GEODE-907: Added tests to support impending refactor GEODE-907: Added tests to support impending refactor Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/0f272db0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/0f272db0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/0f272db0 Branch: refs/heads/feature/GEODE-953 Commit: 0f272db088857c09709c1bedd7afe5ba0050d103 Parents: 6e1b05c Author: Jens Deppe Authored: Thu Feb 18 06:18:35 2016 -0800 Committer: Jens Deppe Committed: Tue Feb 23 14:04:50 2016 -0800 ---------------------------------------------------------------------- geode-pulse/build.gradle | 56 +- .../internal/controllers/PulseController.java | 6 +- .../tools/pulse/internal/data/Cluster.java | 6 + .../tools/pulse/internal/data/DataBrowser.java | 8 +- .../tools/pulse/internal/data/PulseConfig.java | 14 + .../controllers/PulseControllerJUnitTest.java | 756 +++++++++++++++++++ gradle/dependency-versions.properties | 3 +- 7 files changed, 813 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/build.gradle ---------------------------------------------------------------------- diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle index ebd851a..cd3a744 100755 --- a/geode-pulse/build.gradle +++ b/geode-pulse/build.gradle @@ -26,35 +26,39 @@ sourceSets { } dependencies { - compile 'commons-beanutils:commons-beanutils:'+project.'commons-beanutils.version' - compile 'commons-collections:commons-collections:'+project.'commons-collections.version' - compile 'commons-digester:commons-digester:'+project.'commons-digester.version' - compile 'commons-lang:commons-lang:'+project.'commons-lang.version' - compile 'org.springframework.ldap:spring-ldap-core:'+project.'spring-ldap-core.version' - compile 'org.springframework.security:spring-security-config:'+project.'spring-security.version' - compile 'org.springframework.security:spring-security-core:'+project.'spring-security.version' - compile 'org.springframework.security:spring-security-ldap:'+project.'spring-security.version' - compile 'org.springframework.security:spring-security-web:'+project.'spring-security.version' - compile 'org.springframework:spring-tx:'+project.'spring-tx.version' - - providedCompile 'commons-logging:commons-logging:'+project.'commons-logging.version' - - provided 'org.mortbay.jetty:servlet-api:'+project.'mortbay-jetty-servlet-api.version' - provided 'com.google.guava:guava:'+project.'guava.version' + compile 'commons-beanutils:commons-beanutils:' + project.'commons-beanutils.version' + compile 'commons-collections:commons-collections:' + project.'commons-collections.version' + compile 'commons-digester:commons-digester:' + project.'commons-digester.version' + compile 'commons-lang:commons-lang:' + project.'commons-lang.version' + compile 'org.springframework.ldap:spring-ldap-core:' + project.'spring-ldap-core.version' + compile 'org.springframework.security:spring-security-config:' + project.'spring-security.version' + compile 'org.springframework.security:spring-security-core:' + project.'spring-security.version' + compile 'org.springframework.security:spring-security-ldap:' + project.'spring-security.version' + compile 'org.springframework.security:spring-security-web:' + project.'spring-security.version' + compile 'org.springframework:spring-tx:' + project.'spring-tx.version' + + providedCompile 'commons-logging:commons-logging:' + project.'commons-logging.version' + + provided 'org.mortbay.jetty:servlet-api:' + project.'mortbay-jetty-servlet-api.version' + provided 'com.google.guava:guava:' + project.'guava.version' testCompile project(':geode-junit') - testCompile 'org.apache.tomcat.embed:tomcat-embed-core:'+project.'tomcat7.version' - testCompile 'org.apache.tomcat.embed:tomcat-embed-jasper:'+project.'tomcat7.version' - testCompile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:'+project.'tomcat7.version' - testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:'+project.'selenium.version' - testCompile 'org.seleniumhq.selenium:selenium-api:'+project.'selenium.version' - testCompile 'org.seleniumhq.selenium:selenium-remote-driver:'+project.'selenium.version' - testCompile 'org.seleniumhq.selenium:selenium-support:'+project.'selenium.version' - - testRuntime 'com.google.code.gson:gson:'+project.'google-gson.version' - testRuntime 'org.apache.commons:commons-exec:'+project.'commons-exec.version' - + testCompile 'org.apache.tomcat.embed:tomcat-embed-core:' + project.'tomcat7.version' + testCompile 'org.apache.tomcat.embed:tomcat-embed-jasper:' + project.'tomcat7.version' + testCompile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:' + project.'tomcat7.version' + testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + project.'selenium.version' + testCompile 'org.seleniumhq.selenium:selenium-api:' + project.'selenium.version' + testCompile 'org.seleniumhq.selenium:selenium-remote-driver:' + project.'selenium.version' + testCompile 'org.seleniumhq.selenium:selenium-support:' + project.'selenium.version' + testCompile 'org.springframework:spring-test:' + project.'springframework.version' + testCompile 'org.powermock:powermock-core:' + project.'powermock.version' + testCompile 'org.powermock:powermock-module-junit4:' + project.'powermock.version' + testCompile 'org.powermock:powermock-api-mockito:' + project.'powermock.version' + + testRuntime 'com.google.code.gson:gson:' + project.'google-gson.version' + testRuntime 'org.apache.commons:commons-exec:' + project.'commons-exec.version' + testRuntime 'com.jayway.jsonpath:json-path:' + project.'json-path.version' } def generatedResources = "$buildDir/generated-resources/main" http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java index c8737ce..6abb2de 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java @@ -117,7 +117,7 @@ public class PulseController { + ((requestMap == null) ? "" : requestMap) }); } catch (Exception e) { if (LOGGER.fineEnabled()) { - LOGGER.fine("Exception Occured : " + e.getMessage()); + LOGGER.fine("Exception Occurred : " + e.getMessage()); } } @@ -140,7 +140,7 @@ public class PulseController { LOGGER.logJSONError(eJSON, null); } catch (Exception e) { if (LOGGER.fineEnabled()) { - LOGGER.fine("Exception Occured : " + e.getMessage()); + LOGGER.fine("Exception Occurred : " + e.getMessage()); } } } @@ -253,7 +253,7 @@ public class PulseController { LOGGER.logJSONError(eJSON, null); } catch (Exception e) { if (LOGGER.fineEnabled()) { - LOGGER.fine("Exception Occured : " + e.getMessage()); + LOGGER.fine("Exception Occurred : " + e.getMessage()); } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java index 732a1b0..309fdf7 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java @@ -2337,6 +2337,12 @@ public class Cluster extends Thread { } } + /** + * Default constructor only used for testing + */ + public Cluster() { + } + /** * This function is used for calling getUpdator function of ClusterDataFactory http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java index dbad2df..f3b4493 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java @@ -49,10 +49,6 @@ public class DataBrowser { private final ResourceBundle resourceBundle = Repository.get() .getResourceBundle(); - private final String queryHistoryFile = PulseConstants.PULSE_QUERY_HISTORY_FILE_LOCATION - + System.getProperty("file.separator") - + PulseConstants.PULSE_QUERY_HISTORY_FILE_NAME; - private SimpleDateFormat simpleDateFormat = new SimpleDateFormat( PulseConstants.PULSE_QUERY_HISTORY_DATE_PATTERN); @@ -198,7 +194,7 @@ public class DataBrowser { JSONObject queriesJSON = new JSONObject(); try { - inputStream = new FileInputStream(queryHistoryFile); + inputStream = new FileInputStream(Repository.get().getPulseConfig().getQueryHistoryFileName()); String inputStreamString = new Scanner(inputStream, "UTF-8") .useDelimiter("\\A").next(); queriesJSON = new JSONObject(inputStreamString); @@ -237,7 +233,7 @@ public class DataBrowser { boolean operationStatus = false; FileOutputStream fileOut = null; - File file = new File(queryHistoryFile); + File file = new File(Repository.get().getPulseConfig().getQueryHistoryFileName()); try { fileOut = new FileOutputStream(file); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java index 627e37c..4470f7f 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java @@ -53,6 +53,9 @@ public class PulseConfig { // Flag for appending log messages private Boolean logAppend; + // Query history log file + private String queryHistoryFileName; + public PulseConfig() { this.setLogFileName(PulseConstants.PULSE_LOG_FILE_NAME); this.LogFileLocation = PulseConstants.PULSE_LOG_FILE_LOCATION; @@ -61,6 +64,10 @@ public class PulseConfig { this.logDatePattern = PulseConstants.PULSE_LOG_MESSAGE_DATE_PATTERN; this.logLevel = PulseConstants.PULSE_LOG_LEVEL; this.logAppend = PulseConstants.PULSE_LOG_APPEND; + this.queryHistoryFileName = PulseConstants.PULSE_QUERY_HISTORY_FILE_LOCATION + + System.getProperty("file.separator") + + PulseConstants.PULSE_QUERY_HISTORY_FILE_NAME; + } public String getLogFileName() { @@ -123,4 +130,11 @@ public class PulseConfig { this.logAppend = logAppend; } + public String getQueryHistoryFileName() { + return queryHistoryFileName; + } + + public void setQueryHistoryFileName(String queryHistoryFileName) { + this.queryHistoryFileName = queryHistoryFileName; + } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java new file mode 100644 index 0000000..c4f7a49 --- /dev/null +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java @@ -0,0 +1,756 @@ +package com.vmware.gemfire.tools.pulse.controllers; + +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; +import com.vmware.gemfire.tools.pulse.internal.PulseAppListener; +import com.vmware.gemfire.tools.pulse.internal.data.Cluster; +import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig; +import com.vmware.gemfire.tools.pulse.internal.data.Repository; +import com.vmware.gemfire.tools.pulse.internal.json.JSONObject; +import org.apache.commons.collections.buffer.CircularFifoBuffer; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import javax.servlet.ServletContextListener; +import java.io.File; +import java.security.Principal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doReturn; +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.*; + +/** + * @author Jens Deppe + */ +@Category(IntegrationTest.class) +@PrepareForTest(Repository.class) +@RunWith(PowerMockRunner.class) +@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration("classpath*:mvc-dispatcher-servlet.xml") +@PowerMockIgnore("*.IntegrationTest") +public class PulseControllerJUnitTest { + + @Autowired + private WebApplicationContext wac; + + private MockMvc mockMvc; + + private Cluster cluster; + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + private static final String PRINCIPAL_USER = "test-user"; + + private static final String MEMBER_ID = "member1"; + private static final String MEMBER_NAME = "localhost-server"; + private static final String CLUSTER_NAME = "mock-cluster"; + private static final String REGION_NAME = "mock-region"; + private static final String REGION_PATH = "/" + REGION_NAME; + private static final String REGION_TYPE = "PARTITION"; + private static final String AEQ_LISTENER = "async-event-listener"; + private static final String CLIENT_NAME = "client-1"; + + private static final Principal principal; + + static { + principal = () -> PRINCIPAL_USER; + } + + @Before + public void setup() throws Exception { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); + + cluster = Mockito.spy(Cluster.class); + + Cluster.Region region = new Cluster.Region(); + region.setName(REGION_NAME); + region.setFullPath(REGION_PATH); + region.setRegionType(REGION_TYPE); + region.setMemberCount(1); + region.setMemberName(new ArrayList() {{ + add(MEMBER_NAME); + }}); + Cluster.RegionOnMember regionOnMember = new Cluster.RegionOnMember(); + regionOnMember.setRegionFullPath(REGION_PATH); + regionOnMember.setMemberName(MEMBER_NAME); + region.setRegionOnMembers(new ArrayList() {{ + add(regionOnMember); + }}); + cluster.addClusterRegion("/mock-region", region); + + Cluster.Member member = new Cluster.Member(); + member.setId(MEMBER_ID); + member.setName(MEMBER_NAME); + member.setUptime(1L); + + member.setMemberRegions(new HashMap() {{ + put(REGION_NAME, region); + }}); + + Cluster.AsyncEventQueue aeq = new Cluster.AsyncEventQueue(); + aeq.setAsyncEventListener(AEQ_LISTENER); + member.setAsyncEventQueueList(new ArrayList() {{ + add(aeq); + }}); + + Cluster.Client client = new Cluster.Client(); + client.setId("100"); + client.setName(CLIENT_NAME); + client.setUptime(1L); + member.setMemberClientsHMap(new HashMap() {{ + put(CLIENT_NAME, client); + }}); + + cluster.setMembersHMap(new HashMap() {{put(MEMBER_NAME, member);}}); + cluster.setServerName(CLUSTER_NAME); + cluster.setMemoryUsageTrend(new CircularFifoBuffer() {{ + add(1); + add(2); + add(3); + }}); + + Repository repo = Mockito.spy(Repository.class); + + // Set up a partial mock for some static methods + spy(Repository.class); + when(Repository.class, "get").thenReturn(repo); + doReturn(cluster).when(repo).getCluster(); + + PulseConfig config = new PulseConfig(); + File tempQueryLog = tempFolder.newFile("query_history.log"); + config.setQueryHistoryFileName(tempQueryLog.toString()); + doReturn(config).when(repo).getPulseConfig(); + } + + @Test + public void pulseUpdateForClusterDetails() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterDetails\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterDetails.userName").value(PRINCIPAL_USER)) + .andExpect(jsonPath("$.ClusterDetails.totalHeap").value(0)) + .andExpect(jsonPath("$.ClusterDetails.clusterName").value(CLUSTER_NAME)) + ; + } + + @Test + public void pulseUpdateForClusterDiskThroughput() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterDiskThroughput\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputWrites").value(0)) + .andExpect(jsonPath("$.ClusterDiskThroughput.throughputReads").isEmpty()) + .andExpect(jsonPath("$.ClusterDiskThroughput.currentThroughputReads").value(0)) + .andExpect(jsonPath("$.ClusterDiskThroughput.throughputWrites").isEmpty()) + ; + } + + @Test + public void pulseUpdateForClusterGCPauses() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterJVMPauses\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterJVMPauses.currentGCPauses").value(0)) + .andExpect(jsonPath("$.ClusterJVMPauses.gCPausesTrend").isEmpty()) + ; + } + + @Test + public void pulseUpdateForClusterKeyStatistics() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterKeyStatistics\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterKeyStatistics.readPerSecTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterKeyStatistics.queriesPerSecTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterKeyStatistics.writePerSecTrend").isEmpty()) + ; + } + + @Test + public void pulseUpdateForClusterMember() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterMembers\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterMembers.members[0].serverGroups[0]").value("Default")) + .andExpect(jsonPath("$.ClusterMembers.members[0].cpuUsage").value(0)) + .andExpect(jsonPath("$.ClusterMembers.members[0].clients").value(1)) + .andExpect(jsonPath("$.ClusterMembers.members[0].heapUsage").value(0)) + .andExpect(jsonPath("$.ClusterMembers.members[0].name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.ClusterMembers.members[0].currentHeapUsage").value(0)) + .andExpect(jsonPath("$.ClusterMembers.members[0].isManager").value(false)) + .andExpect(jsonPath("$.ClusterMembers.members[0].threads").value(0)) + .andExpect(jsonPath("$.ClusterMembers.members[0].memberId").value(MEMBER_ID)) + .andExpect(jsonPath("$.ClusterMembers.members[0].redundancyZones[0]").value("Default")) + ; + } + + @Test + public void pulseUpdateForClusterMembersRGraph() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterMembersRGraph\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterMembersRGraph.memberCount").value(0)) + .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.data").isEmpty()) + .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.children").isEmpty()) + .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.name").value(0)) + .andExpect(jsonPath("$.ClusterMembersRGraph.clustor.id").value(0)) + ; + } + + @Test + public void pulseUpdateForClusterMemoryUsage() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterMemoryUsage\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterMemoryUsage.currentMemoryUsage").value(0)) + .andExpect(jsonPath("$.ClusterMemoryUsage.memoryUsageTrend", containsInAnyOrder(1, 2, 3))) + ; + } + + @Test + public void pulseUpdateForClusterRegion() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterRegion\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterRegion.clusterName").value(CLUSTER_NAME)) + .andExpect(jsonPath("$.ClusterRegion.userName").value(PRINCIPAL_USER)) + .andExpect(jsonPath("$.ClusterRegion.region[0].regionPath").value(REGION_PATH)) + .andExpect(jsonPath("$.ClusterRegion.region[0].diskReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegion.region[0].memoryUsage").value("0.0000")) + .andExpect(jsonPath("$.ClusterRegion.region[0].getsRate").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].wanEnabled").value(false)) + .andExpect(jsonPath("$.ClusterRegion.region[0].memberCount").value(1)) + .andExpect(jsonPath("$.ClusterRegion.region[0].isHDFSWriteOnly").value("NA")) + .andExpect(jsonPath("$.ClusterRegion.region[0].memberNames[0].name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.ClusterRegion.region[0].memberNames[0].id").value(MEMBER_ID)) + .andExpect(jsonPath("$.ClusterRegion.region[0].emptyNodes").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].type").value(REGION_TYPE)) + .andExpect(jsonPath("$.ClusterRegion.region[0].isEnableOffHeapMemory").value("OFF")) + .andExpect(jsonPath("$.ClusterRegion.region[0].putsRate").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].totalMemory").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].entryCount").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].compressionCodec").value("NA")) + .andExpect(jsonPath("$.ClusterRegion.region[0].name").value(REGION_NAME)) + .andExpect(jsonPath("$.ClusterRegion.region[0].systemRegionEntryCount").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].persistence").value("OFF")) + .andExpect(jsonPath("$.ClusterRegion.region[0].memoryReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegion.region[0].diskWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegion.region[0].memoryWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegion.region[0].dataUsage").value(0)) + .andExpect(jsonPath("$.ClusterRegion.region[0].entrySize").value("0.0000")) + ; + } + + @Test + public void pulseUpdateForClusterRegions() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterRegions\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterRegions.regions[0].regionPath").value(REGION_PATH)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].diskReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memoryUsage").value("0.0000")) + .andExpect(jsonPath("$.ClusterRegions.regions[0].getsRate").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].wanEnabled").value(false)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memberCount").value(1)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].isHDFSWriteOnly").value("NA")) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memberNames[0].name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memberNames[0].id").value(MEMBER_ID)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].emptyNodes").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].type").value(REGION_TYPE)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].isEnableOffHeapMemory").value("OFF")) + .andExpect(jsonPath("$.ClusterRegions.regions[0].putsRate").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].totalMemory").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].entryCount").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].compressionCodec").value("NA")) + .andExpect(jsonPath("$.ClusterRegions.regions[0].name").value(REGION_NAME)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].systemRegionEntryCount").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].persistence").value("OFF")) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memoryReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegions.regions[0].diskWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegions.regions[0].memoryWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterRegions.regions[0].dataUsage").value(0)) + .andExpect(jsonPath("$.ClusterRegions.regions[0].entrySize").value("0.0000")) + ; + } + + @Test + public void pulseUpdateForClusterSelectedRegion() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterSelectedRegion\":{\"regionFullPath\":\"" + REGION_PATH + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.lruEvictionRate").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.getsRate").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.emptyNodes").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.type").value(REGION_TYPE)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isEnableOffHeapMemory").value("OFF")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.path").value(REGION_PATH)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].cpuUsage").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].clients").value(1)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].heapUsage").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].currentHeapUsage").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].isManager").value(false)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].threads").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].memberId").value(MEMBER_ID)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.members[0].uptime").value("0 Hours 0 Mins 1 Secs")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memoryReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.diskWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.dataUsage").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.regionPath").value(REGION_PATH)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.diskReadsTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memoryUsage").value("0.0000")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.wanEnabled").value(false)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memberCount").value(1)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.isHDFSWriteOnly").value("NA")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.putsRate").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.totalMemory").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.entryCount").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.compressionCodec").value("NA")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.name").value(REGION_NAME)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.systemRegionEntryCount").value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.persistence").value("OFF")) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.memoryWritesTrend").isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegion.selectedRegion.entrySize").value("0.0000")) + ; + } + + @Test + public void pulseUpdateForClusterSelectedRegionsMember() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterSelectedRegionsMember\":{\"regionFullPath\":\"" + REGION_PATH + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.diskReadsTrend", MEMBER_NAME).isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.regionFullPath", MEMBER_NAME).value(REGION_PATH)) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.entryCount", MEMBER_NAME).value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.accessor", MEMBER_NAME).value("True")) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.memberName", MEMBER_NAME).value(MEMBER_NAME)) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.memoryReadsTrend", MEMBER_NAME).isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.diskWritesTrend", MEMBER_NAME).isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.memoryWritesTrend", MEMBER_NAME).isEmpty()) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.selectedRegionsMembers.%s.entrySize", MEMBER_NAME).value(0)) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.clusterName").value(CLUSTER_NAME)) + .andExpect(jsonPath("$.ClusterSelectedRegionsMember.userName").value(PRINCIPAL_USER)) + ; + } + + @Test + public void pulseUpdateForClusterWANInfo() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"ClusterWANInfo\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.ClusterWANInfo.connectedClusters").isEmpty()) + ; + } + + @Test + public void pulseUpdateForMemberAsynchEventQueues() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberAsynchEventQueues\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberAsynchEventQueues.isAsyncEventQueuesPresent").value(true)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].batchTimeInterval").value(0)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].batchConflationEnabled").value(false)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].queueSize").value(0)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].senderType").value(false)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].asyncEventListener").value(AEQ_LISTENER)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].batchSize").value(0)) + .andExpect(jsonPath("$.MemberAsynchEventQueues.asyncEventQueues[0].primary").value(false)) + ; + } + + @Test + public void pulseUpdateForMemberClients() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberClients\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberClients.name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].puts").value(0)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].cpuUsage").value("0.0000")) + .andExpect(jsonPath("$.MemberClients.memberClients[0].clientId").value("100")) + .andExpect(jsonPath("$.MemberClients.memberClients[0].queueSize").value(0)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].clientCQCount").value(0)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].name").value(CLIENT_NAME)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].isConnected").value("No")) + .andExpect(jsonPath("$.MemberClients.memberClients[0].threads").value(0)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].isSubscriptionEnabled").value("No")) + .andExpect(jsonPath("$.MemberClients.memberClients[0].gets").value(0)) + .andExpect(jsonPath("$.MemberClients.memberClients[0].uptime").value("0 Hours 0 Mins 1 Secs")) + ; + } + + @Test + public void pulseUpdateForMemberDetails() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberDetails\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberDetails.name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.MemberDetails.offHeapUsedSize").value(0)) + .andExpect(jsonPath("$.MemberDetails.diskStorageUsed").value(0)) + .andExpect(jsonPath("$.MemberDetails.regionsCount").value(1)) + .andExpect(jsonPath("$.MemberDetails.clusterName").value(CLUSTER_NAME)) + .andExpect(jsonPath("$.MemberDetails.name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.MemberDetails.threads").value(0)) + .andExpect(jsonPath("$.MemberDetails.clusterId").isNotEmpty()) + .andExpect(jsonPath("$.MemberDetails.numClients").value(1)) + .andExpect(jsonPath("$.MemberDetails.userName").value(PRINCIPAL_USER)) + .andExpect(jsonPath("$.MemberDetails.offHeapFreeSize").value(0)) + .andExpect(jsonPath("$.MemberDetails.memberId").value(MEMBER_ID)) + .andExpect(jsonPath("$.MemberDetails.status").value("Normal")) + ; + } + + @Test + public void pulseUpdateForMemberDiskThroughput() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberDiskThroughput\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberDiskThroughput.throughputWritesTrend").isEmpty()) + .andExpect(jsonPath("$.MemberDiskThroughput.throughputReadsTrend").isEmpty()) + .andExpect(jsonPath("$.MemberDiskThroughput.throughputWrites").value(0)) + .andExpect(jsonPath("$.MemberDiskThroughput.throughputReads").value(0)) + ; + } + + @Test + public void pulseUpdateForMemberGatewayHub() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberGatewayHub\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberGatewayHub.isGatewayReceiver").value(false)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].batchTimeInterval").value(0)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].batchConflationEnabled").value(false)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].queueSize").value(0)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].senderType").value(false)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].asyncEventListener").value(AEQ_LISTENER)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].batchSize").value(0)) + .andExpect(jsonPath("$.MemberGatewayHub.asyncEventQueues[0].primary").value(false)) + .andExpect(jsonPath("$.MemberGatewayHub.isGatewaySender").value(false)) + .andExpect(jsonPath("$.MemberGatewayHub.regionsInvolved").isEmpty()) + .andExpect(jsonPath("$.MemberGatewayHub.gatewaySenders").isEmpty()) + ; + } + + @Test + public void pulseUpdateForMemberGCPauses() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberGCPauses\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberGCPauses.gcPausesCount").value(0)) + .andExpect(jsonPath("$.MemberGCPauses.gcPausesTrend").isEmpty()) + ; + } + + @Test + public void pulseUpdateForMemberHeapUsage() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberHeapUsage\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberHeapUsage.heapUsageTrend").isEmpty()) + .andExpect(jsonPath("$.MemberHeapUsage.currentHeapUsage").value(0)) + ; + } + + @Test + public void pulseUpdateForMemberKeyStatistics() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberKeyStatistics\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberKeyStatistics.readPerSecTrend").isEmpty()) + .andExpect(jsonPath("$.MemberKeyStatistics.cpuUsageTrend").isEmpty()) + .andExpect(jsonPath("$.MemberKeyStatistics.memoryUsageTrend").isEmpty()) + .andExpect(jsonPath("$.MemberKeyStatistics.writePerSecTrend").isEmpty()) + ; + } + + @Test + public void pulseUpdateForMemberRegions() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MemberRegions\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MemberRegions.name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].fullPath").value(REGION_PATH)) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].entryCount").value(0)) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].name").value(REGION_NAME)) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].diskStoreName").value("")) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].gatewayEnabled").value(false)) + .andExpect(jsonPath("$.MemberRegions.memberRegions[0].entrySize").value("0.0000")) + .andExpect(jsonPath("$.MemberRegions.memberId").value(MEMBER_ID)) + .andExpect(jsonPath("$.MemberRegions.status").value("Normal")) + ; + } + + @Test + public void pulseUpdateForMembersList() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"MembersList\":{\"memberName\":\"" + MEMBER_NAME + "\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.MembersList.clusterMembers[0].name").value(MEMBER_NAME)) + .andExpect(jsonPath("$.MembersList.clusterMembers[0].memberId").value(MEMBER_ID)) + .andExpect(jsonPath("$.MembersList.clusterName").value(CLUSTER_NAME)) + ; + } + + @Test + public void pulseUpdateForPulseVersion() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"PulseVersion\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.PulseVersion.sourceDate").isNotEmpty()) + .andExpect(jsonPath("$.PulseVersion.sourceRepository").isNotEmpty()) + .andExpect(jsonPath("$.PulseVersion.pulseVersion").isNotEmpty()) + .andExpect(jsonPath("$.PulseVersion.sourceRevision").isNotEmpty()) + .andExpect(jsonPath("$.PulseVersion.buildId").isNotEmpty()) + .andExpect(jsonPath("$.PulseVersion.buildDate").isNotEmpty()) + ; + } + + @Test + public void pulseUpdateForQueryStatistics() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"QueryStatistics\":\"{}\"}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.QueryStatistics.queriesList").isEmpty()) + .andExpect(jsonPath("$.QueryStatistics.connectedFlag").value(false)) + .andExpect(jsonPath("$.QueryStatistics.connectedErrorMsg").value("")) + ; + } + + @Test + public void pulseUpdateForSystemAlerts() throws Exception { + this.mockMvc.perform(post("/pulseUpdate") + .param("pulseData", "{\"SystemAlerts\":{\"pageNumber\":\"1\"}}") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.SystemAlerts.pageNumber").value(1)) + .andExpect(jsonPath("$.SystemAlerts.connectedFlag").value(false)) + .andExpect(jsonPath("$.SystemAlerts.connectedErrorMsg").value("")) + .andExpect(jsonPath("$.SystemAlerts.systemAlerts").isEmpty()) + ; + } + + @Test + public void authenticateUserNotLoggedIn() throws Exception { + this.mockMvc.perform(get("/authenticateUser") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.isUserLoggedIn").value(false)); + } + + @Test + public void authenticateUserLoggedIn() throws Exception { + this.mockMvc.perform(get("/authenticateUser") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.isUserLoggedIn").value(true)); + } + + @Test + public void clusterLogout() throws Exception { + MockHttpSession mockSession = new MockHttpSession(wac.getServletContext(), UUID.randomUUID().toString()); + assertFalse(mockSession.isInvalid()); + + this.mockMvc.perform(get("/clusterLogout").principal(principal) + .session(mockSession) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("../Login.html")); + + assertTrue(mockSession.isInvalid()); + } + + @Test + public void pulseVersion() throws Exception { + ServletContextListener listener = new PulseAppListener(); + listener.contextInitialized(null); + + this.mockMvc.perform(get("/pulseVersion") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.pulseVersion").isNotEmpty()) + .andExpect(jsonPath("$.buildId").isNotEmpty()) + .andExpect(jsonPath("$.buildDate").isNotEmpty()) + .andExpect(jsonPath("$.sourceDate").isNotEmpty()) + .andExpect(jsonPath("$.sourceRevision").isNotEmpty()) + .andExpect(jsonPath("$.sourceRepository").isNotEmpty()) + ; + } + + @Test + public void clearAlerts() throws Exception { + this.mockMvc.perform(get("/clearAlerts") + .param("alertType", "1") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.pageNumber").value(1)) + .andExpect(jsonPath("$.systemAlerts").isEmpty()) + .andExpect(jsonPath("$.connectedFlag").value(false)) + .andExpect(jsonPath("$.status").value("deleted")) + ; + } + + @Test + public void acknowledgeAlert() throws Exception { + this.mockMvc.perform(get("/acknowledgeAlert") + .param("alertId", "1") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("deleted")); + } + + @Test + public void dataBrowserRegions() throws Exception { + this.mockMvc.perform(get("/dataBrowserRegions") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.clusterName").value(CLUSTER_NAME)) + .andExpect(jsonPath("$.connectedFlag").value(false)) + .andExpect(jsonPath("$.clusterRegions[0].fullPath").value(REGION_PATH)) + .andExpect(jsonPath("$.clusterRegions[0].regionType").value(REGION_TYPE)) + ; + } + + @Test + public void dataBrowserQuery() throws Exception { + doReturn(new JSONObject().put("foo", "bar")).when(cluster).executeQuery(anyString(), anyString(), anyInt()); + + this.mockMvc.perform(get("/dataBrowserQuery") + .param("query", "SELECT * FROM " + REGION_PATH) + .param("members", MEMBER_NAME) + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.foo").value("bar")) + ; + } + + @Test + public void dataBrowserQueryHistory() throws Exception { + dataBrowserQuery(); + + this.mockMvc.perform(get("/dataBrowserQueryHistory") + .param("action", "view") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.queryHistory[0].queryText").value("SELECT * FROM " + REGION_PATH)) + ; + } + + @Test + public void pulseProductSupport() throws Exception { + this.mockMvc.perform(get("/pulseProductSupport") + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.product").value("gemfire")) + ; + } + + @Test + public void getQueryStatisticsGridModel() throws Exception { + this.mockMvc.perform(get("/getQueryStatisticsGridModel") + .principal(principal) + .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.columnNames", containsInAnyOrder("Query", + "NumExecution", + "TotalExecutionTime(ns)", + "NumExecutionsInProgress", + "NumTimesCompiled", + "NumTimesGlobalIndexLookup", + "NumRowsModified", + "ParseTime(ms)", + "BindTime(ms)", + "OptimizeTime(ms)", + "RoutingInfoTime(ms)", + "GenerateTime(ms)", + "TotalCompilationTime(ms)", + "ExecutionTime(ns)", + "ProjectionTime(ns)", + "RowsModificationTime(ns)", + "QNNumRowsSeen", + "QNMsgSendTime(ns)", + "QNMsgSerTime(ns)", + "QNRespDeSerTime(ns)"))) + ; + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0f272db0/gradle/dependency-versions.properties ---------------------------------------------------------------------- diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties index 611ee7a..5012608 100644 --- a/gradle/dependency-versions.properties +++ b/gradle/dependency-versions.properties @@ -63,6 +63,7 @@ jetty.version = 9.3.6.v20151106 jline.version = 2.12 jmock.version = 2.8.1 jna.version = 4.0.0 +json-path.version = 1.2.0 json4s.version = 3.2.4 jsr305.version = 3.0.1 junit.version = 4.12 @@ -100,4 +101,4 @@ tomcat6.version = 6.0.37 tomcat7.version = 7.0.30 mortbay-jetty-servlet-api.version=2.5-20081211 selenium.version=2.52.0 -google-gson.version=2.3.1 \ No newline at end of file +google-gson.version=2.3.1