From f002675af11f79a13ea29c568374800fcf2aa222 Mon Sep 17 00:00:00 2001 From: "xiaochun.xxc" Date: Thu, 18 Apr 2019 23:06:27 +0800 Subject: [PATCH] add cmdb testcases --- .../nacos/test/naming/Cmdb_ITCase.java | 669 ++++++++++++++++++ 1 file changed, 669 insertions(+) create mode 100644 test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java new file mode 100644 index 000000000..ac252840f --- /dev/null +++ b/test/src/test/java/com/alibaba/nacos/test/naming/Cmdb_ITCase.java @@ -0,0 +1,669 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.nacos.test.naming; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.api.naming.NamingFactory; +import com.alibaba.nacos.api.naming.NamingService; +import org.springframework.http.HttpMethod; +import com.alibaba.nacos.naming.NamingApp; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.MultiValueMap; +import org.springframework.web.util.UriComponentsBuilder; + +import static com.alibaba.nacos.client.naming.net.HttpClient.request; +import static com.alibaba.nacos.test.naming.NamingBase.*; +import static com.alibaba.nacos.test.naming.NamingBase.randomDomainName; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = NamingApp.class, properties = {"server.servlet.context-path=/nacos", + "server.port=7001"}, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class Cmdb_ITCase { + + private NamingService naming; + private URL base; + public static final long TIME_OUT = 3000; + + @Autowired + private TestRestTemplate restTemplate; + + @LocalServerPort + private int port; + + @Before + public void setUp() throws Exception { + String url = String.format("http://%s:%s", TEST_IP_4_DOM_1, port); + this.base = new URL(url); + + if (naming == null) { + naming = NamingFactory.createNamingService(TEST_IP_4_DOM_1 + ":" + port); + } + } + + @After + public void cleanup() throws Exception { + } + + /** + * @TCDescription : cmdb注册的label,同机房优先 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_1() throws Exception { + String serviceName = randomDomainName(); + System.out.println(serviceName); + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + String serviceName2 = randomDomainName(); + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(5L); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + Assert.assertEquals(1, json.getJSONArray("hosts").size()); + } + + + /** + * @TCDescription : cmdb未注册的label,获取所有的instance + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_2() throws Exception { + String serviceName = randomDomainName(); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + String serviceName2 = randomDomainName(); + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + Assert.assertEquals(6, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,根据IP获取优先的instance + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_3() throws Exception { + String serviceName = randomDomainName(); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + String serviceName2 = randomDomainName(); + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "66.66.66.66") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + System.out.println("instance list = " + json); + Assert.assertEquals(2, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,对不同的serviceName的不影响 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_4() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request( "/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam( "namespaceId", Constants.DEFAULT_NAMESPACE_ID) + .done(), + String.class, + HttpMethod.GET); + System.out.println("service list = " + JSON.parseObject(httpResult.getBody())); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "66.66.66.66") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + + System.out.println("instance list = " + json); + Assert.assertEquals(2, json.getJSONArray("hosts").size()); + } + + + /** + * @TCDescription : cmdb规则不同,根据IP获取优先的instance,对不同的serviceName的不影响 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_5() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "77.77.77.77") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + System.out.println("instance list = " + json); + Assert.assertEquals(6, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,selector为空时 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_6() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + + System.out.println("instance list = " + json); + Assert.assertEquals(1, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,selector规则改变 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_7() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + List params = Arrays.asList("serviceName", serviceName, "protectThreshold", "0", "selector", json.toString()); + + + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + System.out.println("instance list = " + json); + Assert.assertEquals(1, json.getJSONArray("hosts").size()); + + httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", "") + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + + System.out.println("instance list = " + json); + Assert.assertEquals(6, json.getJSONArray("hosts").size()); + } + + + /** + * @TCDescription : cmdb规则不同,expression为空 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_8() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", ""); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + System.out.println("instance list = " + json); + Assert.assertEquals(6, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,expression为null,获取所有的instance + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_9() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label"); + json.put("expression", ""); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + + httpResult = request("/nacos/v1/ns/instance/list", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("clientIP", "11.11.11.11") + .done(), + String.class, + HttpMethod.GET); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + json = JSON.parseObject(httpResult.getBody()); + System.out.println("instance list = " + json); + Assert.assertEquals(6, json.getJSONArray("hosts").size()); + } + + /** + * @TCDescription : cmdb规则不同,type为label填写异常 + * @throws Exception + */ + @Test + public void cmdb_getInstanceList_10() throws Exception { + String serviceName = randomDomainName(); + String serviceName2 = randomDomainName(); + System.out.println(serviceName); + + namingServiceCreate(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "11.11.11.11", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "22.22.22.22", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "33.33.33.33", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "44.44.44.44", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "55.55.55.55", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + instanceRegister(serviceName, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "66.66.66.66", String.valueOf(TEST_PORT_4_DOM_1), "c1"); + + namingServiceCreate(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "77.77.77.77", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + instanceRegister(serviceName2, Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "88.88.88.88", String.valueOf(TEST_PORT_4_DOM_1), "c2"); + + TimeUnit.SECONDS.sleep(10); + + JSONObject json = new JSONObject(); + json.put("type", "label1"); + json.put("expression", "CONSUMER.label.label1 = PROVIDER.label.label1 & CONSUMER.label.label2 = PROVIDER.label.label2"); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0") + .appendParam("selector", json.toJSONString()) + .done(), + String.class, + HttpMethod.PUT); + Assert.assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, httpResult.getStatusCodeValue()); + } + + public void instanceRegister(String serviceName, String namespace, String groupName, String ip, String port, String clusterName) throws + IOException { + ResponseEntity httpResult = request( "/nacos/v1/ns/instance", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("ip", ip) + .appendParam("port", port) + .appendParam("namespaceId", namespace) + .appendParam("groupName", groupName) + .appendParam("clusterName", clusterName) + .appendParam("ephemeral", "false") + .done(), + String.class, + HttpMethod.POST); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + } + + public void namingServiceCreate(String serviceName, String namespace) throws IOException { + namingServiceCreate(serviceName, namespace, Constants.DEFAULT_GROUP); + } + + public void namingServiceCreate(String serviceName, String namespace, String groupName) throws IOException { + List listParams = Arrays.asList("serviceName", serviceName, "protectThreshold", "0.3", "namespaceId", namespace, "groupName", groupName); + ResponseEntity httpResult = request("/nacos/v1/ns/service", + Params.newParams() + .appendParam("serviceName", serviceName) + .appendParam("protectThreshold", "0.3") + .appendParam( "namespaceId", namespace) + .appendParam("groupName", groupName) + .done(), + String.class, + HttpMethod.POST); + Assert.assertEquals(HttpURLConnection.HTTP_OK, httpResult.getStatusCodeValue()); + } + + private ResponseEntity request(String path, MultiValueMap params, Class clazz) { + return request(path, params, clazz, org.springframework.http.HttpMethod.GET); + } + + private ResponseEntity request(String path, MultiValueMap params, Class clazz, org.springframework.http.HttpMethod httpMethod) { + + HttpHeaders headers = new HttpHeaders(); + + HttpEntity entity = new HttpEntity(headers); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(this.base.toString() + path) + .queryParams(params); + + return this.restTemplate.exchange( + builder.toUriString(), httpMethod, entity, clazz); + } +} + +