diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenantTest.java b/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenantTest.java deleted file mode 100644 index 4f91ec561..000000000 --- a/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenantTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.alibaba.nacos.test.naming; - -import com.alibaba.nacos.api.PropertyKeyConst; -import com.alibaba.nacos.api.naming.NamingFactory; -import com.alibaba.nacos.api.naming.NamingService; -import com.alibaba.nacos.api.naming.listener.Event; -import com.alibaba.nacos.api.naming.listener.EventListener; -import com.alibaba.nacos.api.naming.listener.NamingEvent; -import com.alibaba.nacos.api.naming.pojo.Instance; -import com.alibaba.nacos.naming.NamingApp; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.*; -import java.util.concurrent.TimeUnit; - -import static com.alibaba.nacos.test.naming.NamingBase.*; - -/** - * @author nkorange - */ -//@RunWith(SpringRunner.class) -//@SpringBootTest(classes = NamingApp.class, properties = {"server.servlet.context-path=/nacos"}, -// webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class MultipleTenantTest { - - private NamingService naming; - private NamingService naming1; - private NamingService naming2; - @LocalServerPort - private int port; - - private volatile List instances = Collections.emptyList(); - - @Before - public void init() throws Exception { - - TimeUnit.SECONDS.sleep(10); - - port = 8848; - - naming = NamingFactory.createNamingService("127.0.0.1" + ":" + port); - - Properties properties = new Properties(); - properties.put(PropertyKeyConst.NAMESPACE, "namespace-1"); - properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1" + ":" + port); - naming1 = NamingFactory.createNamingService(properties); - - properties = new Properties(); - properties.put(PropertyKeyConst.NAMESPACE, "namespace-2"); - properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1" + ":" + port); - naming2 = NamingFactory.createNamingService(properties); - } - - @Test - public void registerInstance() throws Exception { - - String serviceName = randomDomainName(); - - System.out.println(serviceName); - - naming1.registerInstance(serviceName, "11.11.11.11", 80); - - naming2.registerInstance(serviceName, "22.22.22.22", 80); - - naming.registerInstance(serviceName, "33.33.33.33", 8888); - naming.registerInstance(serviceName, "44.44.44.44", 8888); - - TimeUnit.SECONDS.sleep(8L); - - List instances = naming1.getAllInstances(serviceName); - - Assert.assertEquals(1, instances.size()); - Assert.assertEquals("11.11.11.11", instances.get(0).getIp()); - Assert.assertEquals(80, instances.get(0).getPort()); - - instances = naming2.getAllInstances(serviceName); - - Assert.assertEquals(1, instances.size()); - Assert.assertEquals("22.22.22.22", instances.get(0).getIp()); - Assert.assertEquals(80, instances.get(0).getPort()); - - instances = naming.getAllInstances(serviceName); - - Assert.assertEquals(2, instances.size()); - - TimeUnit.SECONDS.sleep(10000000L); - } - - @Test - public void subscribeAdd() throws Exception { - - String serviceName = randomDomainName(); - - naming1.subscribe(serviceName, new EventListener() { - @Override - public void onEvent(Event event) { - System.out.println(((NamingEvent) event).getServiceName()); - System.out.println(((NamingEvent) event).getInstances()); - instances = ((NamingEvent) event).getInstances(); - } - }); - - naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); - naming1.registerInstance(serviceName, "22.22.22.22", TEST_PORT, "c1"); - - naming2.registerInstance(serviceName, "33.33.33.33", TEST_PORT, "c1"); - naming2.registerInstance(serviceName, "44.44.44.44", TEST_PORT, "c1"); - - while (instances.size() != 2) { - Thread.sleep(1000L); - } - - Set ips = new HashSet(); - ips.add(instances.get(0).getIp()); - ips.add(instances.get(1).getIp()); - Assert.assertTrue(ips.contains("11.11.11.11")); - Assert.assertTrue(ips.contains("22.22.22.22")); - - Assert.assertTrue(verifyInstanceList(instances, naming1.getAllInstances(serviceName))); - } -} diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenant_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenant_ITCase.java new file mode 100644 index 000000000..e8a2b3477 --- /dev/null +++ b/test/src/test/java/com/alibaba/nacos/test/naming/MultipleTenant_ITCase.java @@ -0,0 +1,314 @@ +package com.alibaba.nacos.test.naming; + +import com.alibaba.nacos.api.PropertyKeyConst; +import com.alibaba.nacos.api.naming.NamingFactory; +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.listener.Event; +import com.alibaba.nacos.api.naming.listener.EventListener; +import com.alibaba.nacos.api.naming.listener.NamingEvent; +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ListView; +import com.alibaba.nacos.naming.NamingApp; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +import static com.alibaba.nacos.test.naming.NamingBase.*; + +/** + * @author nkorange + */ +//@RunWith(SpringRunner.class) +//@SpringBootTest(classes = NamingApp.class, properties = {"server.servlet.context-path=/nacos"}, +// webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class MultipleTenant_ITCase { + + private NamingService naming; + private NamingService naming1; + private NamingService naming2; + @LocalServerPort + private int port; + + private volatile List instances = Collections.emptyList(); + + @Before + public void init() throws Exception { + String serverList = "11.239.112.161:8848,11.239.113.204:8848,11.239.114.187:8848"; + //naming = NamingFactory.createNamingService("127.0.0.1" + ":" + port); + naming = NamingFactory.createNamingService(serverList); + + Properties properties = new Properties(); + properties.put(PropertyKeyConst.NAMESPACE, "namespace-1"); + //properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1" + ":" + port); + properties.put(PropertyKeyConst.SERVER_ADDR, serverList); + naming1 = NamingFactory.createNamingService(properties); + + + properties = new Properties(); + properties.put(PropertyKeyConst.NAMESPACE, "namespace-2"); + //properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1" + ":" + port); + properties.put(PropertyKeyConst.SERVER_ADDR, serverList); + naming2 = NamingFactory.createNamingService(properties); + } + + /** + * @TCDescription : 多租户注册IP,port不相同实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_registerInstance() throws Exception { + String serviceName = randomDomainName(); + + naming1.registerInstance(serviceName, "11.11.11.11", 80); + + naming2.registerInstance(serviceName, "22.22.22.22", 80); + + naming.registerInstance(serviceName, "33.33.33.33", 8888); + naming.registerInstance(serviceName, "44.44.44.44", 8888); + + TimeUnit.SECONDS.sleep(5L); + + List instances = naming1.getAllInstances(serviceName); + Assert.assertEquals(1, instances.size()); + Assert.assertEquals("11.11.11.11", instances.get(0).getIp()); + Assert.assertEquals(80, instances.get(0).getPort()); + + instances = naming2.getAllInstances(serviceName); + Assert.assertEquals(1, instances.size()); + Assert.assertEquals("22.22.22.22", instances.get(0).getIp()); + Assert.assertEquals(80, instances.get(0).getPort()); + + instances = naming.getAllInstances(serviceName); + Assert.assertEquals(2, instances.size()); + } + + /** + * @TCDescription : 多租户注册IP,port相同的实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_equalIP() throws Exception { + String serviceName = randomDomainName(); + naming1.registerInstance(serviceName, "11.11.11.11", 80); + + naming2.registerInstance(serviceName, "11.11.11.11", 80); + + naming.registerInstance(serviceName, "11.11.11.11", 80); + naming.registerInstance(serviceName, "11.11.11.11", 80); + + TimeUnit.SECONDS.sleep(5L); + + List instances = naming1.getAllInstances(serviceName); + + Assert.assertEquals(1, instances.size()); + Assert.assertEquals("11.11.11.11", instances.get(0).getIp()); + Assert.assertEquals(80, instances.get(0).getPort()); + + instances = naming2.getAllInstances(serviceName); + + Assert.assertEquals(1, instances.size()); + Assert.assertEquals("11.11.11.11", instances.get(0).getIp()); + Assert.assertEquals(80, instances.get(0).getPort()); + + instances = naming.getAllInstances(serviceName); + Assert.assertEquals(1, instances.size()); + } + + /** + * @TCDescription : 多租户注册IP,port相同的实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_selectInstances() throws Exception { + String serviceName = randomDomainName(); + naming1.registerInstance(serviceName, TEST_IP_4_DOM_1, TEST_PORT); + + naming2.registerInstance(serviceName, "22.22.22.22", 80); + + naming.registerInstance(serviceName, TEST_IP_4_DOM_1, TEST_PORT); + naming.registerInstance(serviceName, "44.44.44.44", 8888); + + TimeUnit.SECONDS.sleep(5L); + + List instances = naming1.selectInstances(serviceName, true); + + Assert.assertEquals(1, instances.size()); + Assert.assertEquals(TEST_IP_4_DOM_1, instances.get(0).getIp()); + Assert.assertEquals(TEST_PORT, instances.get(0).getPort()); + + instances = naming2.selectInstances(serviceName, false); + Assert.assertEquals(0, instances.size()); + + + instances = naming.selectInstances(serviceName, true); + Assert.assertEquals(2, instances.size()); + } + + /** + * @TCDescription : 多租户同服务获取实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_getServicesOfServer() throws Exception { + + String serviceName = randomDomainName(); + naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); + TimeUnit.SECONDS.sleep(5L); + + ListView listView = naming1.getServicesOfServer(1, 20); + + naming2.registerInstance(serviceName, "33.33.33.33", TEST_PORT, "c1"); + TimeUnit.SECONDS.sleep(5L); + ListView listView1 = naming1.getServicesOfServer(1, 20); + Assert.assertEquals(listView.getCount(), listView1.getCount()); + } + + /** + * @TCDescription : 多租户订阅服务 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_subscribe() throws Exception { + + String serviceName = randomDomainName(); + + naming1.subscribe(serviceName, new EventListener() { + @Override + public void onEvent(Event event) { + instances = ((NamingEvent) event).getInstances(); + } + }); + + naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); + naming2.registerInstance(serviceName, "33.33.33.33", TEST_PORT, "c1"); + + while (instances.size() == 0) { + TimeUnit.SECONDS.sleep(1L); + } + Assert.assertEquals(1, instances.size()); + + TimeUnit.SECONDS.sleep(2L); + Assert.assertTrue(verifyInstanceList(instances, naming1.getAllInstances(serviceName))); + } + + /** + * @TCDescription : 多租户取消订阅服务 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_unSubscribe() throws Exception { + + String serviceName = randomDomainName(); + EventListener listener = new EventListener() { + @Override + public void onEvent(Event event) { + System.out.println(((NamingEvent)event).getServiceName()); + instances = ((NamingEvent)event).getInstances(); + } + }; + + naming1.subscribe(serviceName, listener); + naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); + naming2.registerInstance(serviceName, "33.33.33.33", TEST_PORT, "c1"); + + while (instances.size() == 0) { + TimeUnit.SECONDS.sleep(1L); + } + Assert.assertEquals(serviceName, naming1.getSubscribeServices().get(0).getName()); + Assert.assertEquals(0, naming2.getSubscribeServices().size()); + + naming1.unsubscribe(serviceName, listener); + + TimeUnit.SECONDS.sleep(5L); + Assert.assertEquals(0, naming1.getSubscribeServices().size()); + Assert.assertEquals(1, naming2.getSubscribeServices().size()); + } + + /** + * @TCDescription : 多租户获取server状态 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_serverStatus() throws Exception { + Assert.assertEquals(TEST_SERVER_STATUS, naming1.getServerStatus()); + Assert.assertEquals(TEST_SERVER_STATUS, naming2.getServerStatus()); + } + + /** + * @TCDescription : 多租户删除实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_deregisterInstance() throws Exception { + + String serviceName = randomDomainName(); + + naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); + naming1.registerInstance(serviceName, "22.22.22.22", TEST_PORT, "c1"); + naming2.registerInstance(serviceName, "22.22.22.22", TEST_PORT, "c1"); + + List instances = naming1.getAllInstances(serviceName); + verifyInstanceListForNaming(naming1, 2, serviceName); + + Assert.assertEquals(2, naming1.getAllInstances(serviceName).size()); + + naming1.deregisterInstance(serviceName, "22.22.22.22", TEST_PORT); + TimeUnit.SECONDS.sleep(2); + + Assert.assertEquals(1, naming1.getAllInstances(serviceName).size()); + Assert.assertEquals(1, naming2.getAllInstances(serviceName).size()); + } + + /** + * @TCDescription : 多租户删除实例 + * @TestStep : + * @ExpectResult : + */ + @Test + public void multipleTenant_selectOneHealthyInstance() throws Exception { + + String serviceName = randomDomainName(); + + naming1.registerInstance(serviceName, "11.11.11.11", TEST_PORT, "c1"); + naming1.registerInstance(serviceName, "22.22.22.22", TEST_PORT, "c2"); + naming2.registerInstance(serviceName, "22.22.22.22", TEST_PORT, "c3"); + + List instances = naming1.getAllInstances(serviceName); + verifyInstanceListForNaming(naming1, 2, serviceName); + + Assert.assertEquals(2, naming1.getAllInstances(serviceName).size()); + + Instance instance = naming1.selectOneHealthyInstance(serviceName, Arrays.asList("c1")); + Assert.assertEquals("11.11.11.11", instances.get(0).getIp()); + instance = naming2.selectOneHealthyInstance(serviceName, Arrays.asList("c1")); + Assert.assertNull(instance); + } + + private void verifyInstanceListForNaming(NamingService naming, int size, String serviceName) throws Exception { + int i = 0; + while ( i < 20 ) { + List instances = naming.getAllInstances(serviceName); + if (instances.size() == size) { + break; + } else { + TimeUnit.SECONDS.sleep(3); + i++; + } + } + } +} diff --git a/test/src/test/java/com/alibaba/nacos/test/naming/NamingBase.java b/test/src/test/java/com/alibaba/nacos/test/naming/NamingBase.java index 7c0fb47ed..2ff2973eb 100644 --- a/test/src/test/java/com/alibaba/nacos/test/naming/NamingBase.java +++ b/test/src/test/java/com/alibaba/nacos/test/naming/NamingBase.java @@ -18,6 +18,7 @@ package com.alibaba.nacos.test.naming; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import com.alibaba.nacos.api.naming.pojo.AbstractHealthChecker; import com.alibaba.nacos.api.naming.pojo.Cluster; @@ -41,6 +42,7 @@ public class NamingBase { public static final String TEST_IP_4_DOM_2 = "127.0.0.2"; public static final String TEST_PORT_4_DOM_2 = "7070"; public static final String TETS_TOKEN_4_DOM_2 = "xyz"; + public static final String TEST_SERVER_STATUS = "UP"; public static final int TEST_PORT = 8080;