diff --git a/spring-cloud-alicloud-acm/pom.xml b/spring-cloud-alicloud-acm/pom.xml
index 49012835..6f431517 100644
--- a/spring-cloud-alicloud-acm/pom.xml
+++ b/spring-cloud-alicloud-acm/pom.xml
@@ -67,6 +67,19 @@
spring-boot-starter-test
test
+
+ org.powermock
+ powermock-module-junit4
+ 1.7.1
+ test
+
+
+
+ org.powermock
+ powermock-api-mockito
+ 1.7.1
+ test
+
diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureAnalyzer.java b/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureAnalyzer.java
deleted file mode 100644
index 64d56be3..00000000
--- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureAnalyzer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2018 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
- *
- * 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 org.springframework.cloud.alicloud.acm.diagnostics.analyzer;
-
-import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;
-import org.springframework.boot.diagnostics.FailureAnalysis;
-
-/**
- * A {@code FailureAnalyzer} that performs analysis of failures caused by a
- * {@code DiamondConnectionFailureException}.
- *
- * @author juven.xuxb, 07/11/2016.
- */
-public class DiamondConnectionFailureAnalyzer
- extends AbstractFailureAnalyzer {
-
- @Override
- protected FailureAnalysis analyze(Throwable rootFailure,
- DiamondConnectionFailureException cause) {
- return new FailureAnalysis(
- "Application failed to connect to Diamond, unable to access http://"
- + cause.getDomain() + ":" + cause.getPort()
- + "/diamond-server/diamond",
- "config the right endpoint", cause);
- }
-}
diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureException.java b/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureException.java
deleted file mode 100644
index a1b10abf..00000000
--- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/diagnostics/analyzer/DiamondConnectionFailureException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2018 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
- *
- * 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 org.springframework.cloud.alicloud.acm.diagnostics.analyzer;
-
-/**
- * A {@code DiamondConnectionFailureException} is thrown when the application fails to
- * connect to Diamond Server.
- *
- * @author juven.xuxb, 07/11/2016.
- */
-public class DiamondConnectionFailureException extends RuntimeException {
-
- private final String domain;
-
- private final String port;
-
- public DiamondConnectionFailureException(String domain, String port, String message) {
- super(message);
- this.domain = domain;
- this.port = port;
- }
-
- public DiamondConnectionFailureException(String domain, String port, String message,
- Throwable cause) {
- super(message, cause);
- this.domain = domain;
- this.port = port;
- }
-
- String getDomain() {
- return domain;
- }
-
- String getPort() {
- return port;
- }
-
-}
diff --git a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories
index 4f39095f..3fc399da 100644
--- a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories
@@ -4,6 +4,3 @@ org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySourceLocator
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.alicloud.acm.AcmAutoConfiguration,\
org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration
-
-org.springframework.boot.diagnostics.FailureAnalyzer=\
-org.springframework.cloud.alicloud.acm.diagnostics.analyzer.DiamondConnectionFailureAnalyzer
\ No newline at end of file
diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java
new file mode 100644
index 00000000..ea6a4bdb
--- /dev/null
+++ b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2018 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
+ *
+ * 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 org.springframework.cloud.alicloud.acm;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+import com.alibaba.edas.acm.ConfigService;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.MethodProxy;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySourceLocator;
+import org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration;
+import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration;
+import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties;
+import org.springframework.cloud.alicloud.context.acm.AcmProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @author xiaojing
+ */
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ ConfigService.class })
+@SpringBootTest(classes = AcmConfigurationTests.TestConfig.class, properties = {
+ "spring.application.name=test-name", "spring.profiles.active=dev,test",
+ "spring.cloud.alicloud.acm.server-list=127.0.0.1",
+ "spring.cloud.alicloud.acm.server-port=8848",
+ "spring.cloud.alicloud.acm.endpoint=test-endpoint",
+ "spring.cloud.alicloud.acm.namespace=test-namespace",
+ "spring.cloud.alicloud.acm.timeout=1000",
+ "spring.cloud.alicloud.acm.group=test-group",
+ "spring.cloud.alicloud.acm.refresh-enabled=false",
+ "spring.cloud.alicloud.acm.file-extension=properties" }, webEnvironment = NONE)
+public class AcmConfigurationTests {
+
+ static {
+
+ try {
+
+ Method method = PowerMockito.method(ConfigService.class, "getConfig",
+ String.class, String.class, long.class);
+ MethodProxy.proxy(method, new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+
+ if ("test-name.properties".equals(args[0])
+ && "test-group".equals(args[1])) {
+ return "user.name=hello\nuser.age=12";
+ }
+
+ if ("test-name-dev.properties".equals(args[0])
+ && "test-group".equals(args[1])) {
+ return "user.name=dev";
+ }
+ return "";
+ }
+ });
+
+ }
+ catch (Exception ignore) {
+ ignore.printStackTrace();
+
+ }
+ }
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private AcmPropertySourceLocator locator;
+
+ @Autowired
+ private AcmIntegrationProperties integrationProperties;
+
+ @Autowired
+ private AcmProperties properties;
+
+ @Test
+ public void contextLoads() throws Exception {
+
+ assertNotNull("AcmPropertySourceLocator was not created", locator);
+ assertNotNull("AcmProperties was not created", properties);
+ assertNotNull("AcmIntegrationProperties was not created", integrationProperties);
+
+ checkoutAcmServerAddr();
+ checkoutAcmServerPort();
+ checkoutAcmEndpoint();
+ checkoutAcmNamespace();
+ checkoutAcmGroup();
+ checkoutAcmFileExtension();
+ checkoutAcmTimeout();
+ checkoutAcmProfiles();
+ checkoutAcmRefreshEnabled();
+ checkoutDataLoad();
+ }
+
+ private void checkoutAcmServerAddr() {
+ assertEquals("AcmProperties server address is wrong", "127.0.0.1",
+ properties.getServerList());
+
+ }
+
+ private void checkoutAcmServerPort() {
+ assertEquals("AcmProperties server port is wrong", "8848",
+ properties.getServerPort());
+
+ }
+
+ private void checkoutAcmEndpoint() {
+ assertEquals("AcmProperties endpoint is wrong", "test-endpoint",
+ properties.getEndpoint());
+
+ }
+
+ private void checkoutAcmNamespace() {
+ assertEquals("AcmProperties namespace is wrong", "test-namespace",
+ properties.getNamespace());
+
+ }
+
+ private void checkoutAcmGroup() {
+ assertEquals("AcmProperties' group is wrong", "test-group",
+ properties.getGroup());
+ }
+
+ private void checkoutAcmFileExtension() {
+ assertEquals("AcmProperties' file extension is wrong", "properties",
+ properties.getFileExtension());
+ }
+
+ private void checkoutAcmTimeout() {
+ assertEquals("AcmProperties' timeout is wrong", 1000, properties.getTimeout());
+ }
+
+ private void checkoutAcmRefreshEnabled() {
+ assertEquals("AcmProperties' refresh enabled is wrong", false,
+ properties.isRefreshEnabled());
+ }
+
+ private void checkoutAcmProfiles() {
+ assertArrayEquals("AcmProperties' profiles is wrong",
+ new String[] { "dev", "test" },
+ integrationProperties.getActiveProfiles());
+ }
+
+ private void checkoutDataLoad() {
+ Assert.assertEquals(environment.getProperty("user.name"), "dev");
+ Assert.assertEquals(environment.getProperty("user.age"), "12");
+ }
+
+ @Configuration
+ @EnableAutoConfiguration
+ @ImportAutoConfiguration({ AcmEndpointAutoConfiguration.class,
+ AcmAutoConfiguration.class, AcmContextBootstrapConfiguration.class })
+ public static class TestConfig {
+ }
+}
diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java
new file mode 100644
index 00000000..2e8076ab
--- /dev/null
+++ b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2019 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
+ *
+ * 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 org.springframework.cloud.alicloud.acm;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+import com.alibaba.edas.acm.ConfigService;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.MethodProxy;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration;
+import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
+
+/**
+ * @author xiaojing
+ */
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ ConfigService.class })
+@SpringBootTest(classes = AcmGroupConfigurationTest.TestConfig.class, properties = {
+ "spring.application.name=test-name", "spring.application.group=com.test.hello",
+ "spring.cloud.alicloud.acm.server-list=127.0.0.1",
+ "spring.cloud.alicloud.acm.server-port=8080",
+ "spring.cloud.alicloud.acm.timeout=1000",
+ "spring.cloud.alicloud.acm.group=test-group" }, webEnvironment = NONE)
+public class AcmGroupConfigurationTest {
+
+ static {
+
+ try {
+ Method method = PowerMockito.method(ConfigService.class, "getConfig",
+ String.class, String.class, long.class);
+ MethodProxy.proxy(method, new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ if ("com.test:application.properties".equals(args[0])
+ && "test-group".equals(args[1])) {
+ return "com.test.value=com.test";
+ }
+ if ("com.test.hello:application.properties".equals(args[0])
+ && "test-group".equals(args[1])) {
+ return "com.test.hello.value=com.test.hello";
+ }
+ return "";
+ }
+ });
+
+ }
+ catch (Exception ignore) {
+ ignore.printStackTrace();
+
+ }
+ }
+
+ @Autowired
+ private Environment environment;
+
+ @Test
+ public void contextLoads() throws Exception {
+
+ Assert.assertEquals(environment.getProperty("com.test.value"), "com.test");
+ Assert.assertEquals(environment.getProperty("com.test.hello.value"),
+ "com.test.hello");
+
+ }
+
+ @Configuration
+ @EnableAutoConfiguration
+ @ImportAutoConfiguration({ AcmEndpointAutoConfiguration.class,
+ AcmAutoConfiguration.class, AcmContextBootstrapConfiguration.class })
+ public static class TestConfig {
+ }
+}
diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java
new file mode 100644
index 00000000..dcef7f48
--- /dev/null
+++ b/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2018 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
+ *
+ * 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 org.springframework.cloud.alicloud.acm.endpoint;
+
+import static org.junit.Assert.assertEquals;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.MethodProxy;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.health.Health.Builder;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.alicloud.acm.AcmAutoConfiguration;
+import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository;
+import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySourceLocator;
+import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory;
+import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration;
+import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties;
+import org.springframework.cloud.alicloud.context.acm.AcmProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.alibaba.edas.acm.ConfigService;
+
+/**
+ * @author xiaojing
+ */
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ ConfigService.class })
+@SpringBootTest(classes = AcmEndpointTests.TestConfig.class, properties = {
+ "spring.application.name=test-name",
+ "spring.cloud.alicloud.acm.server-list=127.0.0.1",
+ "spring.cloud.alicloud.acm.server-port=8848",
+ "spring.cloud.alicloud.acm.file-extension=properties" }, webEnvironment = NONE)
+public class AcmEndpointTests {
+
+ static {
+
+ try {
+
+ Method method = PowerMockito.method(ConfigService.class, "getConfig",
+ String.class, String.class, long.class);
+ MethodProxy.proxy(method, new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+
+ if ("test-name.properties".equals(args[0])
+ && "DEFAULT_GROUP".equals(args[1])) {
+ return "user.name=hello\nuser.age=12";
+ }
+ return "";
+ }
+ });
+
+ }
+ catch (Exception ignore) {
+ ignore.printStackTrace();
+
+ }
+ }
+
+ @Autowired
+ private AcmProperties properties;
+
+ @Autowired
+ private AcmRefreshHistory refreshHistory;
+
+ @Autowired
+ private AcmPropertySourceRepository propertySourceRepository;
+
+ @Autowired
+ private AcmPropertySourceRepository acmPropertySourceRepository;
+
+ @Test
+ public void contextLoads() throws Exception {
+
+ checkoutEndpoint();
+ checkoutAcmHealthIndicator();
+
+ }
+
+ private void checkoutAcmHealthIndicator() {
+ try {
+ Builder builder = new Builder();
+
+ AcmHealthIndicator healthIndicator = new AcmHealthIndicator(properties,
+ acmPropertySourceRepository);
+ healthIndicator.doHealthCheck(builder);
+
+ Builder builder1 = new Builder();
+ List dataIds = new ArrayList<>();
+ dataIds.add("test-name.properties");
+ builder1.up().withDetail("dataIds", dataIds);
+
+ Assert.assertTrue(builder.build().equals(builder1.build()));
+
+ }
+ catch (Exception ignoreE) {
+
+ }
+
+ }
+
+ private void checkoutEndpoint() throws Exception {
+ AcmEndpoint acmEndpoint = new AcmEndpoint(properties, refreshHistory,
+ propertySourceRepository);
+ Map map = acmEndpoint.invoke();
+ assertEquals(map.get("config"), properties);
+ assertEquals(((Map) map.get("runtime")).get("refreshHistory"),
+ refreshHistory.getRecords());
+ }
+
+ @Configuration
+ @EnableAutoConfiguration
+ @ImportAutoConfiguration({ AcmEndpointAutoConfiguration.class,
+ AcmAutoConfiguration.class, AcmContextBootstrapConfiguration.class })
+ public static class TestConfig {
+ }
+}
diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java
index 8491ef12..55c073b9 100644
--- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java
+++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java
@@ -88,6 +88,10 @@ public class AcmIntegrationProperties {
this.activeProfiles = activeProfiles;
}
+ public String[] getActiveProfiles() {
+ return activeProfiles;
+ }
+
public void setAcmProperties(AcmProperties acmProperties) {
this.acmProperties = acmProperties;
}