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);