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 <alex.polovt...@gmail.com> 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. *