This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new dfc6f3c8de [3.3] Optimized Wrapper#getWrapper and some unit tests
(#15164)
dfc6f3c8de is described below
commit dfc6f3c8dee313d74c8879c54eafdba1e1f6625b
Author: zrlw <[email protected]>
AuthorDate: Mon Mar 3 09:59:05 2025 +0800
[3.3] Optimized Wrapper#getWrapper and some unit tests (#15164)
* Optimized getWrapper of bytecode Wrapper
* Destroyed all framework model before each test of ReplierDispatcherTest
* Un-exported service config of ServiceConfigTest and ReferenceConfigTest
* Shutdown executor after each test of EagerThreadPoolExecutorTest
* Shutdown executor after each test of AbortPolicyWithReportTest
* Destroyed all framework model before each test of NettyClientTest
* Destroyed all framework model before each test of
ApolloDynamicConfigurationTest
* Using available port to avoid address already in use issue at
AnnotationIsolationTest
---
.../org/apache/dubbo/common/bytecode/Wrapper.java | 19 +-
.../support/AbortPolicyWithReportTest.java | 2 +
.../support/eager/EagerThreadPoolExecutorTest.java | 8 +
.../apache/dubbo/config/ReferenceConfigTest.java | 259 +++++++++++----------
.../org/apache/dubbo/config/ServiceConfigTest.java | 165 ++++++++-----
.../spring/annotation/AnnotationIsolationTest.java | 5 +-
.../apollo/ApolloDynamicConfigurationTest.java | 2 +
.../remoting/transport/netty/NettyClientTest.java | 2 +
.../transport/netty4/ReplierDispatcherTest.java | 2 +
9 files changed, 271 insertions(+), 193 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
index b68e1ab5e1..0aaadc9a2f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Wrapper.java
@@ -112,16 +112,17 @@ public abstract class Wrapper {
* @return Wrapper instance(not null).
*/
public static Wrapper getWrapper(Class<?> c) {
- while (ClassGenerator.isDynamicClass(c)) // can not wrapper on dynamic
class.
- {
- c = c.getSuperclass();
- }
-
- if (c == Object.class) {
- return OBJECT_WRAPPER;
- }
+ return ConcurrentHashMapUtils.computeIfAbsent(WRAPPER_MAP, c, (clazz)
-> {
+ while (ClassGenerator.isDynamicClass(clazz)) // can not wrapper on
dynamic class.
+ {
+ clazz = clazz.getSuperclass();
+ }
- return ConcurrentHashMapUtils.computeIfAbsent(WRAPPER_MAP, c,
Wrapper::makeWrapper);
+ if (clazz == Object.class) {
+ return OBJECT_WRAPPER;
+ }
+ return makeWrapper(clazz);
+ });
}
private static Wrapper makeWrapper(Class<?> c) {
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
index 328a36c51e..933666bb37 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/AbortPolicyWithReportTest.java
@@ -73,6 +73,7 @@ class AbortPolicyWithReportTest {
await().until(() -> AbortPolicyWithReport.guard.availablePermits() ==
1);
Assertions.assertNotNull(fileOutputStream.get());
+ executorService.shutdown();
}
@Test
@@ -128,6 +129,7 @@ class AbortPolicyWithReportTest {
Assertions.assertEquals(
runTimes, finishedCount.get() + failureCount.get(), "all the
test thread should be run completely");
Assertions.assertEquals(1, jStackCount.get(), "'jstack' should be
called only once in 10 minutes");
+ threadPoolExecutor.shutdown();
}
@Test
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutorTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutorTest.java
index 52db48a824..9c6afec620 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutorTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/threadpool/support/eager/EagerThreadPoolExecutorTest.java
@@ -101,6 +101,8 @@ class EagerThreadPoolExecutorTest {
Thread.sleep(5000);
// cores theads are all alive.
Assertions.assertEquals(executor.getPoolSize(), cores, "more than
cores threads alive!");
+
+ executor.shutdown();
}
@Test
@@ -163,6 +165,8 @@ class EagerThreadPoolExecutorTest {
await().until(() -> executor.getActiveCount() == 0);
await().until(() -> executor.getPoolSize() == cores);
+
+ executor.shutdown();
}
@Test
@@ -218,6 +222,8 @@ class EagerThreadPoolExecutorTest {
await().until(() -> executor.getActiveCount() == 0);
executor.execute(runnable);
+
+ executor.shutdown();
}
@Test
@@ -273,5 +279,7 @@ class EagerThreadPoolExecutorTest {
executor.execute(runnable);
semaphore.release(5);
await().until(() -> executor.getActiveCount() == 0);
+
+ executor.shutdown();
}
}
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 1077a61b73..d66dfff202 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
@@ -1001,73 +1001,77 @@ class ReferenceConfigTest {
DemoService demoService = new DemoServiceImpl();
ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterface(DemoService.class);
- serviceConfig.setRegistry(new RegistryConfig(zkUrl1));
- serviceConfig.setScopeModel(moduleModel);
- serviceConfig.setRef(demoService);
- serviceConfig.export();
-
- String basePath = DemoService.class
- .getProtectionDomain()
- .getCodeSource()
- .getLocation()
- .getFile();
- basePath = URLDecoder.decode(basePath, "UTF-8");
- ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
- TestClassLoader classLoader1 = new TestClassLoader(classLoader,
basePath);
- TestClassLoader classLoader2 = new TestClassLoader(classLoader,
basePath);
-
- Class<?> class1 = classLoader1.loadClass(DemoService.class.getName(),
false);
- Class<?> class2 = classLoader2.loadClass(DemoService.class.getName(),
false);
-
- Assertions.assertNotEquals(class1, class2);
-
- ReferenceConfig<DemoService> referenceConfig1 = new
ReferenceConfig<>();
- referenceConfig1.setInterface(class1);
- referenceConfig1.setRegistry(new RegistryConfig(zkUrl1));
- referenceConfig1.setScopeModel(moduleModel);
- referenceConfig1.setScope("remote");
- Object demoService1 = referenceConfig1.get();
-
- for (Class<?> anInterface : demoService1.getClass().getInterfaces()) {
- Assertions.assertNotEquals(DemoService.class, anInterface);
- }
-
Assertions.assertTrue(Arrays.stream(demoService1.getClass().getInterfaces())
- .anyMatch((clazz) ->
clazz.getClassLoader().equals(classLoader1)));
+ try {
+ serviceConfig.setInterface(DemoService.class);
+ serviceConfig.setRegistry(new RegistryConfig(zkUrl1));
+ serviceConfig.setScopeModel(moduleModel);
+ serviceConfig.setRef(demoService);
+ serviceConfig.export();
+
+ String basePath = DemoService.class
+ .getProtectionDomain()
+ .getCodeSource()
+ .getLocation()
+ .getFile();
+ basePath = URLDecoder.decode(basePath, "UTF-8");
+ ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
+ TestClassLoader classLoader1 = new TestClassLoader(classLoader,
basePath);
+ TestClassLoader classLoader2 = new TestClassLoader(classLoader,
basePath);
+
+ Class<?> class1 =
classLoader1.loadClass(DemoService.class.getName(), false);
+ Class<?> class2 =
classLoader2.loadClass(DemoService.class.getName(), false);
+
+ Assertions.assertNotEquals(class1, class2);
+
+ ReferenceConfig<DemoService> referenceConfig1 = new
ReferenceConfig<>();
+ referenceConfig1.setInterface(class1);
+ referenceConfig1.setRegistry(new RegistryConfig(zkUrl1));
+ referenceConfig1.setScopeModel(moduleModel);
+ referenceConfig1.setScope("remote");
+ Object demoService1 = referenceConfig1.get();
+
+ for (Class<?> anInterface :
demoService1.getClass().getInterfaces()) {
+ Assertions.assertNotEquals(DemoService.class, anInterface);
+ }
+
Assertions.assertTrue(Arrays.stream(demoService1.getClass().getInterfaces())
+ .anyMatch((clazz) ->
clazz.getClassLoader().equals(classLoader1)));
- java.lang.reflect.Method callBean1 =
demoService1.getClass().getDeclaredMethod("callInnerClass");
- callBean1.setAccessible(true);
- Object result1 = callBean1.invoke(demoService1);
+ java.lang.reflect.Method callBean1 =
demoService1.getClass().getDeclaredMethod("callInnerClass");
+ callBean1.setAccessible(true);
+ Object result1 = callBean1.invoke(demoService1);
- Assertions.assertNotEquals(result1.getClass(),
DemoService.InnerClass.class);
- Assertions.assertEquals(classLoader1,
result1.getClass().getClassLoader());
+ Assertions.assertNotEquals(result1.getClass(),
DemoService.InnerClass.class);
+ Assertions.assertEquals(classLoader1,
result1.getClass().getClassLoader());
- ReferenceConfig<DemoService> referenceConfig2 = new
ReferenceConfig<>();
- referenceConfig2.setInterface(class2);
- referenceConfig2.setRegistry(new RegistryConfig(zkUrl1));
- referenceConfig2.setScopeModel(moduleModel);
- referenceConfig2.setScope("remote");
- Object demoService2 = referenceConfig2.get();
+ ReferenceConfig<DemoService> referenceConfig2 = new
ReferenceConfig<>();
+ referenceConfig2.setInterface(class2);
+ referenceConfig2.setRegistry(new RegistryConfig(zkUrl1));
+ referenceConfig2.setScopeModel(moduleModel);
+ referenceConfig2.setScope("remote");
+ Object demoService2 = referenceConfig2.get();
- for (Class<?> anInterface : demoService2.getClass().getInterfaces()) {
- Assertions.assertNotEquals(DemoService.class, anInterface);
+ for (Class<?> anInterface :
demoService2.getClass().getInterfaces()) {
+ Assertions.assertNotEquals(DemoService.class, anInterface);
+ }
+
Assertions.assertTrue(Arrays.stream(demoService2.getClass().getInterfaces())
+ .anyMatch((clazz) ->
clazz.getClassLoader().equals(classLoader2)));
+
+ java.lang.reflect.Method callBean2 =
demoService2.getClass().getDeclaredMethod("callInnerClass");
+ callBean2.setAccessible(true);
+ Object result2 = callBean2.invoke(demoService2);
+
+ Assertions.assertNotEquals(callBean1, callBean2);
+ Assertions.assertNotEquals(result2.getClass(),
DemoService.InnerClass.class);
+ Assertions.assertEquals(classLoader2,
result2.getClass().getClassLoader());
+ Assertions.assertNotEquals(result1.getClass(), result2.getClass());
+
+ applicationModel.destroy();
+ DubboBootstrap.getInstance().destroy();
+ Thread.currentThread().setContextClassLoader(classLoader);
+
Thread.currentThread().getContextClassLoader().loadClass(DemoService.class.getName());
+ } finally {
+ serviceConfig.unexport();
}
-
Assertions.assertTrue(Arrays.stream(demoService2.getClass().getInterfaces())
- .anyMatch((clazz) ->
clazz.getClassLoader().equals(classLoader2)));
-
- java.lang.reflect.Method callBean2 =
demoService2.getClass().getDeclaredMethod("callInnerClass");
- callBean2.setAccessible(true);
- Object result2 = callBean2.invoke(demoService2);
-
- Assertions.assertNotEquals(callBean1, callBean2);
- Assertions.assertNotEquals(result2.getClass(),
DemoService.InnerClass.class);
- Assertions.assertEquals(classLoader2,
result2.getClass().getClassLoader());
- Assertions.assertNotEquals(result1.getClass(), result2.getClass());
-
- applicationModel.destroy();
- DubboBootstrap.getInstance().destroy();
- Thread.currentThread().setContextClassLoader(classLoader);
-
Thread.currentThread().getContextClassLoader().loadClass(DemoService.class.getName());
}
@Test
@@ -1103,47 +1107,52 @@ class ReferenceConfigTest {
clazz1impl.getDeclaredConstructor(AtomicReference.class,
AtomicReference.class);
ServiceConfig serviceConfig = new ServiceConfig<>();
- serviceConfig.setInterfaceClassLoader(classLoader1);
- serviceConfig.setInterface(clazz1);
- serviceConfig.setRegistry(new RegistryConfig(zkUrl1));
- serviceConfig.setScopeModel(moduleModel);
-
serviceConfig.setRef(declaredConstructor.newInstance(innerRequestReference,
innerResultReference));
- serviceConfig.export();
-
- Class<?> clazz2 =
classLoader2.loadClass(MultiClassLoaderService.class.getName(), false);
- Class<?> requestClazzOrigin =
classLoader2.loadClass(MultiClassLoaderServiceRequest.class.getName(), false);
- Class<?> requestClazzCustom2 = compileCustomRequest(classLoader2);
- Class<?> resultClazzCustom3 = compileCustomResult(classLoader3);
- classLoader2.loadedClass.put(requestClazzCustom2.getName(),
requestClazzCustom2);
- classLoader3.loadedClass.put(resultClazzCustom3.getName(),
resultClazzCustom3);
-
- ReferenceConfig<DemoService> referenceConfig1 = new
ReferenceConfig<>();
- referenceConfig1.setInterface(clazz2);
- referenceConfig1.setInterfaceClassLoader(classLoader3);
- referenceConfig1.setRegistry(new RegistryConfig(zkUrl1));
- referenceConfig1.setScopeModel(moduleModel);
- referenceConfig1.setScope("remote");
- referenceConfig1.setTimeout(30000);
- Object object1 = referenceConfig1.get();
-
- java.lang.reflect.Method callBean1 =
object1.getClass().getDeclaredMethod("call", requestClazzOrigin);
- callBean1.setAccessible(true);
- Object result1 = callBean1.invoke(
- object1,
requestClazzCustom2.getDeclaredConstructor().newInstance());
-
- Assertions.assertEquals(resultClazzCustom3, result1.getClass());
- Assertions.assertNotEquals(classLoader2,
result1.getClass().getClassLoader());
- Assertions.assertEquals(
- classLoader1,
innerRequestReference.get().getClass().getClassLoader());
-
- Thread.currentThread().setContextClassLoader(classLoader1);
- callBean1.invoke(object1,
requestClazzCustom2.getDeclaredConstructor().newInstance());
- Assertions.assertEquals(classLoader1,
Thread.currentThread().getContextClassLoader());
-
- applicationModel.destroy();
- DubboBootstrap.getInstance().destroy();
- Thread.currentThread().setContextClassLoader(classLoader);
-
Thread.currentThread().getContextClassLoader().loadClass(DemoService.class.getName());
+ try {
+ serviceConfig.setInterfaceClassLoader(classLoader1);
+ serviceConfig.setInterface(clazz1);
+ serviceConfig.setRegistry(new RegistryConfig(zkUrl1));
+ serviceConfig.setScopeModel(moduleModel);
+
serviceConfig.setRef(declaredConstructor.newInstance(innerRequestReference,
innerResultReference));
+ serviceConfig.export();
+
+ Class<?> clazz2 =
classLoader2.loadClass(MultiClassLoaderService.class.getName(), false);
+ Class<?> requestClazzOrigin =
classLoader2.loadClass(MultiClassLoaderServiceRequest.class.getName(), false);
+ Class<?> requestClazzCustom2 = compileCustomRequest(classLoader2);
+ Class<?> resultClazzCustom3 = compileCustomResult(classLoader3);
+ classLoader2.loadedClass.put(requestClazzCustom2.getName(),
requestClazzCustom2);
+ classLoader3.loadedClass.put(resultClazzCustom3.getName(),
resultClazzCustom3);
+
+ ReferenceConfig<DemoService> referenceConfig1 = new
ReferenceConfig<>();
+ referenceConfig1.setInterface(clazz2);
+ referenceConfig1.setInterfaceClassLoader(classLoader3);
+ referenceConfig1.setRegistry(new RegistryConfig(zkUrl1));
+ referenceConfig1.setScopeModel(moduleModel);
+ referenceConfig1.setScope("remote");
+ referenceConfig1.setTimeout(30000);
+ Object object1 = referenceConfig1.get();
+
+ java.lang.reflect.Method callBean1 =
object1.getClass().getDeclaredMethod("call", requestClazzOrigin);
+ callBean1.setAccessible(true);
+ Object result1 = callBean1.invoke(
+ object1,
requestClazzCustom2.getDeclaredConstructor().newInstance());
+
+ Assertions.assertEquals(resultClazzCustom3, result1.getClass());
+ Assertions.assertNotEquals(classLoader2,
result1.getClass().getClassLoader());
+ Assertions.assertEquals(
+ classLoader1,
innerRequestReference.get().getClass().getClassLoader());
+
+ Thread.currentThread().setContextClassLoader(classLoader1);
+ callBean1.invoke(
+ object1,
requestClazzCustom2.getDeclaredConstructor().newInstance());
+ Assertions.assertEquals(classLoader1,
Thread.currentThread().getContextClassLoader());
+
+ applicationModel.destroy();
+ DubboBootstrap.getInstance().destroy();
+ Thread.currentThread().setContextClassLoader(classLoader);
+
Thread.currentThread().getContextClassLoader().loadClass(DemoService.class.getName());
+ } finally {
+ serviceConfig.unexport();
+ }
}
@Test
@@ -1157,26 +1166,30 @@ class ReferenceConfigTest {
Thread.currentThread().setContextClassLoader(classLoader);
ServiceConfig<DemoService> serviceConfig = new
ServiceConfig<>(applicationModel.newModule());
- serviceConfig.setInterface(DemoService.class);
- serviceConfig.setProtocol(new ProtocolConfig("dubbo", -1));
- serviceConfig.setRegistry(new RegistryConfig("N/A"));
- serviceConfig.setRef(new DemoServiceImpl());
- serviceConfig.export();
-
- ReferenceConfig<DemoService> referenceConfig = new
ReferenceConfig<>(applicationModel.newModule());
- referenceConfig.setInterface(DemoService.class);
- referenceConfig.setRegistry(new RegistryConfig("N/A"));
- DemoService demoService = referenceConfig.get();
-
- demoService.sayName("Dubbo");
- Assertions.assertEquals(classLoader,
Thread.currentThread().getContextClassLoader());
-
- Thread.currentThread().setContextClassLoader(null);
- demoService.sayName("Dubbo");
- Assertions.assertNull(Thread.currentThread().getContextClassLoader());
-
- Thread.currentThread().setContextClassLoader(originClassLoader);
- frameworkModel.destroy();
+ try {
+ serviceConfig.setInterface(DemoService.class);
+ serviceConfig.setProtocol(new ProtocolConfig("dubbo", -1));
+ serviceConfig.setRegistry(new RegistryConfig("N/A"));
+ serviceConfig.setRef(new DemoServiceImpl());
+ serviceConfig.export();
+
+ ReferenceConfig<DemoService> referenceConfig = new
ReferenceConfig<>(applicationModel.newModule());
+ referenceConfig.setInterface(DemoService.class);
+ referenceConfig.setRegistry(new RegistryConfig("N/A"));
+ DemoService demoService = referenceConfig.get();
+
+ demoService.sayName("Dubbo");
+ Assertions.assertEquals(classLoader,
Thread.currentThread().getContextClassLoader());
+
+ Thread.currentThread().setContextClassLoader(null);
+ demoService.sayName("Dubbo");
+
Assertions.assertNull(Thread.currentThread().getContextClassLoader());
+
+ Thread.currentThread().setContextClassLoader(originClassLoader);
+ frameworkModel.destroy();
+ } finally {
+ serviceConfig.unexport();
+ }
}
private Class<?> compileCustomRequest(ClassLoader classLoader) throws
NotFoundException, CannotCompileException {
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
index 924d0d14ca..9a562cbc21 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
@@ -171,24 +171,28 @@ class ServiceConfigTest {
void testExport() throws Exception {
service.export();
- assertThat(service.getExportedUrls(), hasSize(1));
- URL url = service.toUrl();
- assertThat(url.getProtocol(), equalTo("mockprotocol2"));
- assertThat(url.getPath(), equalTo(DemoService.class.getName()));
- assertThat(url.getParameters(), hasEntry(ANYHOST_KEY, "true"));
- assertThat(url.getParameters(), hasEntry(APPLICATION_KEY, "app"));
- assertThat(url.getParameters(), hasKey(BIND_IP_KEY));
- assertThat(url.getParameters(), hasKey(BIND_PORT_KEY));
- assertThat(url.getParameters(), hasEntry(EXPORT_KEY, "true"));
- assertThat(url.getParameters(), hasEntry("echo.0.callback", "false"));
- assertThat(url.getParameters(), hasEntry(GENERIC_KEY, "false"));
- assertThat(url.getParameters(), hasEntry(INTERFACE_KEY,
DemoService.class.getName()));
- assertThat(url.getParameters(), hasKey(METHODS_KEY));
- assertThat(url.getParameters().get(METHODS_KEY),
containsString("echo"));
- assertThat(url.getParameters(), hasEntry(SIDE_KEY, PROVIDER));
- // export DemoService in "mockprotocol2" protocol.
- Mockito.verify(protocolDelegate,
times(1)).export(Mockito.any(Invoker.class));
- // MetadataService will be exported on either dubbo or triple (the
only two default acceptable protocol)
+ try {
+ assertThat(service.getExportedUrls(), hasSize(1));
+ URL url = service.toUrl();
+ assertThat(url.getProtocol(), equalTo("mockprotocol2"));
+ assertThat(url.getPath(), equalTo(DemoService.class.getName()));
+ assertThat(url.getParameters(), hasEntry(ANYHOST_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry(APPLICATION_KEY, "app"));
+ assertThat(url.getParameters(), hasKey(BIND_IP_KEY));
+ assertThat(url.getParameters(), hasKey(BIND_PORT_KEY));
+ assertThat(url.getParameters(), hasEntry(EXPORT_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry("echo.0.callback",
"false"));
+ assertThat(url.getParameters(), hasEntry(GENERIC_KEY, "false"));
+ assertThat(url.getParameters(), hasEntry(INTERFACE_KEY,
DemoService.class.getName()));
+ assertThat(url.getParameters(), hasKey(METHODS_KEY));
+ assertThat(url.getParameters().get(METHODS_KEY),
containsString("echo"));
+ assertThat(url.getParameters(), hasEntry(SIDE_KEY, PROVIDER));
+ // export DemoService in "mockprotocol2" protocol.
+ Mockito.verify(protocolDelegate,
times(1)).export(Mockito.any(Invoker.class));
+ // MetadataService will be exported on either dubbo or triple (the
only two default acceptable protocol)
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -198,23 +202,31 @@ class ServiceConfigTest {
service.getProvider().setGroup("groupA");
service.export();
- String serviceVersion = service.getVersion();
- String serviceVersion2 = service.toUrl().getVersion();
+ try {
+ String serviceVersion = service.getVersion();
+ String serviceVersion2 = service.toUrl().getVersion();
- String group = service.getGroup();
- String group2 = service.toUrl().getGroup();
+ String group = service.getGroup();
+ String group2 = service.toUrl().getGroup();
- assertEquals(serviceVersion2, serviceVersion);
- assertEquals(group, group2);
+ assertEquals(serviceVersion2, serviceVersion);
+ assertEquals(group, group2);
+ } finally {
+ service.unexport();
+ }
}
@Test
void testProxy() throws Exception {
service2.export();
- assertThat(service2.getExportedUrls(), hasSize(1));
- assertEquals(2, TestProxyFactory.count); // local injvm and registry
protocol, so expected is 2
- TestProxyFactory.count = 0;
+ try {
+ assertThat(service2.getExportedUrls(), hasSize(1));
+ assertEquals(2, TestProxyFactory.count); // local injvm and
registry protocol, so expected is 2
+ TestProxyFactory.count = 0;
+ } finally {
+ service2.unexport();
+ }
}
@Test
@@ -232,8 +244,12 @@ class ServiceConfigTest {
public void unexported(ServiceConfig sc) {}
});
delayService.export();
- assertTrue(delayService.getExportedUrls().isEmpty());
- latch.await();
+ try {
+ assertTrue(delayService.getExportedUrls().isEmpty());
+ latch.await();
+ } finally {
+ delayService.unexport();
+ }
}
@Test
@@ -317,8 +333,12 @@ class ServiceConfigTest {
@Test
void testApplicationInUrl() {
service.export();
- assertNotNull(service.toUrl().getApplication());
- Assertions.assertEquals("app", service.toUrl().getApplication());
+ try {
+ assertNotNull(service.toUrl().getApplication());
+ Assertions.assertEquals("app", service.toUrl().getApplication());
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -345,24 +365,28 @@ class ServiceConfigTest {
void testExportWithoutRegistryConfig() {
serviceWithoutRegistryConfig.export();
- assertThat(serviceWithoutRegistryConfig.getExportedUrls(), hasSize(1));
- URL url = serviceWithoutRegistryConfig.toUrl();
- assertThat(url.getProtocol(), equalTo("mockprotocol2"));
- assertThat(url.getPath(), equalTo(DemoService.class.getName()));
- assertThat(url.getParameters(), hasEntry(ANYHOST_KEY, "true"));
- assertThat(url.getParameters(), hasEntry(APPLICATION_KEY, "app"));
- assertThat(url.getParameters(), hasKey(BIND_IP_KEY));
- assertThat(url.getParameters(), hasKey(BIND_PORT_KEY));
- assertThat(url.getParameters(), hasEntry(EXPORT_KEY, "true"));
- assertThat(url.getParameters(), hasEntry("echo.0.callback", "false"));
- assertThat(url.getParameters(), hasEntry(GENERIC_KEY, "false"));
- assertThat(url.getParameters(), hasEntry(INTERFACE_KEY,
DemoService.class.getName()));
- assertThat(url.getParameters(), hasKey(METHODS_KEY));
- assertThat(url.getParameters().get(METHODS_KEY),
containsString("echo"));
- assertThat(url.getParameters(), hasEntry(SIDE_KEY, PROVIDER));
- // export DemoService in "mockprotocol2" protocol (MetadataService
will be not exported if no registry
- // specified)
- Mockito.verify(protocolDelegate,
times(1)).export(Mockito.any(Invoker.class));
+ try {
+ assertThat(serviceWithoutRegistryConfig.getExportedUrls(),
hasSize(1));
+ URL url = serviceWithoutRegistryConfig.toUrl();
+ assertThat(url.getProtocol(), equalTo("mockprotocol2"));
+ assertThat(url.getPath(), equalTo(DemoService.class.getName()));
+ assertThat(url.getParameters(), hasEntry(ANYHOST_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry(APPLICATION_KEY, "app"));
+ assertThat(url.getParameters(), hasKey(BIND_IP_KEY));
+ assertThat(url.getParameters(), hasKey(BIND_PORT_KEY));
+ assertThat(url.getParameters(), hasEntry(EXPORT_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry("echo.0.callback",
"false"));
+ assertThat(url.getParameters(), hasEntry(GENERIC_KEY, "false"));
+ assertThat(url.getParameters(), hasEntry(INTERFACE_KEY,
DemoService.class.getName()));
+ assertThat(url.getParameters(), hasKey(METHODS_KEY));
+ assertThat(url.getParameters().get(METHODS_KEY),
containsString("echo"));
+ assertThat(url.getParameters(), hasEntry(SIDE_KEY, PROVIDER));
+ // export DemoService in "mockprotocol2" protocol (MetadataService
will be not exported if no registry
+ // specified)
+ Mockito.verify(protocolDelegate,
times(1)).export(Mockito.any(Invoker.class));
+ } finally {
+ serviceWithoutRegistryConfig.unexport();
+ }
}
@Test
@@ -374,10 +398,14 @@ class ServiceConfigTest {
service.export();
- Map<String, ServiceConfig> exportedServices =
mockServiceListener.getExportedServices();
- assertEquals(1, exportedServices.size());
- ServiceConfig serviceConfig =
exportedServices.get(service.getUniqueServiceName());
- assertSame(service, serviceConfig);
+ try {
+ Map<String, ServiceConfig> exportedServices =
mockServiceListener.getExportedServices();
+ assertEquals(1, exportedServices.size());
+ ServiceConfig serviceConfig =
exportedServices.get(service.getUniqueServiceName());
+ assertSame(service, serviceConfig);
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -404,6 +432,7 @@ class ServiceConfigTest {
service.setMethods(Lists.newArrayList(methodConfig));
service.export();
+ service.unexport();
});
}
@@ -433,8 +462,13 @@ class ServiceConfigTest {
service.export();
- assertFalse(service.getExportedUrls().isEmpty());
- assertEquals("false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ try {
+ assertFalse(service.getExportedUrls().isEmpty());
+ assertEquals(
+ "false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -462,8 +496,13 @@ class ServiceConfigTest {
service.export();
- assertFalse(service.getExportedUrls().isEmpty());
- assertEquals("false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ try {
+ assertFalse(service.getExportedUrls().isEmpty());
+ assertEquals(
+ "false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -491,8 +530,13 @@ class ServiceConfigTest {
service.export();
- assertFalse(service.getExportedUrls().isEmpty());
- assertEquals("false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ try {
+ assertFalse(service.getExportedUrls().isEmpty());
+ assertEquals(
+ "false",
service.getExportedUrls().get(0).getParameters().get("sayName.0.callback"));
+ } finally {
+ service.unexport();
+ }
}
@Test
@@ -520,6 +564,7 @@ class ServiceConfigTest {
service.setMethods(Lists.newArrayList(methodConfig));
service.export();
+ service.unexport();
});
}
@@ -548,6 +593,7 @@ class ServiceConfigTest {
service.setMethods(Lists.newArrayList(methodConfig));
service.export();
+ service.unexport();
});
}
@@ -576,6 +622,7 @@ class ServiceConfigTest {
service.setMethods(Lists.newArrayList(methodConfig));
service.export();
+ service.unexport();
});
}
diff --git
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/isolation/spring/annotation/AnnotationIsolationTest.java
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/isolation/spring/annotation/AnnotationIsolationTest.java
index eda4503d08..01155cddd9 100644
---
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/isolation/spring/annotation/AnnotationIsolationTest.java
+++
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/isolation/spring/annotation/AnnotationIsolationTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.config.spring.isolation.spring.annotation;
+import org.apache.dubbo.common.utils.NetUtils;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
@@ -113,14 +114,14 @@ public class AnnotationIsolationTest extends BaseTest {
// expose services with dubbo protocol
@Bean
public ProtocolConfig dubbo() {
- ProtocolConfig protocolConfig = new ProtocolConfig("dubbo");
+ ProtocolConfig protocolConfig = new ProtocolConfig("dubbo",
NetUtils.getAvailablePort());
return protocolConfig;
}
// expose services with tri protocol
@Bean
public ProtocolConfig tri() {
- ProtocolConfig protocolConfig = new ProtocolConfig("tri");
+ ProtocolConfig protocolConfig = new ProtocolConfig("tri",
NetUtils.getAvailablePort());
return protocolConfig;
}
diff --git
a/dubbo-configcenter/dubbo-configcenter-apollo/src/test/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfigurationTest.java
b/dubbo-configcenter/dubbo-configcenter-apollo/src/test/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfigurationTest.java
index 3558272881..4c24ea07ba 100644
---
a/dubbo-configcenter/dubbo-configcenter-apollo/src/test/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfigurationTest.java
+++
b/dubbo-configcenter/dubbo-configcenter-apollo/src/test/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfigurationTest.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.configcenter.ConfigChangeType;
import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -60,6 +61,7 @@ class ApolloDynamicConfigurationTest {
*/
@BeforeEach
public void setUp() {
+ FrameworkModel.destroyAll();
String apolloUrl = System.getProperty("apollo.configService");
String urlForDubbo = "apollo://" +
apolloUrl.substring(apolloUrl.lastIndexOf("/") + 1)
+
"/org.apache.dubbo.apollo.testService?namespace=dubbo&check=true";
diff --git
a/dubbo-remoting/dubbo-remoting-netty/src/test/java/org/apache/dubbo/remoting/transport/netty/NettyClientTest.java
b/dubbo-remoting/dubbo-remoting-netty/src/test/java/org/apache/dubbo/remoting/transport/netty/NettyClientTest.java
index 46337903d6..b9dde7cf2d 100644
---
a/dubbo-remoting/dubbo-remoting-netty/src/test/java/org/apache/dubbo/remoting/transport/netty/NettyClientTest.java
+++
b/dubbo-remoting/dubbo-remoting-netty/src/test/java/org/apache/dubbo/remoting/transport/netty/NettyClientTest.java
@@ -23,6 +23,7 @@ import org.apache.dubbo.remoting.RemotingServer;
import org.apache.dubbo.remoting.exchange.ExchangeChannel;
import org.apache.dubbo.remoting.exchange.Exchangers;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
import java.util.ArrayList;
import java.util.List;
@@ -43,6 +44,7 @@ class NettyClientTest {
@BeforeAll
public static void setUp() throws Exception {
+ FrameworkModel.destroyAll();
URL url = URL.valueOf("exchange://localhost:" + port +
"?server=netty3&codec=exchange");
ApplicationModel applicationModel = ApplicationModel.defaultModel();
ApplicationConfig applicationConfig = new
ApplicationConfig("provider-app");
diff --git
a/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/ReplierDispatcherTest.java
b/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/ReplierDispatcherTest.java
index 0fa2d0a9e3..4ca1601531 100644
---
a/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/ReplierDispatcherTest.java
+++
b/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/ReplierDispatcherTest.java
@@ -27,6 +27,7 @@ import org.apache.dubbo.remoting.exchange.ExchangeServer;
import org.apache.dubbo.remoting.exchange.Exchangers;
import org.apache.dubbo.remoting.exchange.support.ReplierDispatcher;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
import org.apache.dubbo.rpc.model.ModuleModel;
import java.io.Serializable;
@@ -61,6 +62,7 @@ class ReplierDispatcherTest {
@BeforeEach
public void startServer() throws RemotingException {
+ FrameworkModel.destroyAll();
port = NetUtils.getAvailablePort();
ReplierDispatcher dispatcher = new ReplierDispatcher();
dispatcher.addReplier(RpcMessage.class, new RpcMessageHandler());