This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 1caee8e7bb Refactor: Replace Whitebox with standard reflection in
library, core and configuration (#13713)
1caee8e7bb is described below
commit 1caee8e7bbf6de2cfb8aca4df6ce726362175b48
Author: Hm <[email protected]>
AuthorDate: Fri Feb 27 15:13:04 2026 +0900
Refactor: Replace Whitebox with standard reflection in library, core and
configuration (#13713)
---
docs/en/changes/changes.md | 2 ++
.../api/FetchingConfigWatcherRegisterTest.java | 25 ++++++++++----
.../ConsulConfigurationWatcherRegisterTest.java | 26 +++++++++-----
.../nacos/NacosConfigWatcherRegisterTest.java | 10 +++---
.../ut/ZookeeperConfigWatcherRegisterTestCase.java | 7 ++--
.../configuration/grpc/GRPCConfigurationTest.java | 9 ++---
.../analysis/worker/MetricsStreamProcessor.java | 2 +-
.../analysis/data/LimitedSizeBufferedDataTest.java | 11 +++++-
.../core/analysis/meter/MeterSystemTest.java | 40 ++++++++++++++++------
.../core/hierarchy/HierarchyQueryServiceTest.java | 19 ++++++----
.../core/query/ServiceTopologyBuilderTest.java | 8 +++--
.../remote/client/RemoteClientManagerTestCase.java | 3 ++
.../server/core/storage/PersistenceTimerTest.java | 9 +++--
.../elasticsearch/bulk/ElasticSearchIT.java | 6 ++--
.../oap/server/library/util/FieldsHelperTest.java | 8 +++--
15 files changed, 128 insertions(+), 57 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index f400946bc0..6b0c976e97 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -66,6 +66,8 @@
| Schedulers + others | ~24 | ~24 | Mostly
unchanged |
| **Total (OAP threads)** | **150+** | **~72** |
**~50% reduction, stable in high payload.** |
+* Replace PowerMock Whitebox with standard Java Reflection in
`server-library`, `server-core`, and `server-configuration` to support JDK 25+.
+
#### OAP Server
* KubernetesCoordinator: make self instance return real pod IP address instead
of `127.0.0.1`.
diff --git
a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/FetchingConfigWatcherRegisterTest.java
b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/FetchingConfigWatcherRegisterTest.java
index 82339e51a1..3c78601aab 100644
---
a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/FetchingConfigWatcherRegisterTest.java
+++
b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/FetchingConfigWatcherRegisterTest.java
@@ -25,8 +25,8 @@ import
org.apache.skywalking.oap.server.library.module.ServiceNotProvidedExcepti
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.powermock.reflect.Whitebox;
+import java.lang.reflect.Field;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -93,7 +93,7 @@ public class FetchingConfigWatcherRegisterTest {
}
@Test
- public void testRegisterTableLog() {
+ public void testRegisterTableLog() throws Exception {
register.registerConfigChangeWatcher(new
ConfigChangeWatcher("MockModule", new MockProvider(), "prop2") {
@Override
public void notify(ConfigChangeEvent value) {
@@ -118,11 +118,22 @@ public class FetchingConfigWatcherRegisterTest {
});
register.configSync();
- FetchingConfigWatcherRegister.Register registerTable =
Whitebox.getInternalState(this.register, "singleConfigChangeWatcherRegister");
- FetchingConfigWatcherRegister.Register groupRegisterTable =
Whitebox.getInternalState(this.register, "groupConfigChangeWatcherRegister");
-
- String expected = "Following dynamic config items are available." +
FetchingConfigWatcherRegister.LINE_SEPARATOR +
"---------------------------------------------" +
FetchingConfigWatcherRegister.LINE_SEPARATOR + "key:MockModule.provider.prop2
module:MockModule provider:provider value(current):null" +
FetchingConfigWatcherRegister.LINE_SEPARATOR;
- String groupConfigExpected = "Following dynamic config items are
available." + FetchingConfigWatcherRegister.LINE_SEPARATOR +
"---------------------------------------------" +
FetchingConfigWatcherRegister.LINE_SEPARATOR +
"key:MockModule.provider.groupItems1 module:MockModule provider:provider
groupItems(current):null" + FetchingConfigWatcherRegister.LINE_SEPARATOR;
+ Field singleField =
FetchingConfigWatcherRegister.class.getDeclaredField("singleConfigChangeWatcherRegister");
+ singleField.setAccessible(true);
+ FetchingConfigWatcherRegister.Register registerTable =
(FetchingConfigWatcherRegister.Register) singleField.get(this.register);
+ Field groupField =
FetchingConfigWatcherRegister.class.getDeclaredField("groupConfigChangeWatcherRegister");
+ groupField.setAccessible(true);
+ FetchingConfigWatcherRegister.Register groupRegisterTable =
(FetchingConfigWatcherRegister.Register) groupField.get(this.register);
+
+ String expected = "Following dynamic config items are available." +
FetchingConfigWatcherRegister.LINE_SEPARATOR
+ + "---------------------------------------------" +
FetchingConfigWatcherRegister.LINE_SEPARATOR
+ + "key:MockModule.provider.prop2 module:MockModule
provider:provider value(current):null"
+ + FetchingConfigWatcherRegister.LINE_SEPARATOR;
+ String groupConfigExpected = "Following dynamic config items are
available."
+ + FetchingConfigWatcherRegister.LINE_SEPARATOR +
"---------------------------------------------"
+ + FetchingConfigWatcherRegister.LINE_SEPARATOR
+ + "key:MockModule.provider.groupItems1 module:MockModule
provider:provider groupItems(current):null"
+ + FetchingConfigWatcherRegister.LINE_SEPARATOR;
assertEquals(expected, registerTable.toString());
assertEquals(groupConfigExpected, groupRegisterTable.toString());
diff --git
a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
index 8403131377..7d1dc5a80f 100644
---
a/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
+++
b/oap-server/server-configuration/configuration-consul/src/test/java/org/apache/skywalking/oap/server/configuration/consul/ConsulConfigurationWatcherRegisterTest.java
@@ -30,8 +30,8 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.powermock.reflect.Whitebox;
+import java.lang.reflect.Field;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -46,8 +46,8 @@ import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
@SuppressWarnings({
- "unchecked",
- "OptionalGetWithoutIsPresent"
+ "unchecked",
+ "OptionalGetWithoutIsPresent"
})
public class ConsulConfigurationWatcherRegisterTest {
@Mock
@@ -56,11 +56,15 @@ public class ConsulConfigurationWatcherRegisterTest {
private ConcurrentHashMap<String, Optional<String>> configItemKeyedByName;
@Test
- public void shouldUpdateCachesWhenNotified() {
+ public void shouldUpdateCachesWhenNotified() throws Exception {
cacheByKey = new ConcurrentHashMap<>();
configItemKeyedByName = new ConcurrentHashMap<>();
- Whitebox.setInternalState(register, "cachesByKey", cacheByKey);
- Whitebox.setInternalState(register, "configItemKeyedByName",
configItemKeyedByName);
+ Field cachesField =
ConsulConfigurationWatcherRegister.class.getDeclaredField("cachesByKey");
+ cachesField.setAccessible(true);
+ cachesField.set(register, cacheByKey);
+ Field itemsField =
ConsulConfigurationWatcherRegister.class.getDeclaredField("configItemKeyedByName");
+ itemsField.setAccessible(true);
+ itemsField.set(register, configItemKeyedByName);
KVCache cache1 = mock(KVCache.class);
KVCache cache2 = mock(KVCache.class);
@@ -105,14 +109,18 @@ public class ConsulConfigurationWatcherRegisterTest {
}
@Test
- public void shouldUnsubscribeWhenKeyRemoved() {
+ public void shouldUnsubscribeWhenKeyRemoved() throws Exception {
cacheByKey = new ConcurrentHashMap<>();
KVCache existedCache = mock(KVCache.class);
cacheByKey.put("existedKey", existedCache);
configItemKeyedByName = new ConcurrentHashMap<>();
- Whitebox.setInternalState(register, "cachesByKey", cacheByKey);
- Whitebox.setInternalState(register, "configItemKeyedByName",
configItemKeyedByName);
+ Field cachesField =
ConsulConfigurationWatcherRegister.class.getDeclaredField("cachesByKey");
+ cachesField.setAccessible(true);
+ cachesField.set(register, cacheByKey);
+ Field itemsField =
ConsulConfigurationWatcherRegister.class.getDeclaredField("configItemKeyedByName");
+ itemsField.setAccessible(true);
+ itemsField.set(register, configItemKeyedByName);
KVCache cache1 = mock(KVCache.class);
KVCache cache2 = mock(KVCache.class);
diff --git
a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
index f2497ab950..35efbd467b 100644
---
a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
+++
b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java
@@ -19,12 +19,12 @@
package org.apache.skywalking.oap.server.configuration.nacos;
import com.alibaba.nacos.api.config.ConfigService;
-import com.alibaba.nacos.api.exception.NacosException;
+
import com.google.common.collect.Sets;
import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
import org.junit.jupiter.api.Test;
-import org.powermock.reflect.Whitebox;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@@ -35,7 +35,7 @@ import static org.mockito.Mockito.when;
public class NacosConfigWatcherRegisterTest {
@Test
- public void shouldReadConfigs() throws NacosException {
+ public void shouldReadConfigs() throws Exception {
final String group = "skywalking";
final String testKey1 = "agent-analyzer.default.slowDBAccessThreshold";
final String testVal1 = "test";
@@ -51,7 +51,9 @@ public class NacosConfigWatcherRegisterTest {
when(mockConfigService.getConfig(testKey1, group,
1000)).thenReturn(testVal1);
when(mockConfigService.getConfig(testKey2, group,
1000)).thenReturn(testVal2);
- Whitebox.setInternalState(mockRegister, "configService",
mockConfigService);
+ Field configServiceField =
NacosConfigWatcherRegister.class.getDeclaredField("configService");
+ configServiceField.setAccessible(true);
+ configServiceField.set(mockRegister, mockConfigService);
final ConfigTable configTable =
mockRegister.readConfig(Sets.newHashSet(testKey1, testKey2)).get();
diff --git
a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
index ce6f6f9d0a..41a8928b98 100644
---
a/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
+++
b/oap-server/server-configuration/configuration-zookeeper/src/test/java/org/apache/skywalking/oap/server/configuration/zookeeper/ut/ZookeeperConfigWatcherRegisterTestCase.java
@@ -24,13 +24,14 @@ import
org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
import
org.apache.skywalking.oap.server.configuration.zookeeper.ZookeeperServerSettings;
import org.junit.jupiter.api.Test;
-import org.powermock.reflect.Whitebox;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import java.lang.reflect.Field;
+
public class ZookeeperConfigWatcherRegisterTestCase {
@Test
public void TestCase() throws Exception {
@@ -46,7 +47,9 @@ public class ZookeeperConfigWatcherRegisterTestCase {
when(mockPathChildrenCache.getCurrentData(namespace + "/" +
key)).thenReturn(new ChildData(namespace + "/" + key, null, value
.getBytes()));
- Whitebox.setInternalState(mockRegister, "childrenCache",
mockPathChildrenCache);
+ Field childrenCacheField =
MockZookeeperConfigWatcherRegister.class.getDeclaredField("childrenCache");
+ childrenCacheField.setAccessible(true);
+ childrenCacheField.set(mockRegister, mockPathChildrenCache);
final ConfigTable configTable =
mockRegister.readConfig(Sets.newHashSet(key)).get();
diff --git
a/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
b/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
index 84f64e7c23..83f262588c 100644
---
a/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
+++
b/oap-server/server-configuration/grpc-configuration-sync/src/test/java/org/apache/skywalking/oap/server/configuration/grpc/GRPCConfigurationTest.java
@@ -31,9 +31,8 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
-import org.powermock.reflect.Whitebox;
-import java.io.IOException;
+import java.lang.reflect.Field;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -56,7 +55,7 @@ public class GRPCConfigurationTest {
private MutableHandlerRegistry serviceRegistry;
@BeforeEach
- public void before() throws IOException {
+ public void before() throws Exception {
serviceRegistry = new MutableHandlerRegistry();
final String name = UUID.randomUUID().toString();
InProcessServerBuilder serverBuilder =
@@ -76,7 +75,9 @@ public class GRPCConfigurationTest {
provider = new GRPCConfigurationProvider();
register = new GRPCConfigWatcherRegister(settings);
ConfigurationServiceGrpc.ConfigurationServiceBlockingStub blockingStub
= ConfigurationServiceGrpc.newBlockingStub(channel);
- Whitebox.setInternalState(register, "stub", blockingStub);
+ Field stubField =
GRPCConfigWatcherRegister.class.getDeclaredField("stub");
+ stubField.setAccessible(true);
+ stubField.set(register, blockingStub);
initWatcher();
assertNotNull(provider);
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
index c405bb5b37..2c570dbdbf 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
@@ -58,7 +58,7 @@ public class MetricsStreamProcessor implements
StreamProcessor<Metrics> {
/**
* Singleton instance.
*/
- private final static MetricsStreamProcessor PROCESSOR = new
MetricsStreamProcessor();
+ private static final MetricsStreamProcessor PROCESSOR = new
MetricsStreamProcessor();
/**
* Worker table hosts all entrance workers.
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
index 0984aa72a0..76acd39518 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/data/LimitedSizeBufferedDataTest.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.core.analysis.data;
+import java.util.List;
+
import org.apache.skywalking.oap.server.core.analysis.topn.TopN;
import org.apache.skywalking.oap.server.core.storage.StorageID;
import org.junit.jupiter.api.Assertions;
@@ -49,8 +51,15 @@ public class LimitedSizeBufferedDataTest {
9,
4
};
+ List<MockStorageData> result = collection.read();
+ result.sort((a, b) -> {
+ if (a.getTimestamp() != b.getTimestamp()) {
+ return Long.compare(a.getTimestamp(), b.getTimestamp());
+ }
+ return Long.compare(a.getLatency(), b.getLatency());
+ });
int i = 0;
- for (MockStorageData data : collection.read()) {
+ for (MockStorageData data : result) {
Assertions.assertEquals(expected[i++], data.latency);
}
}
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
index 0610661bbe..7055511c2a 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystemTest.java
@@ -20,17 +20,18 @@ package
org.apache.skywalking.oap.server.core.analysis.meter;
import org.apache.skywalking.oap.server.core.analysis.StreamDefinition;
import
org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
-import org.apache.skywalking.oap.server.core.storage.StorageException;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.powermock.reflect.Whitebox;
+import java.lang.reflect.Field;
import java.util.Map;
import static org.mockito.ArgumentMatchers.any;
@@ -42,17 +43,27 @@ public class MeterSystemTest {
@Mock
private ModuleManager moduleManager;
private MeterSystem meterSystem;
+ private MockedStatic<MetricsStreamProcessor> mockedProcessor;
+ private MetricsStreamProcessor processorMock;
@BeforeEach
- public void setup() throws StorageException {
+ public void setup() throws Exception {
meterSystem = spy(new MeterSystem(moduleManager));
- Whitebox.setInternalState(MetricsStreamProcessor.class, "PROCESSOR",
-
Mockito.spy(MetricsStreamProcessor.getInstance()));
- doNothing().when(MetricsStreamProcessor.getInstance()).create(any(),
(StreamDefinition) any(), any());
+ processorMock = Mockito.mock(MetricsStreamProcessor.class);
+ mockedProcessor = Mockito.mockStatic(MetricsStreamProcessor.class);
+
mockedProcessor.when(MetricsStreamProcessor::getInstance).thenReturn(processorMock);
+ doNothing().when(processorMock).create(any(), (StreamDefinition)
any(), any());
+ }
+
+ @AfterEach
+ public void tearDown() {
+ if (mockedProcessor != null) {
+ mockedProcessor.close();
+ }
}
@Test
- public void testCreate() {
+ public void testCreate() throws Exception {
// validate with same name, function and scope types
meterSystem.create("test_meter", "avg", ScopeType.SERVICE);
validateMeterDefinition("test_meter", Long.class, ScopeType.SERVICE);
@@ -76,11 +87,18 @@ public class MeterSystemTest {
}
}
- private void validateMeterDefinition(String meterName, Class<?> dataType,
ScopeType type) {
- Map<String, ?> meterPrototypes =
Whitebox.getInternalState(meterSystem, "meterPrototypes");
+ private void validateMeterDefinition(String meterName, Class<?> dataType,
ScopeType type) throws Exception {
+ Field meterPrototypesField =
MeterSystem.class.getDeclaredField("meterPrototypes");
+ meterPrototypesField.setAccessible(true);
+ @SuppressWarnings("unchecked")
+ Map<String, ?> meterPrototypes = (Map<String, ?>)
meterPrototypesField.get(meterSystem);
Object meterDefinition = meterPrototypes.get(meterName);
- Class<?> realDataType = Whitebox.getInternalState(meterDefinition,
"dataType");
- ScopeType realScopeTypes = Whitebox.getInternalState(meterDefinition,
"scopeType");
+ Field dataTypeField =
meterDefinition.getClass().getDeclaredField("dataType");
+ dataTypeField.setAccessible(true);
+ Class<?> realDataType = (Class<?>) dataTypeField.get(meterDefinition);
+ Field scopeTypeField =
meterDefinition.getClass().getDeclaredField("scopeType");
+ scopeTypeField.setAccessible(true);
+ ScopeType realScopeTypes = (ScopeType)
scopeTypeField.get(meterDefinition);
Assertions.assertEquals(dataType, realDataType);
Assertions.assertEquals(type, realScopeTypes);
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/hierarchy/HierarchyQueryServiceTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/hierarchy/HierarchyQueryServiceTest.java
index f0310eac0d..4d0b2f09d7 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/hierarchy/HierarchyQueryServiceTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/hierarchy/HierarchyQueryServiceTest.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.core.hierarchy;
+import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.apache.skywalking.oap.server.core.query.HierarchyQueryService;
@@ -27,7 +28,6 @@ import
org.apache.skywalking.oap.server.core.query.type.ServiceHierarchy;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.powermock.reflect.Whitebox;
import static org.mockito.Mockito.mock;
@@ -48,8 +48,11 @@ public class HierarchyQueryServiceTest {
@Test
public void testFilterConjecturableRelations() throws Exception {
- ServiceHierarchy hierarchy = Whitebox.invokeMethod(
- hierarchyQueryService, "filterConjecturableRelations",
mockCache(), invokeBuildServiceRelation(), 10);
+ Method method =
HierarchyQueryService.class.getDeclaredMethod("filterConjecturableRelations",
+ Map.class, ServiceHierarchy.class, int.class);
+ method.setAccessible(true);
+ ServiceHierarchy hierarchy = (ServiceHierarchy)
method.invoke(hierarchyQueryService, mockCache(),
+ invokeBuildServiceRelation(), 10);
Assertions.assertEquals(5, hierarchy.getRelations().size());
Assertions.assertEquals(mockHierarchy(true), hierarchy);
}
@@ -58,10 +61,12 @@ public class HierarchyQueryServiceTest {
ServiceHierarchy hierarchy = new ServiceHierarchy();
HierarchyRelatedService serviceA = new HierarchyRelatedService();
serviceA.setId("A");
- Whitebox.invokeMethod(
- hierarchyQueryService, "buildServiceRelation", mockCache(),
hierarchy, serviceA, 10,
- HierarchyQueryService.HierarchyDirection.All
- );
+ Method method =
HierarchyQueryService.class.getDeclaredMethod("buildServiceRelation",
+ Map.class, ServiceHierarchy.class,
HierarchyRelatedService.class, int.class,
+ HierarchyQueryService.HierarchyDirection.class);
+ method.setAccessible(true);
+ method.invoke(hierarchyQueryService, mockCache(), hierarchy, serviceA,
10,
+ HierarchyQueryService.HierarchyDirection.All);
return hierarchy;
}
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java
index a643a668c0..a9dbc24a06 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.core.query;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -42,7 +43,6 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
-import org.powermock.reflect.Whitebox;
import static org.mockito.Mockito.when;
@@ -73,11 +73,13 @@ public class ServiceTopologyBuilderTest {
@SneakyThrows
@Test
- public void testServiceTopologyBuild() {
+ public void testServiceTopologyBuild() throws Exception {
Service svrA = getSvrA();
Service svrB = getSvrB();
final ServiceTopologyBuilder serviceTopologyBuilder = new
ServiceTopologyBuilder(moduleManager);
- Whitebox.setInternalState(serviceTopologyBuilder,
"metadataQueryService", metadataQueryService);
+ Field metadataQueryServiceField =
ServiceTopologyBuilder.class.getDeclaredField("metadataQueryService");
+ metadataQueryServiceField.setAccessible(true);
+ metadataQueryServiceField.set(serviceTopologyBuilder,
metadataQueryService);
when(metadataQueryService.getService(svrA.getId())).thenReturn(svrA);
when(metadataQueryService.getService(svrB.getId())).thenReturn(svrB);
List<Call.CallDetail> serviceRelationClientCalls = new ArrayList<>();
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/client/RemoteClientManagerTestCase.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/client/RemoteClientManagerTestCase.java
index 0d0239ba2d..93b6194829 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/client/RemoteClientManagerTestCase.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/client/RemoteClientManagerTestCase.java
@@ -23,6 +23,7 @@ import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.apache.skywalking.oap.server.core.status.ServerStatusService;
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
import org.apache.skywalking.oap.server.telemetry.api.GaugeMetrics;
import org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
@@ -68,6 +69,8 @@ public class RemoteClientManagerTestCase {
ModuleDefineTesting coreModuleDefine = new ModuleDefineTesting();
moduleManager.put(CoreModule.NAME, coreModuleDefine);
+ ServerStatusService serverStatusService =
mock(ServerStatusService.class);
+
coreModuleDefine.provider().registerServiceImplementation(ServerStatusService.class,
serverStatusService);
this.clusterNodesQuery = mock(ClusterNodesQuery.class);
clusterModuleDefine.provider().registerServiceImplementation(ClusterNodesQuery.class,
clusterNodesQuery);
diff --git
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/storage/PersistenceTimerTest.java
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/storage/PersistenceTimerTest.java
index 2897f28d67..2bb9f35462 100644
---
a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/storage/PersistenceTimerTest.java
+++
b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/storage/PersistenceTimerTest.java
@@ -33,8 +33,8 @@ import
org.apache.skywalking.oap.server.telemetry.api.MetricsCreator;
import org.apache.skywalking.oap.server.telemetry.none.MetricsCreatorNoop;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.powermock.reflect.Whitebox;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -51,7 +51,7 @@ public class PersistenceTimerTest {
@Test
public void testExtractDataAndSave() throws Exception {
- Set<PrepareRequest> result = new HashSet();
+ Set<PrepareRequest> result = new HashSet<>();
int count = 101;
int workCount = 10;
CoreModuleConfig moduleConfig = new CoreModuleConfig();
@@ -82,7 +82,10 @@ public class PersistenceTimerTest {
PersistenceTimer.INSTANCE.isStarted = true;
PersistenceTimer.INSTANCE.start(moduleManager, moduleConfig);
- CompletableFuture<Void> f =
Whitebox.invokeMethod(PersistenceTimer.INSTANCE, "extractDataAndSave",
iBatchDAO);
+ Method method =
PersistenceTimer.class.getDeclaredMethod("extractDataAndSave", IBatchDAO.class);
+ method.setAccessible(true);
+ @SuppressWarnings("unchecked")
+ CompletableFuture<Void> f = (CompletableFuture<Void>)
method.invoke(PersistenceTimer.INSTANCE, iBatchDAO);
f.join();
Assertions.assertEquals(count * workCount * 2, result.size());
diff --git
a/oap-server/server-library/library-client/src/test/java/org/apache/skywalking/library/elasticsearch/bulk/ElasticSearchIT.java
b/oap-server/server-library/library-client/src/test/java/org/apache/skywalking/library/elasticsearch/bulk/ElasticSearchIT.java
index 1cf99af3bf..bbe471b178 100644
---
a/oap-server/server-library/library-client/src/test/java/org/apache/skywalking/library/elasticsearch/bulk/ElasticSearchIT.java
+++
b/oap-server/server-library/library-client/src/test/java/org/apache/skywalking/library/elasticsearch/bulk/ElasticSearchIT.java
@@ -44,10 +44,10 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.Mockito;
-import org.powermock.reflect.Whitebox;
import org.testcontainers.elasticsearch.ElasticsearchContainer;
import org.testcontainers.utility.DockerImageName;
+import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
@@ -99,7 +99,9 @@ public class ElasticSearchIT {
Mockito.when(telemetryProvider.getService(MetricsCreator.class))
.thenReturn(new MetricsCreatorNoop());
TelemetryModule telemetryModule = Mockito.spy(TelemetryModule.class);
- Whitebox.setInternalState(telemetryModule, "loadedProvider",
telemetryProvider);
+ Field loadedProviderField =
ModuleDefine.class.getDeclaredField("loadedProvider");
+ loadedProviderField.setAccessible(true);
+ loadedProviderField.set(telemetryModule, telemetryProvider);
Mockito.when(moduleManager.find(TelemetryModule.NAME)).thenReturn(telemetryModule);
}
diff --git
a/oap-server/server-library/library-util/src/test/java/org/apache/skywalking/oap/server/library/util/FieldsHelperTest.java
b/oap-server/server-library/library-util/src/test/java/org/apache/skywalking/oap/server/library/util/FieldsHelperTest.java
index ed1e9d9efc..213dec5151 100644
---
a/oap-server/server-library/library-util/src/test/java/org/apache/skywalking/oap/server/library/util/FieldsHelperTest.java
+++
b/oap-server/server-library/library-util/src/test/java/org/apache/skywalking/oap/server/library/util/FieldsHelperTest.java
@@ -24,9 +24,9 @@ import lombok.Data;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
-import org.powermock.reflect.Whitebox;
import java.io.ByteArrayInputStream;
+import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
@@ -74,8 +74,10 @@ public class FieldsHelperTest {
}
@BeforeEach
- public void setUp() {
- Whitebox.setInternalState(FieldsHelper.forClass(ServiceInfo.class),
"initialized", false);
+ public void setUp() throws Exception {
+ Field initializedField =
FieldsHelper.class.getDeclaredField("initialized");
+ initializedField.setAccessible(true);
+ initializedField.set(FieldsHelper.forClass(ServiceInfo.class), false);
}
@ParameterizedTest(name = "{0}")