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

jinmeiliao pushed a commit to branch feature/GEODE-6574-cms-list-members
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to 
refs/heads/feature/GEODE-6574-cms-list-members by this push:
     new 2bdb384  rework filter
2bdb384 is described below

commit 2bdb38464de7b9478b7f3529268da14792974446
Author: Jinmei Liao <[email protected]>
AuthorDate: Mon Apr 1 15:06:56 2019 -0700

    rework filter
---
 .../rest/MemberManagementServiceDunitTest.java     |  6 ++--
 .../mutators/MemberConfigManager.java              |  5 ++-
 .../internal/ClientClusterManagementService.java   |  9 ++++--
 .../ClientClusterManagementServiceDUnitTest.java   |  8 -----
 .../client/MemberManagementServiceDUnitTest.java   | 37 +++++++++++++++++++---
 .../controllers/MemberManagementController.java    | 15 +++++++--
 6 files changed, 57 insertions(+), 23 deletions(-)

diff --git 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
index 478df0b..d6a9f34 100644
--- 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
+++ 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
@@ -79,12 +79,10 @@ public class MemberManagementServiceDunitTest {
   public void listNonExistentMember() throws Exception {
     MemberConfig config = new MemberConfig();
     config.setId("locator");
-
-
     ClusterManagementResult result = cmsClient.list(config);
-    assertThat(result.isSuccessful()).isFalse();
+    assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode())
-        .isEqualTo(ClusterManagementResult.StatusCode.ENTITY_NOT_FOUND);
+        .isEqualTo(ClusterManagementResult.StatusCode.OK);
     assertThat(result.getResult().size()).isEqualTo(0);
   }
 }
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/mutators/MemberConfigManager.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/mutators/MemberConfigManager.java
index 2f4cd76..3cbf533 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/mutators/MemberConfigManager.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/mutators/MemberConfigManager.java
@@ -34,7 +34,6 @@ import org.apache.geode.management.configuration.MemberConfig;
 import org.apache.geode.management.internal.cli.domain.CacheServerInfo;
 import org.apache.geode.management.internal.cli.domain.MemberInformation;
 import 
