Skip to content

Commit e28b284

Browse files
committed
Refactor: Replace Whitebox with standard reflection in Analyzer, Server-Cluster-Plugin and Receiver & Fetcher Plugins.
### [Analyzer] **General Refactoring (`agent-analyzer`, `log-analyzer`):** - Systematically eliminated `Whitebox` usages across various analyzer tests. - Migrated internal state manipulations to standard Java Reflection API (`Field.setAccessible()` etc.), ensuring proper checked exception handling to prevent polluting test method signatures. **`AnalyzerTest` (meter-analyzer):** - Replaced `Whitebox` with `MockedStatic` (using Mockito) to safely inject and mock the `MetricsStreamProcessor` singleton. - Added explicit `.close()` calls in the `@AfterEach` (or `tearDownEach`) lifecycle methods to properly release the static mocks and prevent resource leaks or interference between tests. **`K8sTagTest` (meter-analyzer):** - Since `KubernetesPods` and `KubernetesServices` are implemented as Enum singletons, mocking the entire objects was problematic. To resolve this: - Handled the internal lazy-loading `LoadingCache` instances by injecting Mock objects directly into these fields via standard reflection. - Fixed potential `NullPointerException`s during cache misses by explicitly stubbing the mocked caches to return `Optional.empty()` or empty collections for non-matching keys, ensuring better test isolation and stability. ### [Server-Cluster-Plugin] - Replaced all `Whitebox.setInternalState()` and `getInternalState()` usages with standard `java.lang.reflect.Field` to inject internal dependencies (e.g., `client`, `config`, `loadedProvider`, `healthChecker`) into Coordinators and Providers across all 5 cluster plugins (Zookeeper, Nacos, Etcd, Kubernetes, Consul). - **Handled Checked Exceptions Safely:** Since standard Reflection APIs strictly throw checked exceptions (`NoSuchFieldException`, `IllegalAccessException`), explicitly wrapped them in `RuntimeException` within `try-catch` blocks. This successfully removed the PowerMock dependency while preserving the existing test lifecycle method signatures (like `@BeforeEach` or `@Test`) without adding unnecessary `throws` declarations. ### [Receiver & Fetcher Plugins] ** General Refactoring (`server-receiver-plugin`, `server-fetcher-plugin`):** - Systematically removed `Whitebox` dependencies and migrated to standard Java Reflection API. - Centralized reflection logic within `try-catch` blocks to wrap checked exceptions into `RuntimeException`, ensuring no changes were required to existing test method signatures. `ZabbixMetricsTest` & `ZabbixBaseTest`: - Static Mock Lifecycle Management: Replaced manual `Whitebox` field manipulation of the `MetricsStreamProcessor` singleton with `MockedStatic`. - Implemented strict `.close()` logic within the `@AfterEach` lifecycle to prevent memory leaks and resource conflicts, which is particularly critical for stability in newer JVM environments. - Resolved a legacy `NullPointerException` by combining `MockedStatic` with a `Mockito.spy()` of the actual processor instance, ensuring a safe and stateful mock return. `TelegrafMetricsTest`: - Clean Mocking: Eliminated redundant `CoreModule` mocks and unused stubbings, resolving `UnnecessaryStubbingException` and improving test performance - Modernization: Fixed anti-patterns (spying on class literals) and aligned with JUnit 5 best practices. `ClusterManagerMetricsAdapterTest`: - Static State Isolation: Addressed potential flaky test behavior by explicitly clearing shared static maps (e.g., `initialized` flag in `FieldsHelper`) during `@BeforeEach`. - This ensures complete test isolation by preventing state leakage between test cases, leading to a more deterministic and reliable test suite. `CiliumNodeManagerTest` & Others: - Successfully migrated internal state injections(remoteInstances and allNodes) to standard reflection, maintaining the original testing intent while removing the PowerMock requirement.
1 parent 95b6a19 commit e28b284

File tree

23 files changed

+332
-134
lines changed

23 files changed

+332
-134
lines changed

docs/en/changes/changes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
| Schedulers + others | ~24 | ~24 | Mostly unchanged |
6767
| **Total (OAP threads)** | **150+** | **~72** | **~50% reduction, stable in high payload.** |
6868

