unit test for ConfigCenter (#257)
* unit test for ConfigCenter
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index 491b35e..382e2b2 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -60,8 +60,8 @@
@Value("${admin.config-center.username:}")
private String username;
@Value("${admin.config-center.password:}")
-
private String password;
+
private static String globalConfigPath = "config/dubbo/dubbo.properties";
private static final Logger logger = LoggerFactory.getLogger(ConfigCenter.class);
diff --git a/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java b/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java
new file mode 100644
index 0000000..1be2ba9
--- /dev/null
+++ b/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java
@@ -0,0 +1,140 @@
+package org.apache.dubbo.admin.config;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.retry.ExponentialBackoffRetry;
+import org.apache.curator.test.TestingServer;
+import org.apache.dubbo.admin.common.exception.ConfigurationException;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.NetUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.io.IOException;
+
+import static org.junit.Assert.*;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+public class ConfigCenterTest {
+
+ private String zkAddress;
+ private TestingServer zkServer;
+ private CuratorFramework zkClient;
+
+ @Before
+ public void setup() throws Exception {
+ int zkServerPort = NetUtils.getAvailablePort();
+ zkAddress = "zookeeper://127.0.0.1:" + zkServerPort;
+ zkServer = new TestingServer(zkServerPort, true);
+ zkClient = CuratorFrameworkFactory.builder().connectString(zkServer.getConnectString()).retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
+ zkClient.start();
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ zkServer.close();
+ zkServer.stop();
+ }
+
+ @InjectMocks
+ private ConfigCenter configCenter;
+
+ @Test
+ public void testGetDynamicConfiguration() throws Exception {
+ // mock @value inject
+ ReflectionTestUtils.setField(configCenter, "configCenter", zkAddress);
+ ReflectionTestUtils.setField(configCenter, "group", "dubbo");
+ ReflectionTestUtils.setField(configCenter, "username", "username");
+ ReflectionTestUtils.setField(configCenter, "password", "password");
+
+ // config is null
+ configCenter.getDynamicConfiguration();
+
+ // config is registry address
+ zkClient.createContainers("/dubbo/config/dubbo/dubbo.properties");
+ zkClient.setData().forPath("/dubbo/config/dubbo/dubbo.properties", "dubbo.registry.address=zookeeper://test-registry.com:2181".getBytes());
+ configCenter.getDynamicConfiguration();
+ Object registryUrl = ReflectionTestUtils.getField(configCenter, "registryUrl");
+ assertNotNull(registryUrl);
+ assertEquals("test-registry.com", ((URL) registryUrl).getHost());
+
+ // config is meta date address
+ zkClient.setData().forPath("/dubbo/config/dubbo/dubbo.properties", "dubbo.metadata-report.address=zookeeper://test-metadata.com:2181".getBytes());
+ configCenter.getDynamicConfiguration();
+ Object metadataUrl = ReflectionTestUtils.getField(configCenter, "metadataUrl");
+ assertNotNull(metadataUrl);
+ assertEquals("test-metadata.com", ((URL) metadataUrl).getHost());
+
+ // config is empty
+ zkClient.setData().forPath("/dubbo/config/dubbo/dubbo.properties", "".getBytes());
+ ReflectionTestUtils.setField(configCenter, "registryUrl", null);
+ ReflectionTestUtils.setField(configCenter, "metadataUrl", null);
+ configCenter.getDynamicConfiguration();
+ assertNull(ReflectionTestUtils.getField(configCenter, "registryUrl"));
+ assertNull(ReflectionTestUtils.getField(configCenter, "metadataUrl"));
+
+ // configCenter is null
+ ReflectionTestUtils.setField(configCenter, "configCenter", null);
+ // registryAddress is not null
+ ReflectionTestUtils.setField(configCenter, "registryAddress", zkAddress);
+ configCenter.getDynamicConfiguration();
+ registryUrl = ReflectionTestUtils.getField(configCenter, "registryUrl");
+ assertNotNull(registryUrl);
+ assertEquals("127.0.0.1", ((URL) registryUrl).getHost());
+
+ // configCenter & registryAddress are null
+ try {
+ ReflectionTestUtils.setField(configCenter, "configCenter", null);
+ ReflectionTestUtils.setField(configCenter, "registryAddress", null);
+ configCenter.getDynamicConfiguration();
+ fail("should throw exception when configCenter, registryAddress are all null");
+ } catch (ConfigurationException e) {
+ }
+ }
+
+ @Test
+ public void testGetRegistry() throws Exception {
+ try {
+ configCenter.getRegistry();
+ fail("should throw exception when registryAddress is blank");
+ } catch (ConfigurationException e) {
+ }
+ assertNull(ReflectionTestUtils.getField(configCenter, "registryUrl"));
+
+ // mock @value inject
+ ReflectionTestUtils.setField(configCenter, "registryAddress", zkAddress);
+ ReflectionTestUtils.setField(configCenter, "group", "dubbo");
+ ReflectionTestUtils.setField(configCenter, "username", "username");
+ ReflectionTestUtils.setField(configCenter, "password", "password");
+
+ configCenter.getRegistry();
+ Object registryUrl = ReflectionTestUtils.getField(configCenter, "registryUrl");
+ assertNotNull(registryUrl);
+ assertEquals("127.0.0.1", ((URL) registryUrl).getHost());
+ }
+
+ @Test
+ public void testGetMetadataCollector() throws Exception {
+ // when metadataAddress is empty
+ ReflectionTestUtils.setField(configCenter, "metadataAddress", "");
+ configCenter.getMetadataCollector();
+ assertNull(ReflectionTestUtils.getField(configCenter, "metadataUrl"));
+
+ // mock @value inject
+ ReflectionTestUtils.setField(configCenter, "metadataAddress", zkAddress);
+ ReflectionTestUtils.setField(configCenter, "group", "dubbo");
+ ReflectionTestUtils.setField(configCenter, "username", "username");
+ ReflectionTestUtils.setField(configCenter, "password", "password");
+
+ configCenter.getMetadataCollector();
+ Object metadataUrl = ReflectionTestUtils.getField(configCenter, "metadataUrl");
+ assertNotNull(metadataUrl);
+ assertEquals("127.0.0.1", ((URL) metadataUrl).getHost());
+ }
+}