You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/02 08:24:05 UTC
[dubbo] branch 3.0-multi-instances updated (ccdc691 -> d183d9b)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a change to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git.
from ccdc691 Fix ut in DubboBootstrapTest
add 23e2f4d Verify remote refer for registry (#8645)
add 8a30700 [3.0-Triple] Remove throwable tw-bin header and truncate exception (#8642)
add 7d84894 [3.0-triple] Add tri inner health service (#8644)
add 067dba3 When use delay to export service, catch the exception and log it. (#8584)
add 17042b4 test: Support checking metadata service in multiple registry center (#8606)
add 2c5d60f optimize: example add Triple protocol Demo (#8643)
add b8de0a7 [3.0] Add gen MethodDescriptor valid, avoid strange situations (#8651)
new ffaa007 Merge branch 'apache-3.0' into 3.0-multi-instances
new d183d9b Fix uts
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../org/apache/dubbo/rpc/cluster/RouterChain.java | 14 +-
.../cluster/support/wrapper/AbstractCluster.java | 4 +
.../support/wrapper/MockClusterWrapper.java | 5 +-
.../apache/dubbo/rpc/cluster/RouterChainTest.java | 36 +-
.../support/wrapper/AbstractClusterTest.java | 106 ++++
.../wrapper/DemoClusterFilter.java} | 25 +-
...g.apache.dubbo.rpc.cluster.filter.ClusterFilter | 1 +
dubbo-common/pom.xml | 14 +
.../java/org/apache/dubbo/common/URLBuilder.java | 17 +
.../url/component/DubboServiceAddressURL.java | 1 +
.../common/url/component/ServiceConfigURL.java | 2 +
.../apache/dubbo/rpc/model/MethodDescriptor.java | 166 ++++++-
.../apache/dubbo/descriptor/DescriptorService.java | 65 +++
.../dubbo/descriptor/MethodDescriptorTest.java | 157 +++++-
.../org/apache/dubbo/config/ReferenceConfig.java | 7 +-
.../org/apache/dubbo/config/ServiceConfig.java | 12 +-
.../apache/dubbo/config/ReferenceConfigTest.java | 118 ++++-
...istryCenterExportMetadataExporterListener.java} | 4 +-
...gistryCenterExportMetadataIntegrationTest.java} | 48 +-
...ltipleRegistryCenterExportMetadataService.java} | 6 +-
...leRegistryCenterExportMetadataServiceImpl.java} | 6 +-
...gistryCenterExportMetadataServiceListener.java} | 6 +-
.../org.apache.dubbo.config.ServiceListener | 1 +
.../services/org.apache.dubbo.rpc.ExporterListener | 1 +
.../registrycenter/AbstractRegistryCenter.java | 4 +-
.../{GreetingService.java => TripleService.java} | 5 +-
.../dubbo-demo-xml/dubbo-demo-xml-consumer/pom.xml | 4 +
.../apache/dubbo/demo/consumer/Application.java | 17 +
.../src/main/resources/spring/dubbo-consumer.xml | 3 +
.../dubbo-demo-xml/dubbo-demo-xml-provider/pom.xml | 4 +
...tingServiceImpl.java => TripleServiceImpl.java} | 11 +-
.../src/main/resources/spring/dubbo-provider.xml | 4 +
.../dubbo/registry/client/InstanceAddressURL.java | 2 +
.../registry/client/ServiceDiscoveryRegistry.java | 6 +-
.../client/ServiceDiscoveryRegistryDirectory.java | 17 +-
.../client/migration/MigrationInvoker.java | 8 +
.../registry/integration/DynamicDirectory.java | 75 ++-
.../InterfaceCompatibleRegistryProtocol.java | 1 +
.../registry/integration/RegistryDirectory.java | 21 +-
.../registry/integration/RegistryProtocol.java | 18 +-
...est.java => CacheableFallbackRegistryTest.java} | 31 +-
.../registry/ListenerRegistryWrapperTest.java | 84 ++++
.../dubbo/registry/RegistryFactoryWrapperTest.java | 2 +-
.../dubbo/registry/RegistryServiceListener1.java | 2 +-
.../dubbo/registry/RegistryServiceListener2.java | 2 +-
.../store/RemoteMetadataServiceImplTest.java | 21 -
.../client/migration/MigrationRuleHandlerTest.java | 2 +-
.../integration/CountRegistryProtocolListener.java | 33 +-
.../DemoService.java} | 4 +-
.../registry/integration/DynamicDirectoryTest.java | 173 +++++++
.../registry/integration/RegistryProtocolTest.java | 540 +++++++++++++++++++++
...o.registry.integration.RegistryProtocolListener | 1 +
.../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java | 22 +
.../protocol/grpc/support/DubboGreeterGrpc.java | 3 +-
dubbo-rpc/dubbo-rpc-triple/pom.xml | 10 +
.../dubbo/rpc/protocol/tri/AbstractStream.java | 58 +--
.../dubbo/rpc/protocol/tri/ExceptionUtils.java | 8 +-
.../apache/dubbo/rpc/protocol/tri/GrpcStatus.java | 9 +-
.../rpc/protocol/tri/ServerTransportObserver.java | 4 +-
.../dubbo/rpc/protocol/tri/TripleHeaderEnum.java | 3 +-
.../dubbo/rpc/protocol/tri/TripleProtocol.java | 11 +
.../dubbo/rpc/protocol/tri/UnaryClientStream.java | 60 +--
.../protocol/tri/service/HealthStatusManager.java | 74 +++
.../protocol/tri/service/TriBuiltinService.java | 86 ++++
.../rpc/protocol/tri/service/TriHealthImpl.java | 145 ++++++
.../dubbo-rpc-triple/src/main/proto/health.proto | 66 +++
.../dubbo/rpc/protocol/tri/TripleProtocolTest.java | 21 +-
.../dubbo/rpc/protocol/tri/support/IGreeter.java | 11 +
.../rpc/protocol/tri/support/IGreeterImpl.java | 9 +
pom.xml | 1 +
70 files changed, 2202 insertions(+), 316 deletions(-)
copy dubbo-remoting/dubbo-remoting-api/src/test/java/org/apache/dubbo/remoting/api/PortUnificationServerTest.java => dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/RouterChainTest.java (51%)
create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/wrapper/AbstractClusterTest.java
copy dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/{filter/LogFilter.java => support/wrapper/DemoClusterFilter.java} (75%)
create mode 100644 dubbo-cluster/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataExporterListener.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataExporterListener.java} (87%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataIntegrationTest.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java} (77%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataService.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataService.java} (84%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/injvm/SingleRegistryCenterInjvmServiceImpl.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataServiceImpl.java} (78%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/{single/exportmetadata/SingleRegistryCenterExportMetadataServiceListener.java => multiple/exportmetadata/MultipleRegistryCenterExportMetadataServiceListener.java} (83%)
copy dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/{GreetingService.java => TripleService.java} (94%)
copy dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-provider/src/main/java/org/apache/dubbo/demo/provider/{GreetingServiceImpl.java => TripleServiceImpl.java} (85%)
rename dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/{CacheableFailbackRegistryTest.java => CacheableFallbackRegistryTest.java} (88%)
create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ListenerRegistryWrapperTest.java
delete mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImplTest.java
copy dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockProtocol.java => dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/CountRegistryProtocolListener.java (58%)
rename dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/{DelayedRegistryNotifierTest.java => integration/DemoService.java} (91%)
create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/DynamicDirectoryTest.java
create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
create mode 100644 dubbo-registry/dubbo-registry-api/src/test/resources/META-INF/dubbo/org.apache.dubbo.registry.integration.RegistryProtocolListener
create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/HealthStatusManager.java
create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/TriBuiltinService.java
create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/service/TriHealthImpl.java
create mode 100644 dubbo-rpc/dubbo-rpc-triple/src/main/proto/health.proto
[dubbo] 02/02: Fix uts
Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit d183d9b035b19c260d03a612e23eeff47fbd1278
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 2 16:23:16 2021 +0800
Fix uts
---
.../org/apache/dubbo/config/ReferenceConfig.java | 2 +
.../apache/dubbo/config/ReferenceConfigTest.java | 91 +++---------------
.../registry/integration/RegistryProtocolTest.java | 106 ++++++++++-----------
.../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java | 4 +-
4 files changed, 67 insertions(+), 136 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 5b1cd75..97e52f6 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -421,6 +421,7 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
if (StringUtils.isEmpty(url.getPath())) {
url = url.setPath(interfaceName);
}
+ url = url.setScopeModel(getScopeModel());
url = url.setServiceModel(consumerModel);
if (UrlUtils.isRegistry(url)) {
urls.add(url.putAttribute(REFER_KEY, referenceParameters));
@@ -445,6 +446,7 @@ public class ReferenceConfig<T> extends ReferenceConfigBase<T> {
if (monitorUrl != null) {
u = u.putAttribute(MONITOR_KEY, monitorUrl);
}
+ u = u.setScopeModel(getScopeModel());
u = u.setServiceModel(consumerModel);
urls.add(u.putAttribute(REFER_KEY, referenceParameters));
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index ed45fda..fa64410 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@ -28,9 +28,6 @@ import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
-
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.MetadataReportInstance;
import org.apache.dubbo.registry.client.migration.MigrationInvoker;
import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.ProxyFactory;
@@ -480,9 +477,6 @@ public class ReferenceConfigTest {
Assertions.assertEquals("value2", url.getParameter("key2"));
dubboBootstrap.stop();
-
- applicationModelMockedStatic.closeOnDemand();
- metadataReportInstanceMockedStatic.closeOnDemand();
}
/**
@@ -498,10 +492,7 @@ public class ReferenceConfigTest {
referenceConfig.setLazy(false);
referenceConfig.setInjvm(false);
- DubboBootstrap.getInstance()
- .application("application1")
- .initialize();
- referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+ DubboBootstrap dubboBootstrap = DubboBootstrap.newInstance(FrameworkModel.defaultModel());
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("application1");
@@ -510,35 +501,6 @@ public class ReferenceConfigTest {
parameters.put("key2", "value2");
applicationConfig.setParameters(parameters);
- ConfigManager configManager = mock(ConfigManager.class);
- Environment environment = mock(Environment.class);
- CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
- Configuration dynamicGlobalConfiguration = mock(Configuration.class);
- ServiceRepository serviceRepository = mock(ServiceRepository.class);
- ConsumerModel consumerModel = mock(ConsumerModel.class);
-
- when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
-
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
- applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
- when(environment.getConfiguration()).thenReturn(compositeConfiguration);
- when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
- .thenReturn(true);
-
- MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
- Mockito.mockStatic(MetadataReportInstance.class);
-
- MetadataReport metadataReport = mock(MetadataReport.class);
- metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
- .thenReturn(metadataReport);
-
-
- when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
- .thenReturn(consumerModel);
-
referenceConfig.refreshed.set(true);
referenceConfig.setInterface(DemoService.class);
referenceConfig.getInterfaceClass();
@@ -550,11 +512,15 @@ public class ReferenceConfigTest {
referenceConfig.setRegistry(registry);
+ dubboBootstrap
+ .application(applicationConfig)
+ .reference(referenceConfig)
+ .initialize();
+
referenceConfig.init();
Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
- applicationModelMockedStatic.closeOnDemand();
- metadataReportInstanceMockedStatic.closeOnDemand();
+ dubboBootstrap.destroy();
}
/**
@@ -570,10 +536,7 @@ public class ReferenceConfigTest {
referenceConfig.setLazy(false);
referenceConfig.setInjvm(false);
- DubboBootstrap.getInstance()
- .application("application1")
- .initialize();
- referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+ DubboBootstrap dubboBootstrap = DubboBootstrap.newInstance(FrameworkModel.defaultModel());
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("application1");
@@ -582,46 +545,22 @@ public class ReferenceConfigTest {
parameters.put("key2", "value2");
applicationConfig.setParameters(parameters);
- ConfigManager configManager = mock(ConfigManager.class);
- Environment environment = mock(Environment.class);
- CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
- Configuration dynamicGlobalConfiguration = mock(Configuration.class);
- ServiceRepository serviceRepository = mock(ServiceRepository.class);
- ConsumerModel consumerModel = mock(ConsumerModel.class);
-
- when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
-
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
- applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
- when(environment.getConfiguration()).thenReturn(compositeConfiguration);
- when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
- .thenReturn(true);
-
- MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
- Mockito.mockStatic(MetadataReportInstance.class);
-
- MetadataReport metadataReport = mock(MetadataReport.class);
- metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
- .thenReturn(metadataReport);
-
-
- when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
- .thenReturn(consumerModel);
-
referenceConfig.refreshed.set(true);
referenceConfig.setInterface(DemoService.class);
referenceConfig.getInterfaceClass();
referenceConfig.setCheck(false);
referenceConfig.setUrl(registryUrl);
+
+ dubboBootstrap
+ .application(applicationConfig)
+ .reference(referenceConfig)
+ .initialize();
+
referenceConfig.init();
Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+ dubboBootstrap.destroy();
- applicationModelMockedStatic.closeOnDemand();
- metadataReportInstanceMockedStatic.closeOnDemand();
}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
index 9f1e635..14e42e9 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
@@ -35,10 +35,10 @@ import org.apache.dubbo.rpc.cluster.support.FailoverCluster;
import org.apache.dubbo.rpc.cluster.support.MergeableCluster;
import org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper;
import org.apache.dubbo.rpc.model.ApplicationModel;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
import org.mockito.Mockito;
import java.io.IOException;
@@ -47,10 +47,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;
import static org.apache.dubbo.common.constants.RegistryConstants.CONSUMERS_CATEGORY;
import static org.apache.dubbo.registry.Constants.ENABLE_CONFIGURATION_LISTEN;
@@ -59,16 +59,16 @@ import static org.apache.dubbo.remoting.Constants.CHECK_KEY;
import static org.apache.dubbo.rpc.cluster.Constants.CONSUMER_URL_KEY;
import static org.apache.dubbo.rpc.cluster.Constants.REFER_KEY;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.when;
public class RegistryProtocolTest {
@AfterEach
public void tearDown() throws IOException {
Mockito.framework().clearInlineMocks();
+ ApplicationModel.defaultModel().destroy();
}
/**
@@ -92,10 +92,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -117,7 +113,14 @@ public class RegistryProtocolTest {
Registry registry = mock(Registry.class);
RegistryProtocol registryProtocol = new RegistryProtocol();
- registryProtocol.setRegistryFactory(registryFactory);
+
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+ url = url.setScopeModel(applicationModel);
+
when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
@@ -135,8 +138,6 @@ public class RegistryProtocolTest {
Assertions.assertEquals(parameters.get(REGISTER_IP_KEY), consumerUrl.getHost());
Assertions.assertFalse(consumerUrl.getAttributes().containsKey(REFER_KEY));
Assertions.assertEquals("value1", consumerUrl.getAttribute("key1"));
-
- applicationModelMockedStatic.closeOnDemand();
}
/**
@@ -160,10 +161,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -182,10 +179,16 @@ public class RegistryProtocolTest {
URL url = serviceConfigURL.addAttributes(attributes);
RegistryFactory registryFactory = mock(RegistryFactory.class);
- Registry registry = mock(Registry.class);
RegistryProtocol registryProtocol = new RegistryProtocol();
- registryProtocol.setRegistryFactory(registryFactory);
+ Registry registry = mock(Registry.class);
+
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+ url = url.setScopeModel(applicationModel);
when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
@@ -204,7 +207,6 @@ public class RegistryProtocolTest {
Assertions.assertFalse(consumerUrl.getAttributes().containsKey(REFER_KEY));
Assertions.assertEquals("value1", consumerUrl.getAttribute("key1"));
- applicationModelMockedStatic.closeOnDemand();
}
/**
@@ -232,10 +234,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -255,7 +253,12 @@ public class RegistryProtocolTest {
Registry registry = mock(Registry.class);
RegistryProtocol registryProtocol = new RegistryProtocol();
- registryProtocol.setRegistryFactory(registryFactory);
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+ url = url.setScopeModel(applicationModel);
when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
@@ -265,8 +268,6 @@ public class RegistryProtocolTest {
Assertions.assertTrue(((MigrationInvoker<?>) invoker).getCluster() instanceof MockClusterWrapper);
Assertions.assertTrue(
((MockClusterWrapper) ((MigrationInvoker<?>) invoker).getCluster()).getCluster() instanceof FailoverCluster);
-
- applicationModelMockedStatic.closeOnDemand();
}
/**
@@ -292,10 +293,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -317,7 +314,12 @@ public class RegistryProtocolTest {
Registry registry = mock(Registry.class);
RegistryProtocol registryProtocol = new RegistryProtocol();
- registryProtocol.setRegistryFactory(registryFactory);
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+ url = url.setScopeModel(applicationModel);
when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
@@ -330,7 +332,6 @@ public class RegistryProtocolTest {
Assertions.assertTrue(
((MockClusterWrapper) ((MigrationInvoker<?>) invoker).getCluster()).getCluster() instanceof MergeableCluster);
- applicationModelMockedStatic.closeOnDemand();
}
/**
@@ -356,10 +357,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -377,7 +374,6 @@ public class RegistryProtocolTest {
attributes.put(REFER_KEY, refer);
URL url = serviceConfigURL.addAttributes(attributes);
- RegistryProtocol registryProtocol = new RegistryProtocol();
MigrationInvoker<?> clusterInvoker = mock(MigrationInvoker.class);
Map<String, Object> consumerAttribute = new HashMap<>(url.getAttributes());
@@ -393,19 +389,18 @@ public class RegistryProtocolTest {
MigrationRuleListener migrationRuleListener = mock(MigrationRuleListener.class);
List<RegistryProtocolListener> registryProtocolListeners = new ArrayList<>();
registryProtocolListeners.add(migrationRuleListener);
- MockedStatic<ExtensionLoader> extensionLoaderMockedStatic = mockStatic(ExtensionLoader.class);
- ExtensionLoader extensionLoaderForRegistryProtocolListener = mock(ExtensionLoader.class);
- when(ExtensionLoader.getExtensionLoader(RegistryProtocolListener.class))
- .thenReturn(extensionLoaderForRegistryProtocolListener);
- when(extensionLoaderForRegistryProtocolListener.getActivateExtension(url, "registry.protocol.listener"))
+
+ RegistryProtocol registryProtocol = new RegistryProtocol();
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryProtocolListener> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryProtocolListener.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getActivateExtension(url, "registry.protocol.listener"))
.thenReturn(registryProtocolListeners);
+ url = url.setScopeModel(applicationModel);
registryProtocol.interceptInvoker(clusterInvoker, url, consumerUrl, url);
verify(migrationRuleListener, times(1)).onRefer(registryProtocol, clusterInvoker, consumerUrl, url);
-
- extensionLoaderMockedStatic.closeOnDemand();
- applicationModelMockedStatic.closeOnDemand();
-
}
@@ -433,10 +428,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -472,7 +463,6 @@ public class RegistryProtocolTest {
registryProtocol.interceptInvoker(clusterInvoker, url, consumerUrl, url);
Assertions.assertEquals(1, CountRegistryProtocolListener.getReferCounter().get());
- applicationModelMockedStatic.closeOnDemand();
}
/**
@@ -496,10 +486,6 @@ public class RegistryProtocolTest {
when(environment.getConfiguration()).thenReturn(compositeConfiguration);
when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
- MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
- applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
- applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
-
Map<String, String> parameters = new HashMap<>();
parameters.put(INTERFACE_KEY, DemoService.class.getName());
parameters.put("registry", "zookeeper");
@@ -520,8 +506,14 @@ public class RegistryProtocolTest {
RegistryFactory registryFactory = mock(RegistryFactory.class);
Registry registry = mock(Registry.class);
+ ApplicationModel applicationModel = Mockito.spy(ApplicationModel.defaultModel());
+ applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig("application1"));
+ ExtensionLoader<RegistryFactory> extensionLoaderMock = mock(ExtensionLoader.class);
+ Mockito.when(applicationModel.getExtensionLoader(RegistryFactory.class)).thenReturn(extensionLoaderMock);
+ Mockito.when(extensionLoaderMock.getAdaptiveExtension()).thenReturn(registryFactory);
+ url = url.setScopeModel(applicationModel);
+
RegistryProtocol registryProtocol = new RegistryProtocol();
- registryProtocol.setRegistryFactory(registryFactory);
when(registryFactory.getRegistry(registryProtocol.getRegistryUrl(url))).thenReturn(registry);
@@ -543,8 +535,6 @@ public class RegistryProtocolTest {
String.valueOf(false));
verify(registry,times(1)).register(registeredConsumerUrl);
-
- applicationModelMockedStatic.closeOnDemand();
}
}
diff --git a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 2c3ea35..75d1eb8 100644
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@ -17,8 +17,6 @@
package org.apache.dubbo.rpc.protocol.grpc;
-import com.google.common.util.concurrent.ListenableFuture;
-import io.grpc.stub.StreamObserver;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.utils.NetUtils;
@@ -35,6 +33,8 @@ import org.apache.dubbo.rpc.protocol.grpc.support.GrpcGreeterImpl;
import org.apache.dubbo.rpc.protocol.grpc.support.HelloReply;
import org.apache.dubbo.rpc.protocol.grpc.support.HelloRequest;
+import com.google.common.util.concurrent.ListenableFuture;
+import io.grpc.stub.StreamObserver;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
[dubbo] 01/02: Merge branch 'apache-3.0' into 3.0-multi-instances
Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit ffaa0072699c0c49bdf86110bd6bdb4eda919a64
Merge: ccdc691 b8de0a7
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 2 15:46:34 2021 +0800
Merge branch 'apache-3.0' into 3.0-multi-instances
# Conflicts:
# dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
# dubbo-common/src/main/java/org/apache/dubbo/common/url/component/ServiceConfigURL.java
# dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
.../org/apache/dubbo/rpc/cluster/RouterChain.java | 14 +-
.../cluster/support/wrapper/AbstractCluster.java | 4 +
.../support/wrapper/MockClusterWrapper.java | 5 +-
.../apache/dubbo/rpc/cluster/RouterChainTest.java | 52 ++
.../support/wrapper/AbstractClusterTest.java | 106 ++++
.../support/wrapper/DemoClusterFilter.java} | 27 +-
...g.apache.dubbo.rpc.cluster.filter.ClusterFilter | 1 +
dubbo-common/pom.xml | 14 +
.../java/org/apache/dubbo/common/URLBuilder.java | 17 +
.../url/component/DubboServiceAddressURL.java | 1 +
.../common/url/component/ServiceConfigURL.java | 2 +
.../apache/dubbo/rpc/model/MethodDescriptor.java | 166 ++++++-
.../apache/dubbo/descriptor/DescriptorService.java | 65 +++
.../dubbo/descriptor/MethodDescriptorTest.java | 157 +++++-
.../org/apache/dubbo/config/ReferenceConfig.java | 5 +-
.../org/apache/dubbo/config/ServiceConfig.java | 12 +-
.../apache/dubbo/config/ReferenceConfigTest.java | 179 ++++++-
...gistryCenterExportMetadataExporterListener.java | 32 +-
...egistryCenterExportMetadataIntegrationTest.java | 207 ++++++++
...ultipleRegistryCenterExportMetadataService.java | 11 +-
...pleRegistryCenterExportMetadataServiceImpl.java | 14 +-
...egistryCenterExportMetadataServiceListener.java | 29 +-
.../org.apache.dubbo.config.ServiceListener | 1 +
.../services/org.apache.dubbo.rpc.ExporterListener | 1 +
.../registrycenter/AbstractRegistryCenter.java | 4 +-
.../java/org/apache/dubbo/demo/TripleService.java | 6 +-
.../dubbo-demo-xml/dubbo-demo-xml-consumer/pom.xml | 4 +
.../apache/dubbo/demo/consumer/Application.java | 17 +
.../src/main/resources/spring/dubbo-consumer.xml | 3 +
.../dubbo-demo-xml/dubbo-demo-xml-provider/pom.xml | 4 +
.../dubbo/demo/provider/TripleServiceImpl.java | 11 +-
.../src/main/resources/spring/dubbo-provider.xml | 4 +
.../dubbo/registry/client/InstanceAddressURL.java | 2 +
.../registry/client/ServiceDiscoveryRegistry.java | 6 +-
.../client/ServiceDiscoveryRegistryDirectory.java | 17 +-
.../client/migration/MigrationInvoker.java | 8 +
.../registry/integration/DynamicDirectory.java | 75 ++-
.../InterfaceCompatibleRegistryProtocol.java | 1 +
.../registry/integration/RegistryDirectory.java | 21 +-
.../registry/integration/RegistryProtocol.java | 18 +-
...est.java => CacheableFallbackRegistryTest.java} | 31 +-
.../registry/ListenerRegistryWrapperTest.java | 84 ++++
.../dubbo/registry/RegistryFactoryWrapperTest.java | 2 +-
.../dubbo/registry/RegistryServiceListener1.java | 2 +-
.../dubbo/registry/RegistryServiceListener2.java | 2 +-
.../client/migration/MigrationRuleHandlerTest.java | 2 +-
.../CountRegistryProtocolListener.java} | 31 +-
.../DemoService.java} | 4 +-
.../registry/integration/DynamicDirectoryTest.java | 173 +++++++
.../registry/integration/RegistryProtocolTest.java | 550 +++++++++++++++++++++
...o.registry.integration.RegistryProtocolListener | 1 +
.../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java | 22 +
.../protocol/grpc/support/DubboGreeterGrpc.java | 3 +-
dubbo-rpc/dubbo-rpc-triple/pom.xml | 10 +
.../dubbo/rpc/protocol/tri/AbstractStream.java | 58 +--
.../dubbo/rpc/protocol/tri/ExceptionUtils.java | 8 +-
.../apache/dubbo/rpc/protocol/tri/GrpcStatus.java | 9 +-
.../rpc/protocol/tri/ServerTransportObserver.java | 4 +-
.../dubbo/rpc/protocol/tri/TripleHeaderEnum.java | 3 +-
.../dubbo/rpc/protocol/tri/TripleProtocol.java | 11 +
.../dubbo/rpc/protocol/tri/UnaryClientStream.java | 60 +--
.../protocol/tri/service/HealthStatusManager.java | 74 +++
.../protocol/tri/service/TriBuiltinService.java | 86 ++++
.../rpc/protocol/tri/service/TriHealthImpl.java | 145 ++++++
.../dubbo-rpc-triple/src/main/proto/health.proto | 66 +++
.../dubbo/rpc/protocol/tri/TripleProtocolTest.java | 21 +-
.../dubbo/rpc/protocol/tri/support/IGreeter.java | 11 +
.../rpc/protocol/tri/support/IGreeterImpl.java | 9 +
pom.xml | 1 +
69 files changed, 2520 insertions(+), 286 deletions(-)
diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
index 24ea293,83a2dab..21e114f
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URLBuilder.java
@@@ -205,11 -207,6 +210,12 @@@ public final class URLBuilder extends S
}
@Override
+ public URLBuilder setScopeModel(ScopeModel scopeModel) {
+ this.attributes.put(SCOPE_MODEL, scopeModel);
+ return this;
+ }
+
++ @Override
public URLBuilder addParameterAndEncoded(String key, String value) {
if (StringUtils.isEmpty(value)) {
return this;
diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
index f8214ef,9f13ce3..ed45fda
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
@@@ -27,7 -30,12 +27,11 @@@ import org.apache.dubbo.config.annotati
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
-import org.apache.dubbo.config.context.ConfigManager;
import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
+
+ import org.apache.dubbo.metadata.report.MetadataReport;
+ import org.apache.dubbo.metadata.report.MetadataReportInstance;
+ import org.apache.dubbo.registry.client.migration.MigrationInvoker;
import org.apache.dubbo.rpc.Exporter;
import org.apache.dubbo.rpc.ProxyFactory;
import org.apache.dubbo.rpc.listener.ListenerInvokerWrapper;
@@@ -108,11 -123,9 +113,12 @@@ public class ReferenceConfigTest
int zkServerPort = NetUtils.getAvailablePort(NetUtils.getRandomPort());
this.zkServer = new TestingServer(zkServerPort, true);
this.zkServer.start();
- this.registryUrl = "zookeeper://localhost:" + zkServerPort;
+ this.zkUrl = "zookeeper://localhost:" + zkServerPort;
+ this.registryUrl = "registry://localhost:" + zkServerPort+"?registry=zookeeper";
- ApplicationModel.getConfigManager();
+
+ // preload
+ ReferenceConfig preloadReferenceConfig = new ReferenceConfig();
+ ApplicationModel.defaultModel().getApplicationConfigManager();
DubboBootstrap.getInstance();
}
@@@ -473,19 -547,160 +479,162 @@@
Assertions.assertEquals("value1", url.getParameter("key1"));
Assertions.assertEquals("value2", url.getParameter("key2"));
+ dubboBootstrap.stop();
++
+ applicationModelMockedStatic.closeOnDemand();
+ metadataReportInstanceMockedStatic.closeOnDemand();
+ }
+
-
+ /**
+ * Verify the configuration of the registry protocol for remote reference
+ */
+ @Test
+ public void testCreateInvokerForRemoteRefer(){
+
+ ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
+ referenceConfig.setGeneric(Boolean.FALSE.toString());
+ referenceConfig.setProtocol("dubbo");
+ referenceConfig.setInit(true);
+ referenceConfig.setLazy(false);
+ referenceConfig.setInjvm(false);
+
+ DubboBootstrap.getInstance()
+ .application("application1")
+ .initialize();
+ referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+
+ ApplicationConfig applicationConfig = new ApplicationConfig();
+ applicationConfig.setName("application1");
+ Map<String, String> parameters = new HashMap<>();
+ parameters.put("key1", "value1");
+ parameters.put("key2", "value2");
+ applicationConfig.setParameters(parameters);
+
+ ConfigManager configManager = mock(ConfigManager.class);
+ Environment environment = mock(Environment.class);
+ CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
+ Configuration dynamicGlobalConfiguration = mock(Configuration.class);
+ ServiceRepository serviceRepository = mock(ServiceRepository.class);
+ ConsumerModel consumerModel = mock(ConsumerModel.class);
+
+ when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
+
+ MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
+ applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
+ applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
+ applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
+ when(environment.getConfiguration()).thenReturn(compositeConfiguration);
+ when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
+ when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
+ .thenReturn(true);
+
+ MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
+ Mockito.mockStatic(MetadataReportInstance.class);
+
+ MetadataReport metadataReport = mock(MetadataReport.class);
+ metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
+ .thenReturn(metadataReport);
+
+
+ when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
+ .thenReturn(consumerModel);
+
+ referenceConfig.refreshed.set(true);
+ referenceConfig.setInterface(DemoService.class);
+ referenceConfig.getInterfaceClass();
+ referenceConfig.setCheck(false);
+ RegistryConfig registry = new RegistryConfig();
+ registry.setAddress(zkUrl);
+ applicationConfig.setRegistries(Collections.singletonList(registry));
+ applicationConfig.setRegistryIds(registry.getId());
+
+ referenceConfig.setRegistry(registry);
+
+ referenceConfig.init();
+ Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+
+ applicationModelMockedStatic.closeOnDemand();
+ metadataReportInstanceMockedStatic.closeOnDemand();
}
+ /**
+ * Verify that the registry url is directly configured for remote reference
+ */
+ @Test
+ public void testCreateInvokerWithRegistryUrlForRemoteRefer(){
+
+ ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<>();
+ referenceConfig.setGeneric(Boolean.FALSE.toString());
+ referenceConfig.setProtocol("dubbo");
+ referenceConfig.setInit(true);
+ referenceConfig.setLazy(false);
+ referenceConfig.setInjvm(false);
+
+ DubboBootstrap.getInstance()
+ .application("application1")
+ .initialize();
+ referenceConfig.setBootstrap(DubboBootstrap.getInstance());
+
+ ApplicationConfig applicationConfig = new ApplicationConfig();
+ applicationConfig.setName("application1");
+ Map<String, String> parameters = new HashMap<>();
+ parameters.put("key1", "value1");
+ parameters.put("key2", "value2");
+ applicationConfig.setParameters(parameters);
+
+ ConfigManager configManager = mock(ConfigManager.class);
+ Environment environment = mock(Environment.class);
+ CompositeConfiguration compositeConfiguration = mock(CompositeConfiguration.class);
+ Configuration dynamicGlobalConfiguration = mock(Configuration.class);
+ ServiceRepository serviceRepository = mock(ServiceRepository.class);
+ ConsumerModel consumerModel = mock(ConsumerModel.class);
+
+ when(configManager.getApplicationOrElseThrow()).thenReturn(applicationConfig);
+
+ MockedStatic<ApplicationModel> applicationModelMockedStatic = Mockito.mockStatic(ApplicationModel.class);
+ applicationModelMockedStatic.when(ApplicationModel::getConfigManager).thenReturn(configManager);
+ applicationModelMockedStatic.when(ApplicationModel::getEnvironment).thenReturn(environment);
+ applicationModelMockedStatic.when(ApplicationModel::getServiceRepository).thenReturn(serviceRepository);
+ when(environment.getConfiguration()).thenReturn(compositeConfiguration);
+ when(environment.getDynamicGlobalConfiguration()).thenReturn(dynamicGlobalConfiguration);
+ when(compositeConfiguration.convert(Boolean.class, ENABLE_CONFIGURATION_LISTEN, true))
+ .thenReturn(true);
+
+ MockedStatic<MetadataReportInstance> metadataReportInstanceMockedStatic =
+ Mockito.mockStatic(MetadataReportInstance.class);
+
+ MetadataReport metadataReport = mock(MetadataReport.class);
+ metadataReportInstanceMockedStatic.when(() -> MetadataReportInstance.getMetadataReport("default"))
+ .thenReturn(metadataReport);
+
+
+ when(serviceRepository.lookupReferredService("org.apache.dubbo.config.api.DemoService"))
+ .thenReturn(consumerModel);
+
+ referenceConfig.refreshed.set(true);
+ referenceConfig.setInterface(DemoService.class);
+ referenceConfig.getInterfaceClass();
+ referenceConfig.setCheck(false);
+
+ referenceConfig.setUrl(registryUrl);
+ referenceConfig.init();
+ Assertions.assertTrue(referenceConfig.getInvoker() instanceof MigrationInvoker);
+
+ applicationModelMockedStatic.closeOnDemand();
+ metadataReportInstanceMockedStatic.closeOnDemand();
+ }
+
++
@Test
@Disabled("Disabled due to Github Actions environment")
public void testInjvm() throws Exception {
ApplicationConfig application = new ApplicationConfig();
application.setName("test-protocol-random-port");
application.setEnableFileCache(false);
- ApplicationModel.getConfigManager().setApplication(application);
+ ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(application);
RegistryConfig registry = new RegistryConfig();
- registry.setAddress(registryUrl);
+ registry.setAddress(zkUrl);
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
@@@ -526,10 -741,10 +675,10 @@@
ApplicationConfig application = new ApplicationConfig();
application.setName("test-reference-retry");
application.setEnableFileCache(false);
- ApplicationModel.getConfigManager().setApplication(application);
+ ApplicationModel.defaultModel().getApplicationConfigManager().setApplication(application);
RegistryConfig registry = new RegistryConfig();
- registry.setAddress(registryUrl);
+ registry.setAddress(zkUrl);
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("injvm");
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
index 108292a,5792693..6e12519
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java
@@@ -55,15 -54,17 +55,18 @@@ import static org.apache.dubbo.rpc.mode
public class ServiceDiscoveryRegistryDirectory<T> extends DynamicDirectory<T> {
private static final Logger logger = LoggerFactory.getLogger(ServiceDiscoveryRegistryDirectory.class);
- // instance address to invoker mapping.
- private volatile Map<String, Invoker<T>> urlInvokerMap; // The initial value is null and the midway may be assigned to null, please use the local variable reference
+ /**
+ * instance address to invoker mapping.
+ * The initial value is null and the midway may be assigned to null, please use the local variable reference
+ */
+ private volatile Map<String, Invoker<T>> urlInvokerMap;
- private final static ConsumerConfigurationListener CONSUMER_CONFIGURATION_LISTENER = new ConsumerConfigurationListener();
+ private final ConsumerConfigurationListener consumerConfigurationListener;
private volatile ReferenceConfigurationListener referenceConfigurationListener;
private volatile boolean enableConfigurationListen = true;
- private volatile List<URL> originalUrls = null; // initial for null
+ private volatile List<URL> originalUrls = null;
private volatile Map<String, String> overrideQueryMap;
private volatile Map<String, String> consumerFirstQueryMap;
+ private final ApplicationModel applicationModel;
public ServiceDiscoveryRegistryDirectory(Class<T> serviceType, URL url) {
super(serviceType, url);
@@@ -185,8 -180,8 +186,8 @@@
}
private InstanceAddressURL overrideWithConfigurator(InstanceAddressURL providerUrl) {
- // override url with configurator from configurator from "app-name.configurators"
+ // override url with configurator from "app-name.configurators"
- providerUrl = overrideWithConfigurators(CONSUMER_CONFIGURATION_LISTENER.getConfigurators(), providerUrl);
+ providerUrl = overrideWithConfigurators(consumerConfigurationListener.getConfigurators(), providerUrl);
// override url with configurator from configurators from "service-name.configurators"
if (referenceConfigurationListener != null) {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index 7797d10,82058af..4fa1f76
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@@ -87,15 -86,19 +87,20 @@@ import static org.apache.dubbo.rpc.mode
public class RegistryDirectory<T> extends DynamicDirectory<T> {
private static final Logger logger = LoggerFactory.getLogger(RegistryDirectory.class);
- private static final ConsumerConfigurationListener CONSUMER_CONFIGURATION_LISTENER = new ConsumerConfigurationListener();
+ private final ConsumerConfigurationListener consumerConfigurationListener;
private ReferenceConfigurationListener referenceConfigurationListener;
- // Map<url, Invoker> cache service url to invoker mapping.
- // The initial value is null and the midway may be assigned to null, please use the local variable reference
+ /**
+ * Map<url, Invoker> cache service url to invoker mapping.
+ * The initial value is null and the midway may be assigned to null, please use the local variable reference
+ */
protected volatile Map<URL, Invoker<T>> urlInvokerMap;
- // The initial value is null and the midway may be assigned to null, please use the local variable reference
+
+ /**
+ * The initial value is null and the midway may be assigned to null, please use the local variable reference
+ */
protected volatile Set<URL> cachedInvokerUrls;
+ private final ApplicationModel applicationModel;
public RegistryDirectory(Class<T> serviceType, URL url) {
super(serviceType, url);
@@@ -411,8 -411,8 +415,8 @@@
// override url with configurator from "override://" URL for dubbo 2.6 and before
providerUrl = overrideWithConfigurators(this.configurators, providerUrl);
- // override url with configurator from configurator from "app-name.configurators"
+ // override url with configurator from "app-name.configurators"
- providerUrl = overrideWithConfigurators(CONSUMER_CONFIGURATION_LISTENER.getConfigurators(), providerUrl);
+ providerUrl = overrideWithConfigurators(consumerConfigurationListener.getConfigurators(), providerUrl);
// override url with configurator from configurators from "service-name.configurators"
if (referenceConfigurationListener != null) {
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index e687ff7,a4af51b..dea9fd8
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@@ -728,9 -694,9 +728,9 @@@ public class RegistryProtocol implement
//The current, may have been merged many times
URL currentUrl = exporter.getInvoker().getUrl();
//Merged with this configuration
- URL newUrl = getConfigedInvokerUrl(configurators, originUrl);
- newUrl = getConfigedInvokerUrl(getProviderConfigurationListener(originUrl).getConfigurators(), newUrl);
- newUrl = getConfigedInvokerUrl(serviceConfigurationListeners.get(originUrl.getServiceKey())
+ URL newUrl = getConfiguredInvokerUrl(configurators, originUrl);
- newUrl = getConfiguredInvokerUrl(providerConfigurationListener.getConfigurators(), newUrl);
++ newUrl = getConfiguredInvokerUrl(getProviderConfigurationListener(originUrl).getConfigurators(), newUrl);
+ newUrl = getConfiguredInvokerUrl(serviceConfigurationListeners.get(originUrl.getServiceKey())
.getConfigurators(), newUrl);
if (!currentUrl.equals(newUrl)) {
if (newUrl.getParameter(Constants.NEED_REEXPORT, true)) {
diff --cc dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 798ed37,d5118d9..2c3ea35
--- a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@@ -79,8 -82,28 +81,28 @@@ public class GrpcProtocolTest
HelloReply hello = serviceImpl.sayHello(HelloRequest.newBuilder().setName("World").build());
Assertions.assertEquals("Hello World", hello.getMessage());
+ ListenableFuture<HelloReply> future = serviceImpl.sayHelloAsync(HelloRequest.newBuilder().setName("World").build());
+ Assertions.assertEquals("Hello World", future.get().getMessage());
+
+ serviceImpl.sayHello(HelloRequest.newBuilder().setName("World").build(), new StreamObserver<HelloReply>() {
+
+ @Override
+ public void onNext(HelloReply helloReply) {
+ Assertions.assertEquals("Hello World", helloReply.getMessage());
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ throwable.printStackTrace();
+ }
+
+ @Override
+ public void onCompleted() {
+ System.out.println("onCompleted");
+ }
+ });
// resource recycle.
- ApplicationModel.getServiceRepository().destroy();
+ ApplicationModel.defaultModel().getApplicationServiceRepository().destroy();
}
class MockReferenceConfig extends ReferenceConfigBase {
diff --cc dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
index c21e2f2,0db41e3..af49f3e
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TripleProtocolTest.java
@@@ -55,10 -55,28 +56,28 @@@ public class TripleProtocolTest
protocol.export(proxy.getInvoker(serviceImpl, IGreeter.class, url));
serviceImpl = proxy.getProxy(protocol.refer(IGreeter.class, url));
- Thread.sleep(1000);
+ Thread.sleep(1000);
Assertions.assertEquals("hello world", serviceImpl.echo("hello world"));
+ // fixme will throw exception
+ // Assertions.assertEquals("hello world", serviceImpl.echoAsync("hello world").get());
+ serviceImpl.serverStream("hello world", new StreamObserver<String>() {
+ @Override
+ public void onNext(String data) {
+ Assertions.assertEquals("hello world",data);
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ throwable.printStackTrace();
+ }
+
+ @Override
+ public void onCompleted() {
+ System.out.println("onCompleted");
+ }
+ });
// resource recycle.
- ApplicationModel.getServiceRepository().destroy();
+ ApplicationModel.defaultModel().getApplicationServiceRepository().destroy();
}
}