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.
      *

Reply via email to