Skip to content

Commit 19f84cd

Browse files
authored
refactor: provide a way to set Config for DependencyInjection tests (#5646)
1 parent 72c97d8 commit 19f84cd

17 files changed

Lines changed: 161 additions & 159 deletions

File tree

core/common/boot/src/main/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public DefaultServiceExtensionContext(Monitor monitor, Config config) {
4848
}
4949

5050
@Override
51-
public Config getConfig(String path) {
52-
return config.getConfig(path);
51+
public Config getConfig() {
52+
return config;
5353
}
5454

5555
@Override

core/common/boot/src/test/java/org/eclipse/edc/boot/system/DefaultServiceExtensionContextTest.java

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import org.eclipse.edc.spi.EdcException;
1919
import org.eclipse.edc.spi.monitor.Monitor;
2020
import org.eclipse.edc.spi.system.ConfigurationExtension;
21+
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2122
import org.eclipse.edc.spi.system.configuration.Config;
2223
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
23-
import org.junit.jupiter.api.BeforeEach;
2424
import org.junit.jupiter.api.Nested;
2525
import org.junit.jupiter.api.Test;
2626

@@ -31,26 +31,18 @@
3131
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3232
import static org.eclipse.edc.boot.BootServicesExtension.COMPONENT_ID;
3333
import static org.eclipse.edc.boot.BootServicesExtension.RUNTIME_ID;
34-
import static org.mockito.ArgumentMatchers.any;
3534
import static org.mockito.Mockito.mock;
36-
import static org.mockito.Mockito.when;
3735

3836
class DefaultServiceExtensionContextTest {
3937

4038
private final ConfigurationExtension configuration = mock();
4139
private final Monitor monitor = mock();
4240
private final Config config = mock();
43-
private DefaultServiceExtensionContext context;
44-
45-
@BeforeEach
46-
void setUp() {
47-
context = new DefaultServiceExtensionContext(monitor, config);
48-
}
4941

5042
@Test
5143
void get_setting_returns_the_setting_from_the_configuration_extension() {
52-
when(config.getConfig(any())).thenReturn(ConfigFactory.fromMap(Map.of("key", "value")));
53-
context.initialize();
44+
var config = ConfigFactory.fromMap(Map.of("key", "value"));
45+
var context = createContext(config);
5446

5547
var setting = context.getSetting("key", "default");
5648

@@ -59,8 +51,7 @@ void get_setting_returns_the_setting_from_the_configuration_extension() {
5951

6052
@Test
6153
void get_setting_returns_default_value_if_setting_is_not_found() {
62-
when(config.getConfig(any())).thenReturn(ConfigFactory.empty());
63-
context.initialize();
54+
var context = createContext(ConfigFactory.empty());
6455

6556
var setting = context.getSetting("key", "default");
6657

@@ -69,8 +60,7 @@ void get_setting_returns_default_value_if_setting_is_not_found() {
6960

7061
@Test
7162
void registerService_throwsWhenFrozen() {
72-
when(config.getConfig(any())).thenReturn(ConfigFactory.empty());
73-
context.initialize();
63+
var context = createContext(ConfigFactory.empty());
7464

7565
context.freeze();
7666
assertThatThrownBy(() -> context.registerService(Object.class, new Object() {
@@ -79,62 +69,63 @@ void registerService_throwsWhenFrozen() {
7969

8070
@Nested
8171
class GetRuntimeId {
72+
8273
@Test
8374
void shouldReturnRandomUuid_whenNotConfigured() {
84-
when(config.getConfig(any())).thenReturn(ConfigFactory.empty());
85-
context.initialize();
75+
var context = createContext(ConfigFactory.empty());
8676

8777
var runtimeId = context.getRuntimeId();
8878
assertThat(UUID.fromString(runtimeId)).isNotNull();
89-
9079
}
9180

9281
@Test
9382
void shouldReturnConfiguredRuntimeId() {
94-
when(config.getConfig(any())).thenReturn(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id")));
95-
context.initialize();
83+
var context = createContext(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id")));
9684

9785
var runtimeId = context.getRuntimeId();
9886

9987
assertThat(runtimeId).isEqualTo("runtime-id");
10088
}
89+
10190
}
10291

10392
@Nested
10493
class GetComponentId {
94+
10595
@Test
10696
void shouldReturnRandomUuid_whenNotConfigured() {
107-
when(config.getConfig(any())).thenReturn(ConfigFactory.empty());
108-
context.initialize();
97+
var context = createContext(ConfigFactory.empty());
10998

11099
var componentId = context.getComponentId();
111100
assertThat(UUID.fromString(componentId)).isNotNull();
112101

113102
}
114103

115-
116104
@Test
117105
void shouldUseRuntimeId_whenComponentIdNotConfigured() {
118-
when(config.getConfig(any())).thenReturn(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id")));
119-
context.initialize();
106+
var context = createContext(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id")));
120107

121108
var componentId = context.getComponentId();
122109

123110
assertThat(componentId).isEqualTo("runtime-id");
124111
}
125112

126-
127113
@Test
128114
void shouldUseConfiguredValue_whenBothAreConfigured() {
129-
when(config.getConfig(any())).thenReturn(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id", COMPONENT_ID, "component-id")));
115+
var context = createContext(ConfigFactory.fromMap(Map.of(RUNTIME_ID, "runtime-id", COMPONENT_ID, "component-id")));
130116

131-
context.initialize();
132117
var componentId = context.getComponentId();
133118
var runtimeId = context.getRuntimeId();
134119

135120
assertThat(runtimeId).isEqualTo("runtime-id");
136121
assertThat(componentId).isEqualTo("component-id");
137122
}
123+
138124
}
139125

126+
private ServiceExtensionContext createContext(Config config) {
127+
var context = new DefaultServiceExtensionContext(monitor, config);
128+
context.initialize();
129+
return context;
130+
}
140131
}

core/common/edr-store-core/src/test/java/org/eclipse/edc/edr/store/EndpointDataReferenceStoreDefaultServicesExtensionTest.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,20 @@
1818
import org.eclipse.edc.edr.store.defaults.InMemoryEndpointDataReferenceEntryIndex;
1919
import org.eclipse.edc.edr.store.defaults.VaultEndpointDataReferenceCache;
2020
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
21+
import org.eclipse.edc.junit.extensions.TestExtensionContext;
2122
import org.eclipse.edc.spi.result.Result;
2223
import org.eclipse.edc.spi.security.Vault;
23-
import org.eclipse.edc.spi.system.ServiceExtensionContext;
24-
import org.eclipse.edc.spi.system.configuration.Config;
24+
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
2525
import org.eclipse.edc.spi.types.TypeManager;
2626
import org.eclipse.edc.spi.types.domain.DataAddress;
2727
import org.junit.jupiter.api.BeforeEach;
2828
import org.junit.jupiter.api.Test;
2929
import org.junit.jupiter.api.extension.ExtendWith;
3030

31+
import java.util.Map;
32+
3133
import static org.assertj.core.api.Assertions.assertThat;
3234
import static org.mockito.ArgumentMatchers.any;
33-
import static org.mockito.ArgumentMatchers.eq;
3435
import static org.mockito.ArgumentMatchers.startsWith;
3536
import static org.mockito.Mockito.mock;
3637
import static org.mockito.Mockito.verify;
@@ -40,18 +41,16 @@
4041
public class EndpointDataReferenceStoreDefaultServicesExtensionTest {
4142

4243
private final Vault vault = mock();
43-
4444
private final TypeManager typeManager = mock();
4545

4646
@BeforeEach
47-
void setUp(ServiceExtensionContext context) {
47+
void setUp(TestExtensionContext context) {
4848
context.registerService(Vault.class, vault);
4949
context.registerService(TypeManager.class, typeManager);
5050

51-
var config = mock(Config.class);
52-
when(context.getConfig()).thenReturn(config);
53-
when(config.hasKey(eq("edc.edr.vault.path"))).thenReturn(true);
54-
when(config.getString(eq("edc.edr.vault.path"))).thenReturn("path/");
51+
context.setConfig(ConfigFactory.fromMap(Map.of(
52+
"edc.edr.vault.path", "path/"
53+
)));
5554
}
5655

5756
@Test

core/common/junit/src/main/java/org/eclipse/edc/junit/extensions/DependencyInjectionExtension.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818
import org.eclipse.edc.boot.system.injection.InjectorImpl;
1919
import org.eclipse.edc.boot.system.injection.ObjectFactory;
2020
import org.eclipse.edc.boot.system.injection.ServiceInjectionPoint;
21-
import org.eclipse.edc.boot.system.runtime.BaseRuntime;
2221
import org.eclipse.edc.spi.system.ServiceExtension;
2322
import org.eclipse.edc.spi.system.ServiceExtensionContext;
24-
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
2523
import org.junit.jupiter.api.extension.BeforeEachCallback;
2624
import org.junit.jupiter.api.extension.ExtensionContext;
2725
import org.junit.jupiter.api.extension.ParameterContext;
@@ -42,15 +40,14 @@
4240
* instead.
4341
* The {@link ServiceExtensionContext} instance is wrapped by a Mockito Spy.
4442
*/
45-
public class DependencyInjectionExtension extends BaseRuntime implements BeforeEachCallback, ParameterResolver {
43+
public class DependencyInjectionExtension implements BeforeEachCallback, ParameterResolver {
4644

47-
private ServiceExtensionContext context;
45+
private TestExtensionContext context;
4846
private ObjectFactory factory;
4947

5048
@Override
5149
public void beforeEach(ExtensionContext extensionContext) {
52-
monitor = mock();
53-
context = spy(super.createServiceExtensionContext(ConfigFactory.empty()));
50+
context = spy(new TestExtensionContext());
5451
context.initialize();
5552
factory = new ReflectiveObjectFactory(
5653
new InjectorImpl((ip, c) -> ofNullable(ip.getDefaultValueProvider())
@@ -72,7 +69,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon
7269
var type = parameterContext.getParameter().getParameterizedType();
7370
if (type.equals(ObjectFactory.class)) {
7471
return true;
75-
} else if (type.equals(ServiceExtensionContext.class)) {
72+
} else if (type.equals(ServiceExtensionContext.class) || type.equals(TestExtensionContext.class)) {
7673
return true;
7774
} else if (type instanceof Class<?> clazz) {
7875
if (ServiceExtension.class.isAssignableFrom(clazz)) {
@@ -86,7 +83,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon
8683
@Override
8784
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
8885
var type = parameterContext.getParameter().getParameterizedType();
89-
if (type.equals(ServiceExtensionContext.class)) {
86+
if (type.equals(ServiceExtensionContext.class) || type.equals(TestExtensionContext.class)) {
9087
return context;
9188
} else if (type.equals(ObjectFactory.class)) {
9289
return factory;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright (c) 2026 Think-it GmbH
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Apache License, Version 2.0 which is available at
6+
* https://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* SPDX-License-Identifier: Apache-2.0
9+
*
10+
* Contributors:
11+
* Think-it GmbH - initial API and implementation
12+
*
13+
*/
14+
15+
package org.eclipse.edc.junit.extensions;
16+
17+
import org.eclipse.edc.boot.system.DefaultServiceExtensionContext;
18+
import org.eclipse.edc.spi.system.configuration.Config;
19+
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
20+
21+
import static org.mockito.Mockito.mock;
22+
23+
/**
24+
* Extension of the {@link DefaultServiceExtensionContext} that permits to set a configuration, to be used in tests where
25+
* config settings will be injected in the extension.
26+
*/
27+
public class TestExtensionContext extends DefaultServiceExtensionContext {
28+
29+
private Config config;
30+
31+
public TestExtensionContext() {
32+
super(mock(), ConfigFactory.empty());
33+
config = ConfigFactory.empty();
34+
}
35+
36+
@Override
37+
public Config getConfig() {
38+
return config;
39+
}
40+
41+
public void setConfig(Config config) {
42+
this.config = config;
43+
}
44+
}

core/common/participant-context-connector-classic-core/src/test/java/org/eclipse/edc/participantcontext/ClassicParticipantContextDefaultServicesExtensionTest.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,46 +16,41 @@
1616

1717
import org.eclipse.edc.boot.system.injection.ObjectFactory;
1818
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
19+
import org.eclipse.edc.junit.extensions.TestExtensionContext;
1920
import org.eclipse.edc.participantcontext.connector.ClassicParticipantContextDefaultServicesExtension;
2021
import org.eclipse.edc.participantcontext.spi.types.ParticipantContext;
21-
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2222
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
23-
import org.junit.jupiter.api.BeforeEach;
2423
import org.junit.jupiter.api.Test;
2524
import org.junit.jupiter.api.extension.ExtendWith;
2625

2726
import java.util.Map;
2827

2928
import static org.assertj.core.api.Assertions.assertThat;
30-
import static org.mockito.Mockito.when;
3129

3230
@ExtendWith(DependencyInjectionExtension.class)
3331
public class ClassicParticipantContextDefaultServicesExtensionTest {
3432

35-
@BeforeEach
36-
void setup(ServiceExtensionContext context) {
37-
var config = ConfigFactory.fromMap(Map.of(
33+
@Test
34+
void verifyParticipantContextSupplier(TestExtensionContext context, ObjectFactory factory) {
35+
context.setConfig(ConfigFactory.fromMap(Map.of(
3836
"edc.participant.id", "participantId"
37+
)));
3938

40-
));
41-
when(context.getConfig()).thenReturn(config);
42-
}
39+
var extension = factory.constructInstance(ClassicParticipantContextDefaultServicesExtension.class);
4340

44-
@Test
45-
void verifyParticipantContextSupplier(ClassicParticipantContextDefaultServicesExtension extension) {
4641
var supplier = extension.participantContextSupplier();
4742
assertThat(supplier.get().getContent()).extracting(ParticipantContext::getParticipantContextId).isEqualTo("participantId");
4843
}
4944

5045
@Test
51-
void verifyParticipantContextSupplierWithConfiguredParticipantContextId(ServiceExtensionContext context, ObjectFactory factory) {
52-
var config = ConfigFactory.fromMap(Map.of(
46+
void verifyParticipantContextSupplierWithConfiguredParticipantContextId(TestExtensionContext context, ObjectFactory factory) {
47+
context.setConfig(ConfigFactory.fromMap(Map.of(
5348
"edc.participant.id", "participantId",
5449
"edc.participant.context.id", "participantContextId"
50+
)));
5551

56-
));
57-
when(context.getConfig()).thenReturn(config);
5852
var extension = factory.constructInstance(ClassicParticipantContextDefaultServicesExtension.class);
53+
5954
var supplier = extension.participantContextSupplier();
6055
assertThat(supplier.get().getContent()).extracting(ParticipantContext::getParticipantContextId).isEqualTo("participantContextId");
6156
}

core/federated-catalog-core-2025/src/test/java/org/eclipse/edc/catalog/cache/FederatedCatalogCacheExtensionTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.edc.crawler.spi.TargetNodeFilter;
2424
import org.eclipse.edc.crawler.spi.model.ExecutionPlan;
2525
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
26+
import org.eclipse.edc.junit.extensions.TestExtensionContext;
2627
import org.eclipse.edc.spi.monitor.Monitor;
2728
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2829
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
@@ -76,9 +77,8 @@ void initialize(ServiceExtensionContext context) {
7677
}
7778

7879
@Test
79-
void initialize_withDisabledExecution(ServiceExtensionContext context, ObjectFactory factory) {
80-
var mockedConfig = ConfigFactory.fromMap(Map.of("edc.catalog.cache.execution.enabled", Boolean.FALSE.toString()));
81-
when(context.getConfig()).thenReturn(mockedConfig);
80+
void initialize_withDisabledExecution(TestExtensionContext context, ObjectFactory factory) {
81+
context.setConfig(ConfigFactory.fromMap(Map.of("edc.catalog.cache.execution.enabled", Boolean.FALSE.toString())));
8282
var mockedPlan = mock(ExecutionPlan.class);
8383
context.registerService(ExecutionPlan.class, mockedPlan);
8484

core/federated-catalog-core/src/test/java/org/eclipse/edc/catalog/cache/FederatedCatalogCoreServicesExtensionTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.edc.crawler.spi.TargetNodeFilter;
2222
import org.eclipse.edc.crawler.spi.model.ExecutionPlan;
2323
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
24+
import org.eclipse.edc.junit.extensions.TestExtensionContext;
2425
import org.eclipse.edc.spi.monitor.Monitor;
2526
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2627
import org.eclipse.edc.spi.system.configuration.ConfigFactory;
@@ -81,9 +82,8 @@ void initialize_withHealthCheck(ServiceExtensionContext context, FederatedCatalo
8182
}
8283

8384
@Test
84-
void initialize_withDisabledExecution(ServiceExtensionContext context, ObjectFactory objectFactory) {
85-
var mockedConfig = ConfigFactory.fromMap(Map.of("edc.catalog.cache.execution.enabled", Boolean.FALSE.toString()));
86-
when(context.getConfig()).thenReturn(mockedConfig);
85+
void initialize_withDisabledExecution(TestExtensionContext context, ObjectFactory objectFactory) {
86+
context.setConfig(ConfigFactory.fromMap(Map.of("edc.catalog.cache.execution.enabled", Boolean.FALSE.toString())));
8787

8888
var extension = objectFactory.constructInstance(FederatedCatalogCoreServicesExtension.class);
8989

@@ -98,5 +98,4 @@ void start(ServiceExtensionContext context) {
9898
extension.initialize(context);
9999
}
100100

101-
102101
}

0 commit comments

Comments
 (0)