diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/pom.xml b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/pom.xml
index 9797cc653..c33d0237f 100644
--- a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/pom.xml
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/pom.xml
@@ -21,9 +21,14 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
+
+ org.projectlombok
+ lombok
+
com.alibaba.cloud
spring-cloud-alibaba-test-support
+ test
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/NacosConfigTestApplication.java b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/NacosConfigTestApplication.java
similarity index 95%
rename from spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/NacosConfigTestApplication.java
rename to spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/NacosConfigTestApplication.java
index c115e98d6..d64c74700 100644
--- a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/NacosConfigTestApplication.java
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/NacosConfigTestApplication.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.alibaba.cloud.tests.nacos;
+package com.alibaba.cloud.tests.nacos.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/UserProperties.java b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/UserProperties.java
similarity index 95%
rename from spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/UserProperties.java
rename to spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/UserProperties.java
index 3d23bbe41..38e6b1f67 100644
--- a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/UserProperties.java
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/java/com/alibaba/cloud/tests/nacos/config/UserProperties.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.alibaba.cloud.tests.nacos;
+package com.alibaba.cloud.tests.nacos.config;
import java.util.List;
import java.util.Map;
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/resources/application.yml b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/main/resources/application.yml
new file mode 100644
index 000000000..e69de29bb
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/NacosConfigRefreshTest.java b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/config/NacosConfigRefreshTest.java
similarity index 96%
rename from spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/NacosConfigRefreshTest.java
rename to spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/config/NacosConfigRefreshTest.java
index 3b9ce6939..9ed065ad1 100644
--- a/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/NacosConfigRefreshTest.java
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-config-test/src/test/java/com/alibaba/cloud/tests/nacos/config/NacosConfigRefreshTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.alibaba.cloud.tests.nacos;
+package com.alibaba.cloud.tests.nacos.config;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.cloud.testsupport.ContainerStarter;
@@ -33,7 +33,7 @@ import org.springframework.context.event.EventListener;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
-import static com.alibaba.cloud.tests.nacos.NacosConfigRefreshTest.PushConfigConfiguration;
+import static com.alibaba.cloud.tests.nacos.config.NacosConfigRefreshTest.PushConfigConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/pom.xml b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/pom.xml
index b866a3103..b5d71bf80 100644
--- a/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/pom.xml
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/pom.xml
@@ -33,6 +33,14 @@
org.springframework.cloud
spring-cloud-starter-openfeign
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+ org.projectlombok
+ lombok
+
com.alibaba.cloud
spring-cloud-alibaba-test-support
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/main/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTestApp.java b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/main/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTestApp.java
new file mode 100644
index 000000000..832de99f9
--- /dev/null
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/main/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTestApp.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2013-2022 the original author or authors.
+ *
+ * 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
+ *
+ * https://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.cloud.tests.nacos.discovery;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ *
+ * @author freeman
+ */
+@SpringBootApplication
+@EnableFeignClients
+public class NacosDiscoveryTestApp {
+
+ public static void main(String[] args) {
+ SpringApplication.run(NacosDiscoveryTestApp.class, args);
+ }
+
+ @Bean
+ @LoadBalanced
+ @Profile("service-1")
+ RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+
+ @RestController
+ @Profile("service-2")
+ static class Controller {
+ int port;
+
+ @GetMapping
+ public Object get() {
+ return port;
+ }
+
+ @GetMapping("/{ok}")
+ public Object pass(@PathVariable Boolean ok) {
+ if (ok) {
+ return "ok";
+ }
+ throw new RuntimeException("not ok!");
+ }
+
+ @EventListener
+ public void onApplicationEvent(ServletWebServerInitializedEvent event) {
+ port = event.getWebServer().getPort();
+ }
+ }
+
+ @FeignClient(value = "service-2", fallback = Fallback.class)
+ interface Service2Client {
+ @GetMapping
+ Object get();
+
+ @GetMapping("/{ok}")
+ String pass(@PathVariable Boolean ok);
+ }
+
+ @Component
+ static class Fallback implements Service2Client {
+ @Override
+ public Object get() {
+ return "shouldn't use this !";
+ }
+
+ @Override
+ public String pass(Boolean ok) {
+ return "fallback";
+ }
+ }
+
+}
diff --git a/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/test/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTest.java b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/test/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTest.java
new file mode 100644
index 000000000..fa3855e67
--- /dev/null
+++ b/spring-cloud-alibaba-tests/nacos-tests/nacos-discovery-test/src/test/java/com/alibaba/cloud/tests/nacos/discovery/NacosDiscoveryTest.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2013-2022 the original author or authors.
+ *
+ * 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
+ *
+ * https://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.cloud.tests.nacos.discovery;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import com.alibaba.cloud.testsupport.ContainerStarter;
+import com.alibaba.cloud.testsupport.HasDockerAndItEnabled;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.context.WebServerApplicationContext;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import static com.alibaba.cloud.tests.nacos.discovery.NacosDiscoveryTestApp.Service2Client;
+import static com.alibaba.cloud.testsupport.Tester.justDo;
+import static com.alibaba.cloud.testsupport.Tester.testFunction;
+import static java.util.function.Predicate.isEqual;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+/**
+ *
+ *
+ * @author freeman
+ */
+@HasDockerAndItEnabled
+public class NacosDiscoveryTest {
+
+ static GenericContainer nacos;
+
+ static {
+ nacos = ContainerStarter.startNacos();
+
+ // wait nacos started
+ justDo(() -> Thread.sleep(4000L));
+ }
+
+ static {
+ String serverAddr = "localhost:" + nacos.getMappedPort(8848);
+ System.setProperty("spring.cloud.nacos.discovery.server-addr", serverAddr);
+ }
+
+ static volatile ConfigurableApplicationContext service1 = new SpringApplicationBuilder(
+ NacosDiscoveryTestApp.class).profiles("service-1").run();
+
+ static volatile ConfigurableApplicationContext service2_0 = new SpringApplicationBuilder(
+ NacosDiscoveryTestApp.class).profiles("service-2").run();
+
+ static volatile ConfigurableApplicationContext service2_1 = new SpringApplicationBuilder(
+ NacosDiscoveryTestApp.class).profiles("service-2").run();
+
+ @AfterAll
+ static void stop() {
+ service1.stop();
+ service2_0.stop();
+ service2_1.stop();
+ }
+
+ @Test
+ public void testServiceDiscovery() {
+ testFunction("Service discovery", () -> {
+ DiscoveryClient discoveryClient = service1.getBean(DiscoveryClient.class);
+ List instances = discoveryClient.getInstances("service-2");
+ assertThat(instances).hasSize(2);
+ });
+ }
+
+ @Test
+ public void testServiceDiscoveryWithRestTemplate() {
+ testFunction("Service discovery with RestTemplate", () -> {
+ RestTemplate restTemplate = service1.getBean(RestTemplate.class);
+ assertThatThrownBy(() -> service2_0.getBean(RestTemplate.class));
+
+ // default using RR
+ List
-
- org.projectlombok
- lombok
-
\ No newline at end of file
diff --git a/spring-cloud-alibaba-tests/spring-cloud-alibaba-test-support/src/main/java/com/alibaba/cloud/testsupport/ContainerStarter.java b/spring-cloud-alibaba-tests/spring-cloud-alibaba-test-support/src/main/java/com/alibaba/cloud/testsupport/ContainerStarter.java
index 66158f2fc..0fe639536 100644
--- a/spring-cloud-alibaba-tests/spring-cloud-alibaba-test-support/src/main/java/com/alibaba/cloud/testsupport/ContainerStarter.java
+++ b/spring-cloud-alibaba-tests/spring-cloud-alibaba-test-support/src/main/java/com/alibaba/cloud/testsupport/ContainerStarter.java
@@ -109,9 +109,4 @@ public class ContainerStarter {
}
}
- public static void main(String[] args) throws IOException, InterruptedException {
- loadHostIp2BrokerConf();
- // startRocketmq("4.9.2").start();
- }
-
}