This is an automated email from the ASF dual-hosted git repository.
tkalkirill pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 2ccbeca5f6 IGNITE-20089 Fix ConfigurationExtension static parameters
injection (#2377)
2ccbeca5f6 is described below
commit 2ccbeca5f67bf7af162bd3a47373d04a6e02d5ce
Author: Alexander Polovtcev <[email protected]>
AuthorDate: Mon Jul 31 08:24:31 2023 +0300
IGNITE-20089 Fix ConfigurationExtension static parameters injection (#2377)
---
.../testframework/ConfigurationExtensionTest.java | 11 ++++++++++
.../testframework/ConfigurationExtension.java | 25 ++++++++++++++++------
2 files changed, 29 insertions(+), 7 deletions(-)
diff --git
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtensionTest.java
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtensionTest.java
index a969b67aee..d82057a153 100644
---
a/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtensionTest.java
+++
b/modules/configuration/src/test/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtensionTest.java
@@ -19,6 +19,7 @@ package
org.apache.ignite.internal.configuration.testframework;
import static java.util.concurrent.CompletableFuture.completedFuture;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -34,6 +35,7 @@ import
org.apache.ignite.internal.configuration.notifications.ConfigurationStora
import org.apache.ignite.internal.configuration.sample.DiscoveryConfiguration;
import
org.apache.ignite.internal.configuration.sample.ExtendedDiscoveryConfiguration;
import
org.apache.ignite.internal.configuration.sample.ExtendedDiscoveryConfigurationSchema;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -49,6 +51,15 @@ class ConfigurationExtensionTest {
@InjectRevisionListenerHolder
private ConfigurationStorageRevisionListenerHolder
fieldRevisionListenerHolder;
+ @BeforeAll
+ static void staticParameterInjection(
+ @InjectConfiguration(internalExtensions =
ExtendedDiscoveryConfigurationSchema.class) DiscoveryConfiguration paramCfg
+ ) {
+ assertThat(paramCfg.joinTimeout().update(100),
willCompleteSuccessfully());
+
+ assertEquals(100, paramCfg.joinTimeout().value());
+ }
+
/** Test that contains injected parameter. */
@Test
public void injectConfiguration(
diff --git
a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
index d1d20213e4..8af2eb8f81 100644
---
a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
+++
b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.withSettings;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigObject;
+import java.lang.reflect.Executable;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
@@ -205,17 +206,23 @@ public class ConfigurationExtension implements
BeforeEachCallback, AfterEachCall
ParameterContext parameterContext,
ExtensionContext extensionContext
) throws ParameterResolutionException {
+ Store store = extensionContext.getStore(NAMESPACE);
+
+ StorageRevisionListenerHolderImpl revisionListenerHolder;
+
+ if (isStaticExecutable(parameterContext.getDeclaringExecutable())) {
+ revisionListenerHolder =
store.get(REVISION_LISTENER_ALL_TEST_HOLDER_KEY,
StorageRevisionListenerHolderImpl.class);
+ } else {
+ revisionListenerHolder =
store.get(REVISION_LISTENER_PER_TEST_HOLDER_KEY,
StorageRevisionListenerHolderImpl.class);
+ }
+
if (parameterContext.isAnnotated(InjectConfiguration.class)) {
Parameter parameter = parameterContext.getParameter();
- ConfigurationAsmGenerator cgen =
- extensionContext.getStore(NAMESPACE).get(CGEN_KEY,
ConfigurationAsmGenerator.class);
-
- StorageRevisionListenerHolderImpl revisionListenerHolder =
extensionContext.getStore(NAMESPACE)
- .get(REVISION_LISTENER_PER_TEST_HOLDER_KEY,
StorageRevisionListenerHolderImpl.class);
+ ConfigurationAsmGenerator cgen = store.get(CGEN_KEY,
ConfigurationAsmGenerator.class);
try {
- ExecutorService pool =
extensionContext.getStore(NAMESPACE).get(POOL_KEY, ExecutorService.class);
+ ExecutorService pool = store.get(POOL_KEY,
ExecutorService.class);
return cfgValue(parameter.getType(),
parameter.getAnnotation(InjectConfiguration.class), cgen, pool,
revisionListenerHolder);
@@ -226,12 +233,16 @@ public class ConfigurationExtension implements
BeforeEachCallback, AfterEachCall
);
}
} else if
(parameterContext.isAnnotated(InjectRevisionListenerHolder.class)) {
- return
extensionContext.getStore(NAMESPACE).get(REVISION_LISTENER_PER_TEST_HOLDER_KEY,
StorageRevisionListenerHolderImpl.class);
+ return revisionListenerHolder;
} else {
throw new ParameterResolutionException("Unknown parameter:" +
parameterContext.getParameter());
}
}
+ private static boolean isStaticExecutable(Executable executable) {
+ return isStatic(executable.getModifiers());
+ }
+
/**
* Instantiates a configuration instance for injection.
*