69-
* Replace PowerMock Whitebox with standard Java Reflection in `server-library`, `server-core`, and `server-configuration` to support JDK 25+.
69+
* Replace PowerMock Whitebox with standard Java Reflection in `server-library`, `server-core`, `server-configuration`, `analyzer`, `server-cluster-plugin`, `server-receiver-plugin`, `server-fetcher-plugin` to support JDK 25+.
7070

7171
#### OAP Server
7272

oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,22 @@
4242
import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
4343
import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
4444
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
45+
import org.junit.jupiter.api.AfterEach;
4546
import org.junit.jupiter.api.Assertions;
4647
import org.junit.jupiter.api.BeforeAll;
4748
import org.junit.jupiter.api.BeforeEach;
4849
import org.junit.jupiter.api.Test;
4950
import org.junit.jupiter.api.extension.ExtendWith;
5051
import org.mockito.Mock;
52+
import org.mockito.MockedStatic;
5153
import org.mockito.junit.jupiter.MockitoExtension;
52-
import org.powermock.reflect.Whitebox;
5354

5455
import static org.mockito.ArgumentMatchers.any;
5556
import static org.mockito.ArgumentMatchers.anyString;
5657
import static org.mockito.Mockito.doAnswer;
5758
import static org.mockito.Mockito.doNothing;
5859
import static org.mockito.Mockito.mock;
60+
import static org.mockito.Mockito.mockStatic;
5961
import static org.mockito.Mockito.spy;
6062
import static org.mockito.Mockito.when;
6163

