You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by me...@apache.org on 2019/08/13 02:36:31 UTC
[dubbo] branch cloud-native updated: Refactor ConfigManager (#4804)
This is an automated email from the ASF dual-hosted git repository.
mercyblitz pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/cloud-native by this push:
new ade0caf Refactor ConfigManager (#4804)
ade0caf is described below
commit ade0caf3e2587141b842bcc278e928d8f25dc07d
Author: Mercy Ma <me...@gmail.com>
AuthorDate: Tue Aug 13 10:36:18 2019 +0800
Refactor ConfigManager (#4804)
* Polish apache/dubbo#4542 : [Enhancement] Adapt the Java standard Event/Listener mechanism
* Polish apache/dubbo#4541 : [Feature] Add local File System DynamicConfigurationFactory‘s extension
* Polish apache#4541 : Bugfix
* Polish apache/dubbo#4541 : Optimization
* Polish apache/dubbo#4541 : Add the compatibility for PollingWatchService on the some platforms
* Polish apache/dubbo#4541 : Add delay publish without ThreadPoolExecutor
* Polish apache/dubbo#4541 : Refactor the extension name
* Polish apache/dubbo#4541 : Add remove ops
* Polish apache/dubbo#4541 : Add testable constructor
* Polish apache/dubbo#4541 : Add getConfigGroups method
* Polish apache/dubbo#4610 : [Refactor] Refactor the bootstrap module
* Polish apache/dubbo#4541 : Fix the nulling URL issue
* Polish apache/dubbo#4622 : [Refactor] Refactor ConfigManager
* Polish apache/dubbo#4622 : [Refactor] Refactor ConfigManager
* Polish apache/dubbo#4622 : Support multiple configcenters
* Polish apache/dubbo#4671 : ServiceNameMapping will not map the group, version and protocol
* update referenceCount log (#4683)
Add comments to support multiple shared connections
* Polish /apache/dubbo#4687 : Remove the duplicated test code in dubbo-config-spring (#4688)
* #4685 修改代码if判断false问题 if (hasException == false)修改成if (!hasException) (#4695)
* Fixed Service annotation method parameters are not in effect (#4598)
* keep demo simple, and switch to use zookeeper as registry center (#4705)
* keep demo simple, and switch to use zookeeper as registry center
* remove comment
* @Reference auto-wires the instance of generic interface #4594 (#4677)
* try to shorten maven output to make travis build pass (#4710)
* use CountDownLatch to check zk registry if establish connection (#4589)
* Minor change
* Rename the extension name of WritableMetadataService
* Polish apache/dubbo#4759 : [Refactor] Change the signature of methods of MetadataService #4759
* Merge remote-tracking branch 'upstream/master' into dubbo-cloud-native
# Conflicts:
# dubbo-all/pom.xml
# dubbo-bom/pom.xml
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
# dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
# dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
# dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
# dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java
# dubbo-configcenter/dubbo-configcenter-etcd/src/test/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfigurationTest.java
# dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
# dubbo-configcenter/dubbo-configcenter-nacos/src/test/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfigurationTest.java
# dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifier.java
# dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
# dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/identifier/MetadataIdentifierTest.java
# dubbo-metadata/dubbo-metadata-definition-protobuf/src/main/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilder.java
# dubbo-metadata/dubbo-metadata-definition-protobuf/src/test/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilderTest.java
# dubbo-metadata/pom.xml
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/AbstractConfiguratorListener.java
# dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
# dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistryFactory.java
# dubbo-rpc/dubbo-rpc-xml/src/main/java/org/apache/dubbo/xml/rpc/protocol/xmlrpc/XmlRpcProtocol.java
* Polish apache/dubbo#3984 : Add the implementation of Page<ServiceInstance> getInstances(String serviceName, int offset, int pageSize, boolean healthyOnly)
* Code merge
* Fix the cases
* Merge remote-tracking branch 'upstream/cloud-native' into dubbo-cloud-native
# Conflicts:
# dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderBootstrap.java
# dubbo-metadata/dubbo-metadata-definition-protobuf/pom.xml
# dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/support/ServiceOrientedRegistryTest.java
# dubbo-registry/dubbo-registry-consul/src/main/java/org/apache/dubbo/registry/consul/ConsulServiceDiscoveryFactory.java
# dubbo-registry/dubbo-registry-etcd3/src/main/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java
* Refactor ConfigManager
* Refactor ConfigManager
* Resolve the issues on ConfigManager
* Refactor and add test-cases for ConfigManager
---
.../org/apache/dubbo/bootstrap/DubboBootstrap.java | 10 +-
.../bootstrap/DubboServiceConsumerBootstrap.java | 2 +-
.../org/apache/dubbo/config/AbstractConfig.java | 3 +-
.../apache/dubbo/config/context/ConfigManager.java | 135 ++++++++-------
.../dubbo/config/context/ConfigManagerTest.java | 186 ++++++++++++++++++++-
5 files changed, 263 insertions(+), 73 deletions(-)
diff --git a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
index 4f1daa1..9de48a6 100644
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
+++ b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
@@ -51,9 +51,7 @@ import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
import org.apache.dubbo.config.utils.ReferenceConfigCache;
import org.apache.dubbo.event.EventDispatcher;
import org.apache.dubbo.event.EventListener;
-import org.apache.dubbo.metadata.WritableMetadataService;
import org.apache.dubbo.metadata.report.MetadataReportInstance;
-import org.apache.dubbo.metadata.store.RemoteWritableMetadataService;
import org.apache.dubbo.registry.client.AbstractServiceDiscoveryFactory;
import org.apache.dubbo.registry.client.DefaultServiceInstance;
import org.apache.dubbo.registry.client.ServiceDiscovery;
@@ -517,7 +515,7 @@ public class DubboBootstrap {
exportServices();
// Not only provider register and some services are exported
- if (!onlyRegisterProvider && !configManager.getServiceConfigs().isEmpty()) {
+ if (!onlyRegisterProvider && !configManager.getServices().isEmpty()) {
/**
* export {@link MetadataService}
*/
@@ -718,7 +716,7 @@ public class DubboBootstrap {
}
private void exportServices() {
- configManager.getServiceConfigs().forEach(this::exportServiceConfig);
+ configManager.getServices().forEach(this::exportServiceConfig);
}
public void exportServiceConfig(ServiceConfig<?> serviceConfig) {
@@ -729,7 +727,7 @@ public class DubboBootstrap {
if (cache == null) {
cache = ReferenceConfigCache.getCache();
}
- configManager.getReferenceConfigs().forEach(cache::get);
+ configManager.getReferences().forEach(cache::get);
}
public boolean isOnlyRegisterProvider() {
@@ -816,7 +814,7 @@ public class DubboBootstrap {
}
private void destroyReferenceConfigs() {
- configManager.getReferenceConfigs().forEach(ReferenceConfig::destroy);
+ configManager.getReferences().forEach(ReferenceConfig::destroy);
if (logger.isDebugEnabled()) {
logger.debug(NAME + "'s all ReferenceConfigs have been destroyed.");
}
diff --git a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
index 0f7a958..760fbdc 100644
--- a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
+++ b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java
@@ -41,7 +41,7 @@ public class DubboServiceConsumerBootstrap {
ConfigManager configManager = ConfigManager.getInstance();
- ReferenceConfig<EchoService> referenceConfig = configManager.getReferenceConfig("ref");
+ ReferenceConfig<EchoService> referenceConfig = configManager.getReference("ref");
EchoService echoService = referenceConfig.get();
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index c1a7548..d729644 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -40,6 +40,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -638,7 +639,7 @@ public abstract class AbstractConfig implements Serializable {
Method method2 = obj.getClass().getMethod(method1.getName(), method1.getParameterTypes());
Object value1 = method1.invoke(this, new Object[]{});
Object value2 = method2.invoke(obj, new Object[]{});
- if ((value1 != null && value2 != null) && !value1.equals(value2)) {
+ if (!Objects.equals(value1, value2)) {
return false;
}
} catch (Exception e) {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
index 0e4d610..6996740 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/ConfigManager.java
@@ -117,56 +117,6 @@ public class ConfigManager {
return ofNullable(getConfig(ApplicationConfig.class));
}
- /**
- * Add the dubbo {@link AbstractConfig config}
- *
- * @param config the dubbo {@link AbstractConfig config}
- */
- public void addConfig(AbstractConfig config) {
- addConfig(config, false);
- }
-
- protected void addConfig(AbstractConfig config, boolean unique) {
- if (config == null) {
- return;
- }
- Class<? extends AbstractConfig> configType = config.getClass();
- write(() -> {
- Map<String, AbstractConfig> configsMap = configsCache.computeIfAbsent(configType, type -> newMap());
- addIfAbsent(config, configsMap, unique);
- });
- }
-
- protected <C extends AbstractConfig> Map<String, C> getConfigsMap(Class<? extends C> configType) {
- return read(() -> (Map) configsCache.getOrDefault(configType, emptyMap()));
- }
-
- protected <C extends AbstractConfig> Collection<C> getConfigs(Class<C> configType) {
- return read(() -> getConfigsMap(configType).values());
- }
-
- protected <C extends AbstractConfig> C getConfig(Class<C> configType, String id) {
- return read(() -> {
- Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());
- return configsMap.get(id);
- });
- }
-
- protected <C extends AbstractConfig> C getConfig(Class<C> configType) throws IllegalStateException {
- return read(() -> {
- Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());
- int size = configsMap.size();
- if (size < 1) {
-// throw new IllegalStateException("No such " + configType.getName() + " is found");
- return null;
- } else if (size > 1) {
- throw new IllegalStateException("The expected single matching " + configType.getName() + " but found " + size + " instances");
- } else {
- return configsMap.values().iterator().next();
- }
- });
- }
-
// MonitorConfig correlative methods
public void setMonitor(MonitorConfig monitor) {
@@ -181,7 +131,6 @@ public class ConfigManager {
public void setModule(ModuleConfig module) {
addConfig(module, true);
-
}
public Optional<ModuleConfig> getModule() {
@@ -234,6 +183,10 @@ public class ConfigManager {
addConfig(providerConfig);
}
+ public void addProviders(Iterable<ProviderConfig> providerConfigs) {
+ providerConfigs.forEach(this::addProvider);
+ }
+
public Optional<ProviderConfig> getProvider(String id) {
return ofNullable(getConfig(ProviderConfig.class, id));
}
@@ -252,6 +205,10 @@ public class ConfigManager {
addConfig(consumerConfig);
}
+ public void addConsumers(Iterable<ConsumerConfig> consumerConfigs) {
+ consumerConfigs.forEach(this::addConsumer);
+ }
+
public Optional<ConsumerConfig> getConsumer(String id) {
return ofNullable(getConfig(ConsumerConfig.class, id));
}
@@ -341,11 +298,15 @@ public class ConfigManager {
addConfig(serviceConfig);
}
- public Collection<ServiceConfig> getServiceConfigs() {
+ public void addServices(Iterable<ServiceConfig<?>> serviceConfigs) {
+ serviceConfigs.forEach(this::addService);
+ }
+
+ public Collection<ServiceConfig> getServices() {
return getConfigs(ServiceConfig.class);
}
- public <T> ServiceConfig<T> getServiceConfig(String id) {
+ public <T> ServiceConfig<T> getService(String id) {
return getConfig(ServiceConfig.class, id);
}
@@ -355,11 +316,15 @@ public class ConfigManager {
addConfig(referenceConfig);
}
- public Collection<ReferenceConfig> getReferenceConfigs() {
+ public void addReferences(Iterable<ReferenceConfig<?>> referenceConfigs) {
+ referenceConfigs.forEach(this::addReference);
+ }
+
+ public Collection<ReferenceConfig> getReferences() {
return getConfigs(ReferenceConfig.class);
}
- public <T> ReferenceConfig<T> getReferenceConfig(String id) {
+ public <T> ReferenceConfig<T> getReference(String id) {
return getConfig(ReferenceConfig.class, id);
}
@@ -393,7 +358,57 @@ public class ConfigManager {
});
}
- private <C extends AbstractConfig> Collection<String> getConfigIds(Class<C> configType) {
+ /**
+ * Add the dubbo {@link AbstractConfig config}
+ *
+ * @param config the dubbo {@link AbstractConfig config}
+ */
+ public void addConfig(AbstractConfig config) {
+ addConfig(config, false);
+ }
+
+ protected void addConfig(AbstractConfig config, boolean unique) {
+ if (config == null) {
+ return;
+ }
+ Class<? extends AbstractConfig> configType = config.getClass();
+ write(() -> {
+ Map<String, AbstractConfig> configsMap = configsCache.computeIfAbsent(configType, type -> newMap());
+ addIfAbsent(config, configsMap, unique);
+ });
+ }
+
+ protected <C extends AbstractConfig> Map<String, C> getConfigsMap(Class<? extends C> configType) {
+ return read(() -> (Map) configsCache.getOrDefault(configType, emptyMap()));
+ }
+
+ protected <C extends AbstractConfig> Collection<C> getConfigs(Class<C> configType) {
+ return read(() -> getConfigsMap(configType).values());
+ }
+
+ protected <C extends AbstractConfig> C getConfig(Class<C> configType, String id) {
+ return read(() -> {
+ Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());
+ return configsMap.get(id);
+ });
+ }
+
+ protected <C extends AbstractConfig> C getConfig(Class<C> configType) throws IllegalStateException {
+ return read(() -> {
+ Map<String, C> configsMap = (Map) configsCache.getOrDefault(configType, emptyMap());
+ int size = configsMap.size();
+ if (size < 1) {
+// throw new IllegalStateException("No such " + configType.getName() + " is found");
+ return null;
+ } else if (size > 1) {
+ throw new IllegalStateException("The expected single matching " + configType.getName() + " but found " + size + " instances");
+ } else {
+ return configsMap.values().iterator().next();
+ }
+ });
+ }
+
+ protected <C extends AbstractConfig> Collection<String> getConfigIds(Class<C> configType) {
return getConfigs(configType)
.stream()
.map(AbstractConfig::getId)
@@ -406,8 +421,10 @@ public class ConfigManager {
try {
writeLock.lock();
value = callable.call();
+ } catch (RuntimeException e) {
+ throw e;
} catch (Throwable e) {
- throw new RuntimeException(e);
+ throw new RuntimeException(e.getCause());
} finally {
writeLock.unlock();
}
@@ -421,12 +438,9 @@ public class ConfigManager {
});
}
-
private <V> V read(Callable<V> callable) {
Lock readLock = lock.readLock();
-
V value = null;
-
try {
readLock.lock();
value = callable.call();
@@ -435,7 +449,6 @@ public class ConfigManager {
} finally {
readLock.unlock();
}
-
return value;
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
index 44e896d..41f5f3b 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java
@@ -17,15 +17,28 @@
package org.apache.dubbo.config.context;
import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ConfigCenterConfig;
+import org.apache.dubbo.config.ConsumerConfig;
+import org.apache.dubbo.config.MetricsConfig;
import org.apache.dubbo.config.ModuleConfig;
import org.apache.dubbo.config.MonitorConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.ProviderConfig;
+import org.apache.dubbo.config.ReferenceConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import java.util.Collection;
+
+import static java.util.Arrays.asList;
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
import static org.apache.dubbo.config.context.ConfigManager.getInstance;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
@@ -40,32 +53,197 @@ public class ConfigManagerTest {
@BeforeEach
public void init() {
configManager.clear();
+ }
+
+ @Test
+ public void testDefaultValues() {
+ // assert single
assertFalse(configManager.getApplication().isPresent());
assertFalse(configManager.getMonitor().isPresent());
- assertFalse(configManager.getMonitor().isPresent());
+ assertFalse(configManager.getModule().isPresent());
+ assertFalse(configManager.getMetrics().isPresent());
+
+ // providers and consumers
+ assertFalse(configManager.getDefaultProvider().isPresent());
+ assertFalse(configManager.getDefaultConsumer().isPresent());
+ assertTrue(configManager.getProviders().isEmpty());
+ assertTrue(configManager.getConsumers().isEmpty());
+
+ // protocols
+ assertTrue(configManager.getProtocols().isEmpty());
+ assertTrue(configManager.getDefaultProtocols().isEmpty());
+ assertTrue(configManager.getProtocolIds().isEmpty());
+
+ // registries
+ assertTrue(configManager.getRegistries().isEmpty());
+ assertTrue(configManager.getDefaultRegistries().isEmpty());
+ assertTrue(configManager.getRegistryIds().isEmpty());
+
+ // services and references
+ assertTrue(configManager.getServices().isEmpty());
+ assertTrue(configManager.getReferences().isEmpty());
+
+ // config centers
+ assertTrue(configManager.getConfigCenters().isEmpty());
+
+ // metadata
+ assertTrue(configManager.getMetadataConfigs().isEmpty());
}
+ // Test ApplicationConfig correlative methods
@Test
public void testApplicationConfig() {
- ApplicationConfig applicationConfig = new ApplicationConfig();
- configManager.setApplication(applicationConfig);
+ ApplicationConfig config = new ApplicationConfig();
+ configManager.setApplication(config);
assertTrue(configManager.getApplication().isPresent());
- assertEquals(applicationConfig, configManager.getApplication().get());
+ assertEquals(config, configManager.getApplication().get());
+ assertThrows(IllegalStateException.class, () -> {
+ configManager.setApplication(new ApplicationConfig("test"));
+ });
}
+ // Test MonitorConfig correlative methods
@Test
public void testMonitorConfig() {
MonitorConfig monitorConfig = new MonitorConfig();
+ monitorConfig.setGroup("test");
configManager.setMonitor(monitorConfig);
assertTrue(configManager.getMonitor().isPresent());
assertEquals(monitorConfig, configManager.getMonitor().get());
+ assertThrows(IllegalStateException.class, () -> {
+ configManager.setMonitor(new MonitorConfig());
+ });
}
+ // Test MonitorConfig correlative methods
@Test
public void tesModuleConfig() {
ModuleConfig config = new ModuleConfig();
configManager.setModule(config);
assertTrue(configManager.getModule().isPresent());
assertEquals(config, configManager.getModule().get());
+ assertThrows(IllegalStateException.class, () -> {
+ configManager.setModule(new ModuleConfig("test"));
+ });
+ }
+
+ // Test MetricsConfig correlative methods
+ @Test
+ public void tesMetricsConfig() {
+ MetricsConfig config = new MetricsConfig();
+ configManager.setMetrics(config);
+ assertTrue(configManager.getMetrics().isPresent());
+ assertEquals(config, configManager.getMetrics().get());
+ assertThrows(IllegalStateException.class, () -> {
+ MetricsConfig metricsConfig = new MetricsConfig();
+ metricsConfig.setPort("101");
+ configManager.setMetrics(metricsConfig);
+ });
+ }
+
+ // Test ProviderConfig correlative methods
+ @Test
+ public void testProviderConfig() {
+ ProviderConfig config = new ProviderConfig();
+ configManager.addProviders(asList(config, null));
+ Collection<ProviderConfig> configs = configManager.getProviders();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertFalse(configManager.getDefaultProvider().isPresent());
+
+ config.setId(DEFAULT_KEY);
+ configManager.addProvider(config);
+ assertTrue(configManager.getDefaultProvider().isPresent());
+ configs = configManager.getProviders();
+ assertEquals(2, configs.size());
+ }
+
+ // Test ConsumerConfig correlative methods
+ @Test
+ public void testConsumerConfig() {
+ ConsumerConfig config = new ConsumerConfig();
+ configManager.addConsumers(asList(config, null));
+ Collection<ConsumerConfig> configs = configManager.getConsumers();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertFalse(configManager.getDefaultConsumer().isPresent());
+
+ config.setId(DEFAULT_KEY);
+ configManager.addConsumer(config);
+ assertTrue(configManager.getDefaultConsumer().isPresent());
+ configs = configManager.getConsumers();
+ assertEquals(2, configs.size());
+ }
+
+ // Test ProtocolConfig correlative methods
+ @Test
+ public void testProtocolConfig() {
+ ProtocolConfig config = new ProtocolConfig();
+ configManager.addProtocols(asList(config, null));
+ Collection<ProtocolConfig> configs = configManager.getProtocols();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertFalse(configManager.getDefaultProtocols().isEmpty());
+ }
+
+ // Test RegistryConfig correlative methods
+ @Test
+ public void testRegistryConfig() {
+ RegistryConfig config = new RegistryConfig();
+ configManager.addRegistries(asList(config, null));
+ Collection<RegistryConfig> configs = configManager.getRegistries();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertFalse(configManager.getDefaultRegistries().isEmpty());
+ }
+
+ // Test ServiceConfig correlative methods
+ @Test
+ public void testServiceConfig() {
+ ServiceConfig config = new ServiceConfig();
+ config.setId("test");
+ configManager.addServices(asList(config, null));
+ Collection<ServiceConfig> configs = configManager.getServices();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertEquals(config, configManager.getService("test"));
+ }
+
+ // Test ReferenceConfig correlative methods
+ @Test
+ public void testReferenceConfig() {
+ ReferenceConfig config = new ReferenceConfig();
+ config.setId("test");
+ configManager.addReferences(asList(config, null));
+ Collection<ReferenceConfig> configs = configManager.getReferences();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ assertEquals(config, configManager.getReference("test"));
+ }
+
+ // Test ConfigCenterConfig correlative methods
+ @Test
+ public void testConfigCenterConfig() {
+ ConfigCenterConfig config = new ConfigCenterConfig();
+ configManager.addConfigCenters(asList(config, null));
+ Collection<ConfigCenterConfig> configs = configManager.getConfigCenters();
+ assertEquals(1, configs.size());
+ assertEquals(config, configs.iterator().next());
+ }
+
+ @Test
+ public void testAddConfig() {
+ configManager.addConfig(new ApplicationConfig());
+ configManager.addConfig(new ProviderConfig());
+ configManager.addConfig(new ProtocolConfig());
+
+ assertTrue(configManager.getApplication().isPresent());
+ assertFalse(configManager.getProviders().isEmpty());
+ assertFalse(configManager.getProtocols().isEmpty());
+ }
+
+ @Test
+ public void testRefreshAll() {
+ configManager.refreshAll();
}
}