org.apache.geode.management.internal.cli.functions.GetMemberInformationFunction;
-import org.apache.geode.management.internal.exceptions.EntityNotFoundException;
 
 public class MemberConfigManager implements ConfigurationManager<MemberConfig> 
{
 
@@ -68,8 +67,8 @@ public class MemberConfigManager implements 
ConfigurationManager<MemberConfig> {
         .stream().filter(m -> (filter.getId() == null || 
filter.getId().equals(m.getName())))
         .map(DistributedMember.class::cast).collect(Collectors.toSet());
 
-    if (members.size() == 0 && filter.getId() != null) {
-      throw new EntityNotFoundException("Member with id %s does not exist");
+    if (members.size() == 0) {
+      return results;
     }
 
     for (DistributedMember member : members) {
diff --git 
a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
 
b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
index 2f97b7c..26592f0 100644
--- 
a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
+++ 
b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
@@ -128,9 +128,14 @@ public class ClientClusterManagementService implements 
ClusterManagementService
     String endPoint = getEndpoint(config);
     String id = config.getId();
 
+    // return restTemplate
+    // .getForEntity(VERSION + endPoint + ((id == null) ? "" : "/{id}"),
+    // ClusterManagementResult.class, id)
+    // .getBody();
+
     return restTemplate
-        .getForEntity(VERSION + endPoint + ((id == null) ? "" : "/{id}"),
-            ClusterManagementResult.class, id)
+        .getForEntity(VERSION + endPoint + ((id == null) ? "" : "/?id=" + id),
+            ClusterManagementResult.class)
         .getBody();
 
   }
diff --git 
a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ClientClusterManagementServiceDUnitTest.java
 
b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ClientClusterManagementServiceDUnitTest.java
index d29be1e..e0c7f28 100644
--- 
a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ClientClusterManagementServiceDUnitTest.java
+++ 
b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ClientClusterManagementServiceDUnitTest.java
@@ -78,13 +78,5 @@ public class ClientClusterManagementServiceDUnitTest {
     ClusterManagementResult result = client.create(region, "");
 
     assertThat(client.isConnected()).isTrue();
-
-    // This all fails in light of running this test repeatedly as a stress 
test. Until we introduce
-    // idempotency and/or the ability to call client.delete we can't do this. 
But it will get fixed
-    // assertThat(result.isSuccessful()).isTrue();
-
-    // Not implemented yet
-    // result = client.delete(region, "");
-    // assertThat(result.isSuccessful()).isTrue();
   }
 }
diff --git 
a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
 
b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
index b69f06b..a0cd8f7 100644
--- 
a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
+++ 
b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
@@ -17,6 +17,11 @@ package org.apache.geode.management.client;
 
 
 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.iterableWithSize;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -29,6 +34,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.context.web.WebAppConfiguration;
 import org.springframework.test.web.client.MockMvcClientHttpRequestFactory;
 import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.RequestPostProcessor;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.context.WebApplicationContext;
 
@@ -37,6 +43,7 @@ import 
org.apache.geode.management.api.ClusterManagementService;
 import org.apache.geode.management.configuration.MemberConfig;
 import org.apache.geode.management.internal.rest.BaseLocatorContextLoader;
 import org.apache.geode.management.internal.rest.PlainLocatorContextLoader;
+import org.apache.geode.management.internal.rest.StandardRequestPostProcessor;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 
@@ -46,6 +53,8 @@ import org.apache.geode.test.dunit.rules.MemberVM;
 @WebAppConfiguration
 public class MemberManagementServiceDUnitTest {
 
+  static RequestPostProcessor POST_PROCESSOR = new 
StandardRequestPostProcessor();
+
   @Autowired
   private WebApplicationContext webApplicationContext;
 
@@ -54,11 +63,12 @@ public class MemberManagementServiceDUnitTest {
 
   private MemberVM server1;
   private ClusterManagementService client;
+  private MockMvc mockMvc;
 
   @Before
   public void before() {
     cluster.setSkipLocalDistributedSystemCleanup(true);
-    MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
+    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
         .build();
     MockMvcClientHttpRequestFactory requestFactory = new 
MockMvcClientHttpRequestFactory(mockMvc);
     client = ClusterManagementServiceProvider.getService(requestFactory);
@@ -91,14 +101,33 @@ public class MemberManagementServiceDUnitTest {
 
   @Test
   @WithMockUser
-  public void noMatch() throws Exception {
+  public void noMatchWithJavaAPI() throws Exception {
     MemberConfig config = new MemberConfig();
     // look for a member with a non-existent id
     config.setId("server");
     ClusterManagementResult result = client.list(config);
-    assertThat(result.isSuccessful()).isFalse();
+    assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode())
-        .isEqualTo(ClusterManagementResult.StatusCode.ENTITY_NOT_FOUND);
+        .isEqualTo(ClusterManagementResult.StatusCode.OK);
     assertThat(result.getResult().size()).isEqualTo(0);
   }
+
+  @Test
+  @WithMockUser
+  public void noMatchWithFilter() throws Exception {
+    mockMvc.perform(get("/v2/members?id=server"))
+        .andExpect(status().isOk())
+        .andExpect(jsonPath("$.statusCode", is("OK")))
+        .andExpect(jsonPath("$.result", iterableWithSize(0)));
+  }
+
+  @Test
+  @WithMockUser
+  public void noMatchWithUriVariable() throws Exception {
+    mockMvc.perform(get("/v2/members/server"))
+        .andExpect(status().isNotFound())
+        .andExpect(jsonPath("$.statusCode", is("ENTITY_NOT_FOUND")))
+        .andExpect(jsonPath("$.statusMessage",
+            is("Unable to find the member with id = server")));
+  }
 }
diff --git 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
index 38156ee..4e4c075 100644
--- 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
+++ 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
@@ -25,9 +25,11 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import org.apache.geode.management.api.ClusterManagementResult;
 import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.internal.exceptions.EntityNotFoundException;
 
 @Controller("members")
 @RequestMapping(MANAGEMENT_API_VERSION)
@@ -40,14 +42,23 @@ public class MemberManagementController extends 
AbstractManagementController {
     config.setId(id);
     ClusterManagementResult result = clusterManagementService.list(config);
 
+    if (result.getResult().size() == 0) {
+      throw new EntityNotFoundException("Unable to find the member with id = " 
+ id);
+    }
+
     return new ResponseEntity<>(result,
         result.isSuccessful() ? HttpStatus.OK : 
HttpStatus.INTERNAL_SERVER_ERROR);
   }
 
   @PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
   @RequestMapping(method = RequestMethod.GET, value = MEMBER_CONFIG_ENDPOINT)
-  public ResponseEntity<ClusterManagementResult> listMembers() {
-    ClusterManagementResult result = clusterManagementService.list(new 
MemberConfig());
+  public ResponseEntity<ClusterManagementResult> listMembers(
+      @RequestParam(required = false) String id) {
+    MemberConfig filter = new MemberConfig();
+    if (id != null) {
+      filter.setId(id);
+    }
+    ClusterManagementResult result = clusterManagementService.list(filter);
 
     return new ResponseEntity<>(result,
         result.isSuccessful() ? HttpStatus.OK : 
HttpStatus.INTERNAL_SERVER_ERROR);

Reply via email to