@@ -67,6 +69,8 @@ public class MeterProcessorTest {
6769
private MeterSystem meterSystem;
6870
private MeterProcessor processor;
6971

72+
private MockedStatic<MetricsStreamProcessor> mockedMetricsStreamProcessor;
73+
7074
private String service = "test-service";
7175
private String serviceInstance = "test-service-instance";
7276

@@ -83,18 +87,22 @@ public void setup() throws StorageException, ModuleStartException {
8387
when(moduleManager.find(CoreModule.NAME).provider()).thenReturn(mock(ModuleServiceHolder.class));
8488
when(moduleManager.find(CoreModule.NAME).provider().getService(MeterSystem.class)).thenReturn(meterSystem);
8589
MetricsStreamProcessor mockProcessor = mock(MetricsStreamProcessor.class);
86-
Whitebox.setInternalState(
87-
MetricsStreamProcessor.class,
88-
"PROCESSOR",
89-
mockProcessor
90-
);
90+
mockedMetricsStreamProcessor = mockStatic(MetricsStreamProcessor.class);
91+
mockedMetricsStreamProcessor.when(MetricsStreamProcessor::getInstance).thenReturn(mockProcessor);
9192
doNothing().when(mockProcessor).create(any(), (StreamDefinition) any(), any());
9293
final MeterProcessService processService = new MeterProcessService(moduleManager);
9394
List<MeterConfig> config = MeterConfigs.loadConfig("meter-analyzer-config", Arrays.asList("config"));
9495
processService.start(config);
9596
processor = new MeterProcessor(processService);
9697
}
9798

99+
@AfterEach
100+
public void tearDown() {
101+
if (mockedMetricsStreamProcessor != null) {
102+
mockedMetricsStreamProcessor.close();
103+
}
104+
}
105+
98106
@Test
99107
public void testProcess() {
100108
AtomicReference<AvgHistogramFunction> data = new AtomicReference<>();

oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/TraceSamplingPolicyWatcherTest.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@
3333
import org.junit.jupiter.api.Timeout;
3434
import org.junit.jupiter.api.extension.ExtendWith;
3535
import org.mockito.junit.jupiter.MockitoExtension;
36-
import org.powermock.reflect.Whitebox;
37-
36+
import java.lang.reflect.Field;
3837
import java.util.Optional;
3938
import java.util.Set;
4039
import java.util.concurrent.atomic.AtomicReference;
@@ -228,11 +227,13 @@ public Optional<GroupConfigTable> readGroupConfig(final Set<String> keys) {
228227

229228
@Test
230229
@Timeout(20)
231-
public void testServiceSampleRateDynamicUpdate() throws InterruptedException {
230+
public void testServiceSampleRateDynamicUpdate() throws Exception {
232231
ConfigWatcherRegister register = new ServiceMockConfigWatcherRegister(3);
233232

234233
TraceSamplingPolicyWatcher watcher = new TraceSamplingPolicyWatcher(moduleConfig, provider);
235-
Whitebox.setInternalState(provider, "moduleConfig", moduleConfig);
234+
Field moduleConfigField = AnalyzerModuleProvider.class.getDeclaredField("moduleConfig");
235+
moduleConfigField.setAccessible(true);
236+
moduleConfigField.set(provider, moduleConfig);
236237
provider.getModuleConfig().setTraceSamplingPolicyWatcher(watcher);
237238
register.registerConfigChangeWatcher(watcher);
238239
register.start();
@@ -250,7 +251,7 @@ public void testServiceSampleRateDynamicUpdate() throws InterruptedException {
250251
}
251252

252253
@Test
253-
public void testServiceSampleRateNotify() {
254+
public void testServiceSampleRateNotify() throws Exception {
254255
TraceSamplingPolicyWatcher watcher = new TraceSamplingPolicyWatcher(moduleConfig, provider);
255256
ConfigChangeWatcher.ConfigChangeEvent value1 = new ConfigChangeWatcher.ConfigChangeEvent(
256257
"services:\n" +
@@ -368,9 +369,11 @@ private void globalDefaultDurationEquals(TraceSamplingPolicyWatcher watcher, int
368369
Assertions.assertFalse(watcher.shouldSample("", 10000, duration - 1));
369370
}
370371

371-
private SamplingPolicy getSamplingPolicy(String service, TraceSamplingPolicyWatcher watcher) {
372-
AtomicReference<SamplingPolicySettings> samplingPolicySettings = Whitebox.getInternalState(
373-
watcher, "samplingPolicySettings");
372+
private SamplingPolicy getSamplingPolicy(String service, TraceSamplingPolicyWatcher watcher) throws Exception {
373+
Field settingsField = TraceSamplingPolicyWatcher.class.getDeclaredField("samplingPolicySettings");
374+
settingsField.setAccessible(true);
375+
@SuppressWarnings("unchecked")
376+
AtomicReference<SamplingPolicySettings> samplingPolicySettings = (AtomicReference<SamplingPolicySettings>) settingsField.get(watcher);
374377
return samplingPolicySettings.get().get(service);
375378
}
376379
}

oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/trace/UninstrumentedGatewaysConfigTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,23 @@
1818

1919
package org.apache.skywalking.oap.server.analyzer.provider.trace;
2020

21+
import java.lang.reflect.Method;
2122
import org.apache.skywalking.oap.server.library.module.ModuleDefine;
2223
import org.apache.skywalking.oap.server.library.module.ModuleProvider;
2324
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
2425
import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
2526
import org.junit.jupiter.api.Assertions;
2627
import org.junit.jupiter.api.Test;
27-
import org.powermock.reflect.Whitebox;
2828

2929
public class UninstrumentedGatewaysConfigTest {
3030
@Test
3131
public void testParseGatewayYAML() throws Exception {
3232
final UninstrumentedGatewaysConfig uninstrumentedGatewaysConfig
3333
= new UninstrumentedGatewaysConfig(new MockProvider());
34+
Method parseGatewaysFromFileMethod = UninstrumentedGatewaysConfig.class.getDeclaredMethod("parseGatewaysFromFile", String.class);
35+
parseGatewaysFromFileMethod.setAccessible(true);
3436
UninstrumentedGatewaysConfig.GatewayInfos gatewayInfos
35-
= Whitebox.invokeMethod(uninstrumentedGatewaysConfig, "parseGatewaysFromFile", "gateways.yml");
37+
= (UninstrumentedGatewaysConfig.GatewayInfos) parseGatewaysFromFileMethod.invoke(uninstrumentedGatewaysConfig, "gateways.yml");
3638
Assertions.assertEquals(1, gatewayInfos.getGateways().size());
3739
}
3840

oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLSecurityTest.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
import org.junit.jupiter.api.BeforeEach;
3131
import org.junit.jupiter.params.ParameterizedTest;
3232
import org.junit.jupiter.params.provider.MethodSource;
33-
import org.powermock.reflect.Whitebox;
33+
34+
import java.lang.reflect.Field;
3435

3536
import java.util.Arrays;
3637
import java.util.Collection;
@@ -104,8 +105,10 @@ public static Collection<Object[]> data() {
104105
final ModuleManager manager = mock(ModuleManager.class);
105106

106107
@BeforeEach
107-
public void setup() {
108-
Whitebox.setInternalState(manager, "isInPrepareStage", false);
108+
public void setup() throws Exception {
109+
Field isInPrepareStageField = ModuleManager.class.getDeclaredField("isInPrepareStage");
110+
isInPrepareStageField.setAccessible(true);
111+
isInPrepareStageField.set(manager, false);
109112
when(manager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
110113
when(manager.find(CoreModule.NAME).provider()).thenReturn(mock(ModuleServiceHolder.class));
111114
when(manager.find(CoreModule.NAME).provider().getService(SourceReceiver.class))
@@ -124,9 +127,17 @@ public void setup() {
124127
public void testSecurity(String name, String script) {
125128
assertThrows(MultipleCompilationErrorsException.class, () -> {
126129
final DSL dsl = DSL.of(manager, new LogAnalyzerModuleConfig(), script);
127-
Whitebox.setInternalState(
128-
Whitebox.getInternalState(dsl, "filterSpec"), "sinkListenerFactories", Collections.emptyList()
129-
);
130+
try {
131+
Field filterSpecField = DSL.class.getDeclaredField("filterSpec");
132+
filterSpecField.setAccessible(true);
133+
Object filterSpec = filterSpecField.get(dsl);
134+
135+
Field sinkListenerFactoriesField = filterSpec.getClass().getDeclaredField("sinkListenerFactories");
136+
sinkListenerFactoriesField.setAccessible(true);
137+
sinkListenerFactoriesField.set(filterSpec, Collections.emptyList());
138+
} catch (Exception e) {
139+
throw new RuntimeException(e);
140+
}
130141

131142
dsl.bind(new Binding().log(LogData.newBuilder()));
132143
dsl.evaluate();

oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,10 @@
2828
import org.apache.skywalking.oap.server.library.module.ModuleManager;
2929
import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder;
3030
import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder;
31-
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
3231
import org.junit.jupiter.api.BeforeEach;
3332
import org.junit.jupiter.params.ParameterizedTest;
3433
import org.junit.jupiter.params.provider.MethodSource;
35-
import org.powermock.reflect.Whitebox;
36-
34+
import java.lang.reflect.Field;
3735
import java.util.Arrays;
3836
import java.util.Collection;
3937
import java.util.Collections;
@@ -196,8 +194,10 @@ public static Collection<Object[]> data() {
196194
final ModuleManager manager = mock(ModuleManager.class);
197195

198196
@BeforeEach
199-
public void setup() {
200-
Whitebox.setInternalState(manager, "isInPrepareStage", false);
197+
public void setup() throws Exception {
198+
Field isInPrepareStageField = ModuleManager.class.getDeclaredField("isInPrepareStage");
199+
isInPrepareStageField.setAccessible(true);
200+
isInPrepareStageField.set(manager, false);
201201
when(manager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
202202
ModuleProviderHolder logAnalyzerHolder = mock(ModuleProviderHolder.class);
203203
LogAnalyzerModuleProvider logAnalyzerProvider = mock(LogAnalyzerModuleProvider.class);
@@ -218,11 +218,15 @@ public void setup() {
218218

219219
@ParameterizedTest(name = "{0}")
220220
@MethodSource("data")
221-
public void testDslStaticCompile(String name, String script) throws ModuleStartException {
221+
public void testDslStaticCompile(String name, String script) throws Exception {
222222
final DSL dsl = DSL.of(manager, new LogAnalyzerModuleConfig(), script);
223-
Whitebox.setInternalState(
224-
Whitebox.getInternalState(dsl, "filterSpec"), "sinkListenerFactories", Collections.emptyList()
225-
);
223+
Field filterSpecField = DSL.class.getDeclaredField("filterSpec");
224+
filterSpecField.setAccessible(true);
225+
Object filterSpec = filterSpecField.get(dsl);
226+
227+
Field sinkListenerFactoriesField = filterSpec.getClass().getDeclaredField("sinkListenerFactories");
228+
sinkListenerFactoriesField.setAccessible(true);
229+
sinkListenerFactoriesField.set(filterSpec, Collections.emptyList());
226230

227231
dsl.bind(new Binding().log(LogData.newBuilder().build()));
228232
dsl.evaluate();

oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/AnalyzerTest.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@
4040
import org.junit.jupiter.api.Test;
4141
import org.junit.jupiter.api.extension.ExtendWith;
4242
import org.mockito.Mock;
43-
import org.mockito.Mockito;
43+
import org.mockito.MockedStatic;
4444
import org.mockito.junit.jupiter.MockitoExtension;
45-
import org.powermock.reflect.Whitebox;
4645

4746
import java.util.HashMap;
4847
import java.util.Map;
@@ -53,6 +52,7 @@
5352
import static org.mockito.ArgumentMatchers.any;
5453
import static org.mockito.Mockito.doAnswer;
5554
import static org.mockito.Mockito.doNothing;
55+
import static org.mockito.Mockito.mockStatic;
5656
import static org.mockito.Mockito.spy;
5757

5858
@ExtendWith(MockitoExtension.class)
@@ -63,15 +63,17 @@ public class AnalyzerTest {
6363
private MeterSystem meterSystem;
6464
private Analyzer analyzer;
6565

66+
private MockedStatic<MetricsStreamProcessor> mockedMetricsStreamProcessor;
67+
6668
@BeforeEach
6769
public void setup() throws StorageException {
6870
meterSystem = spy(new MeterSystem(moduleManager));
69-
// Fix for JDK 25 / Mockito 5: Prevent double-spying on the singleton
70-
MetricsStreamProcessor instance = MetricsStreamProcessor.getInstance();
71-
if (!Mockito.mockingDetails(instance).isMock()) {
72-
Whitebox.setInternalState(MetricsStreamProcessor.class, "PROCESSOR", Mockito.spy(instance));
73-
}
74-
doNothing().when(MetricsStreamProcessor.getInstance()).create(any(), (StreamDefinition) any(), any());
71+
72+
MetricsStreamProcessor mockProcessor = spy(new MetricsStreamProcessor());
73+
mockedMetricsStreamProcessor = mockStatic(MetricsStreamProcessor.class);
74+
mockedMetricsStreamProcessor.when(MetricsStreamProcessor::getInstance).thenReturn(mockProcessor);
75+
76+
doNothing().when(mockProcessor).create(any(), (StreamDefinition) any(), any());
7577

7678
}
7779

@@ -86,6 +88,13 @@ public static void tearDown() {
8688
MeterEntity.setNamingControl(null);
8789
}
8890

91+
@org.junit.jupiter.api.AfterEach
92+
public void tearDownEach() {
93+
if (mockedMetricsStreamProcessor != null) {
94+
mockedMetricsStreamProcessor.close();
95+
}
96+
}
97+
8998
@Test
9099
public void testSingle() {
91100
analyzer = Analyzer.build(

oap-server/analyzer/meter-analyzer/src/test/java/org/apache/skywalking/oap/meter/analyzer/dsl/K8sTagTest.java

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@
3939
import org.junit.jupiter.api.extension.ExtendWith;
4040
import org.junit.jupiter.params.ParameterizedTest;
4141
import org.junit.jupiter.params.provider.MethodSource;
42-
import org.mockito.Mockito;
4342
import org.mockito.junit.jupiter.MockitoExtension;
4443
import org.mockito.junit.jupiter.MockitoSettings;
4544
import org.mockito.quality.Strictness;
46-
import org.powermock.reflect.Whitebox;
45+
46+
import java.lang.reflect.Field;
47+
import com.google.common.cache.LoadingCache;
4748

4849
import java.util.Arrays;
4950
import java.util.Collection;
@@ -53,6 +54,8 @@
5354
import static com.google.common.collect.ImmutableMap.of;
5455
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
5556
import static org.junit.jupiter.api.Assertions.fail;
57+
import static org.mockito.ArgumentMatchers.any;
58+
import static org.mockito.Mockito.mock;
5659
import static org.mockito.Mockito.when;
5760

5861
@Slf4j
@@ -237,29 +240,61 @@ public static Collection<Object[]> data() {
237240
@SneakyThrows
238241
@BeforeEach
239242
public void setup() {
240-
Whitebox.setInternalState(KubernetesServices.class, "INSTANCE",
241-
Mockito.mock(KubernetesServices.class)
242-
);
243-
Whitebox.setInternalState(KubernetesPods.class, "INSTANCE",
244-
Mockito.mock(KubernetesPods.class)
245-
);
243+
LoadingCache<KubernetesServices, Object> mockServicesCache = mock(LoadingCache.class);
244+
LoadingCache<ObjectID, Object> mockServiceByIDCache = mock(LoadingCache.class);
245+
246+
Field servicesField = KubernetesServices.class.getDeclaredField("services");
247+
servicesField.setAccessible(true);
248+
servicesField.set(KubernetesServices.INSTANCE, mockServicesCache);
249+
250+
Field serviceByIDField = KubernetesServices.class.getDeclaredField("serviceByID");
251+
serviceByIDField.setAccessible(true);
252+
serviceByIDField.set(KubernetesServices.INSTANCE, mockServiceByIDCache);
253+
254+
LoadingCache<String, Object> mockPodByIPCache = mock(LoadingCache.class);
255+
LoadingCache<ObjectID, Object> mockPodByObjectIDCache = mock(LoadingCache.class);
256+
257+
Field podByIPField = KubernetesPods.class.getDeclaredField("podByIP");
258+
podByIPField.setAccessible(true);
259+
podByIPField.set(KubernetesPods.INSTANCE, mockPodByIPCache);
260+
261+
Field podByObjectIDField = KubernetesPods.class.getDeclaredField("podByObjectID");
262+
podByObjectIDField.setAccessible(true);
263+
podByObjectIDField.set(KubernetesPods.INSTANCE, mockPodByObjectIDCache);
246264

247-
when(KubernetesServices.INSTANCE.list()).thenReturn(ImmutableList.of(
265+
try {
266+
when(mockServicesCache.get(any())).thenReturn(ImmutableList.of());
267+
when(mockServiceByIDCache.get(any())).thenReturn(Optional.empty());
268+
when(mockPodByIPCache.get(any())).thenReturn(Optional.empty());
269+
when(mockPodByObjectIDCache.get(any())).thenReturn(Optional.empty());
270+
} catch (Exception e) {
271+
// ignore
272+
}
273+
274+
when(mockServicesCache.get(KubernetesServices.INSTANCE)).thenReturn(ImmutableList.of(
248275
mockService("nginx-service", "default", of("run", "nginx"), "2.2.2.1"),
249276
mockService("kube-state-metrics", "kube-system", of("run", "kube-state-metrics"), "2.2.2.2")));
250277
ImmutableList.of(
251278
mockService("nginx-service", "default", of("run", "nginx"), "2.2.2.1"),
252279
mockService("kube-state-metrics", "kube-system", of("run", "kube-state-metrics"), "2.2.2.2"))
253-
.forEach(svc ->
254-
when(KubernetesServices.INSTANCE.findByID(ObjectID.builder().namespace(svc.getMetadata().getNamespace()).name(svc.getMetadata().getName()).build()))
255-
.thenReturn(Optional.of(svc))
256-
);
280+
.forEach(svc -> {
281+
try {
282+
when(mockServiceByIDCache.get(ObjectID.builder().namespace(svc.getMetadata().getNamespace()).name(svc.getMetadata().getName()).build()))
283+
.thenReturn(Optional.of(svc));
284+
} catch (Exception e) {
285+
// ignore
286+
}
287+
});
257288
ImmutableList.of(
258289
mockPod("my-nginx-5dc4865748-mbczh", "default", of("run", "nginx"), "1.1.1.1"),
259290
mockPod("kube-state-metrics-6f979fd498-z7xwx", "kube-system", of("run", "kube-state-metrics"), "1.1.1.2"))
260291
.forEach(pod -> {
261-
when(KubernetesPods.INSTANCE.findByIP(pod.getStatus().getPodIP())).thenReturn(Optional.of(pod));
262-
when(KubernetesPods.INSTANCE.findByObjectID(ObjectID.builder().name(pod.getMetadata().getName()).namespace(pod.getMetadata().getNamespace()).build())).thenReturn(Optional.of(pod));
292+
try {
293+
when(mockPodByIPCache.get(pod.getStatus().getPodIP())).thenReturn(Optional.of(pod));
294+
when(mockPodByObjectIDCache.get(ObjectID.builder().name(pod.getMetadata().getName()).namespace(pod.getMetadata().getNamespace()).build())).thenReturn(Optional.of(pod));
295+
} catch (Exception e) {
296+
// ignore
297+
}
263298
});
264299
}
265300

0 commit comments

Comments
 (0)