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

gosonzhang pushed a commit to branch TUBEMQ-336
in repository https://gitbox.apache.org/repos/asf/incubator-tubemq.git


The following commit(s) were added to refs/heads/TUBEMQ-336 by this push:
     new 4cf9e9a  [TUBEMQ-402] add modify rest api for clusters (#308)
4cf9e9a is described below

commit 4cf9e9aabe544dcef787e02e5511a7aea044883d
Author: Yuanbo Liu <[email protected]>
AuthorDate: Thu Nov 5 19:38:01 2020 +0800

    [TUBEMQ-402] add modify rest api for clusters (#308)
---
 .../controller/cluster/ClusterController.java      | 28 ++++++++++++++++++
 .../manager/controller/TestClusterController.java  | 33 ++++++++++++++++++++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git 
a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
 
b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
index 599ce15..58fe8f9 100644
--- 
a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
+++ 
b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
@@ -37,6 +37,7 @@ import org.apache.tubemq.manager.entry.NodeEntry;
 import org.apache.tubemq.manager.repository.NodeRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -96,5 +97,32 @@ public class ClusterController {
         return queryMaster(url);
     }
 
+    /**
+     * modify cluster info, need to check token and
+     * make sure user has authorization to modify it.
+     */
+    @RequestMapping(value = "/modify", method = RequestMethod.POST,
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public @ResponseBody String modifyClusterInfo(
+            @RequestBody Map<String, String> requestBody) throws Exception {
+        String token = requestBody.get("confModAuthToken");
+        log.info("token is {}, request body size is {}", token, 
requestBody.keySet());
+        int clusterId = Integer.parseInt(requestBody.get("clusterId"));
+        if (StringUtils.isNotBlank(token)) {
+            requestBody.remove("clusterId");
+            NodeEntry nodeEntry = 
nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(
+                    clusterId);
+            String url = SCHEMA + nodeEntry.getIp() + ":" + 
nodeEntry.getWebPort()
+                    + "/" + TUBE_REQUEST_PATH + "?" + 
covertMapToQueryString(requestBody);
+            return queryMaster(url);
+        } else {
+            TubeResult result = new TubeResult();
+            result.setErrCode(-1);
+            result.setResult(false);
+            result.setErrMsg("token is not correct");
+            return gson.toJson(result);
+        }
+    }
+
 
 }
diff --git 
a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
 
b/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
index c31fb8d..efd1cb1 100644
--- 
a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
+++ 
b/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
@@ -20,6 +20,7 @@ package org.apache.tubemq.manager.controller;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 
 import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import 
org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.http.MediaType;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.MvcResult;
@@ -59,7 +61,7 @@ public class TestClusterController {
     private NodeEntry getNodeEntry() {
         NodeEntry nodeEntry = new NodeEntry();
         nodeEntry.setMaster(true);
-        nodeEntry.setIp("10.215.128.83");
+        nodeEntry.setIp("127.0.0.1");
         nodeEntry.setWebPort(8080);
         return nodeEntry;
     }
@@ -117,5 +119,32 @@ public class TestClusterController {
                 result.getResponse().getContentType());
     }
 
-
+    @Test
+    public void testTopicAdd() throws Exception {
+        String jsonStr = "{\n"
+                + "  \"type\": \"op_modify\",\n"
+                + "  \"method\": \"admin_add_new_topic_record\",\n"
+                + "  \"confModAuthToken\": \"test\",\n"
+                + "  \"clusterId\": 1,\n"
+                + "  \"createUser\": \"webapi\",\n"
+                + "  \"topicName\": \"test\",\n"
+                + "  \"deleteWhen\": \"0 0 0 0 0\",\n"
+                + "  \"unflushThreshold\": 1000,\n"
+                + "  \"acceptPublish\": true,\n"
+                + "  \"numPartitions\": 3,\n"
+                + "  \"deletePolicy\": \"\",\n"
+                + "  \"unflushInterval\": 1000,\n"
+                + "  \"acceptSubscribe\": true,\n"
+                + "  \"brokerId\": 12323\n"
+                + "}\n";
+        NodeEntry nodeEntry = getNodeEntry();
+        
when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
+                .thenReturn(nodeEntry);
+        RequestBuilder request = post("/v1/cluster/modify")
+                .contentType(MediaType.APPLICATION_JSON).content(jsonStr);
+        MvcResult result = mockMvc.perform(request).andReturn();
+        String resultStr = result.getResponse().getContentAsString();
+        log.info("result json string is {}, response type is {}", resultStr,
+                result.getResponse().getContentType());
+    }
 }

Reply via email to