chia7712 commented on code in PR #15916:
URL: https://github.com/apache/kafka/pull/15916#discussion_r1603194691


##########
core/src/test/java/kafka/test/junit/ClusterTestExtensionsUnitTest.java:
##########
@@ -33,16 +31,16 @@ public class ClusterTestExtensionsUnitTest {
     void testProcessClusterTemplate() {

Review Comment:
   `@SuppressWarnings("unchecked")` is unused now



##########
core/src/test/java/kafka/test/junit/ClusterTestExtensions.java:
##########
@@ -94,59 +93,80 @@ public Stream<TestTemplateInvocationContext> 
provideTestTemplateInvocationContex
         // Process the @ClusterTemplate annotation
         ClusterTemplate clusterTemplateAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTemplate.class);
         if (clusterTemplateAnnot != null) {
-            processClusterTemplate(context, clusterTemplateAnnot, 
generatedContexts::add);
-            if (generatedContexts.isEmpty()) {
-                throw new IllegalStateException("ClusterConfig generator 
method should provide at least one config");
-            }
+            generatedContexts.addAll(processClusterTemplate(context, 
clusterTemplateAnnot));
         }
 
         // Process single @ClusterTest annotation
         ClusterTest clusterTestAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTest.class);
         if (clusterTestAnnot != null) {
-            processClusterTest(context, clusterTestAnnot, defaults, 
generatedContexts::add);
+            generatedContexts.addAll(processClusterTest(context, 
clusterTestAnnot, defaults));
         }
 
         // Process multiple @ClusterTest annotation within @ClusterTests
         ClusterTests clusterTestsAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTests.class);
         if (clusterTestsAnnot != null) {
-            for (ClusterTest annot : clusterTestsAnnot.value()) {
-                processClusterTest(context, annot, defaults, 
generatedContexts::add);
-            }
-        }
-
-        if (generatedContexts.isEmpty()) {
-            throw new IllegalStateException("Please annotate test methods with 
@ClusterTemplate, @ClusterTest, or " +
-                    "@ClusterTests when using the ClusterTestExtensions 
provider");
+            generatedContexts.addAll(processClusterTests(context, 
clusterTestsAnnot, defaults));
         }
 
         return generatedContexts.stream();
     }
 
-    void processClusterTemplate(ExtensionContext context, ClusterTemplate 
annot,

Review Comment:
   We can simplify the code by lambda. For example:
   ```java
       List<TestTemplateInvocationContext> 
processClusterTemplate(ExtensionContext context, ClusterTemplate annot) {
           if (annot.value().trim().isEmpty()) throw new 
IllegalStateException("ClusterTemplate value can't be empty string.");
           
           String baseDisplayName = context.getRequiredTestMethod().getName();
           
           List<TestTemplateInvocationContext> contexts = 
generateClusterConfigurations(context, annot.value())
               .stream().flatMap(config -> config.clusterTypes().stream()
               .map(type -> type.invocationContexts(baseDisplayName, 
config))).collect(Collectors.toList());
           
           if (contexts.isEmpty()) throw new 
IllegalStateException("ClusterConfig generator method should provide at least 
one config");
   
           return contexts;
       }
   ```



##########
core/src/test/java/kafka/test/ClusterTestExtensionsTest.java:
##########
@@ -62,14 +64,16 @@ public class ClusterTestExtensionsTest {
     }
 
     // Static methods can generate cluster configurations
-    static void generate1(ClusterGenerator clusterGenerator) {
+    static List<ClusterConfig> generate1() {
+        List<ClusterConfig> ret = new ArrayList<>();
         Map<String, String> serverProperties = new HashMap<>();
         serverProperties.put("foo", "bar");
-        clusterGenerator.accept(ClusterConfig.defaultBuilder()
+        ret.add(ClusterConfig.defaultBuilder()
                 .setTypes(Collections.singleton(Type.ZK))
                 .setServerProperties(serverProperties)
                 .setTags(Collections.singletonList("Generated Test"))
                 .build());
+        return ret;

Review Comment:
   `return Arrays.asList(classicGroupCoordinator, consumerGroupCoordinator);`



##########
core/src/test/java/kafka/test/junit/ClusterTestExtensions.java:
##########
@@ -94,59 +93,80 @@ public Stream<TestTemplateInvocationContext> 
provideTestTemplateInvocationContex
         // Process the @ClusterTemplate annotation
         ClusterTemplate clusterTemplateAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTemplate.class);
         if (clusterTemplateAnnot != null) {
-            processClusterTemplate(context, clusterTemplateAnnot, 
generatedContexts::add);
-            if (generatedContexts.isEmpty()) {
-                throw new IllegalStateException("ClusterConfig generator 
method should provide at least one config");
-            }
+            generatedContexts.addAll(processClusterTemplate(context, 
clusterTemplateAnnot));
         }
 
         // Process single @ClusterTest annotation
         ClusterTest clusterTestAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTest.class);
         if (clusterTestAnnot != null) {
-            processClusterTest(context, clusterTestAnnot, defaults, 
generatedContexts::add);
+            generatedContexts.addAll(processClusterTest(context, 
clusterTestAnnot, defaults));
         }
 
         // Process multiple @ClusterTest annotation within @ClusterTests
         ClusterTests clusterTestsAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTests.class);
         if (clusterTestsAnnot != null) {
-            for (ClusterTest annot : clusterTestsAnnot.value()) {
-                processClusterTest(context, annot, defaults, 
generatedContexts::add);
-            }
-        }
-
-        if (generatedContexts.isEmpty()) {
-            throw new IllegalStateException("Please annotate test methods with 
@ClusterTemplate, @ClusterTest, or " +
-                    "@ClusterTests when using the ClusterTestExtensions 
provider");
+            generatedContexts.addAll(processClusterTests(context, 
clusterTestsAnnot, defaults));
         }
 
         return generatedContexts.stream();
     }
 
-    void processClusterTemplate(ExtensionContext context, ClusterTemplate 
annot,
-                                        
Consumer<TestTemplateInvocationContext> testInvocations) {
+
+
+    List<TestTemplateInvocationContext> 
processClusterTemplate(ExtensionContext context, ClusterTemplate annot) {
         // If specified, call cluster config generated method (must be static)
         List<ClusterConfig> generatedClusterConfigs = new ArrayList<>();
+        List<TestTemplateInvocationContext> contexts = new ArrayList<>();
+
         if (annot.value().trim().isEmpty()) {
             throw new IllegalStateException("ClusterTemplate value can't be 
empty string.");
         }
-        generateClusterConfigurations(context, annot.value(), 
generatedClusterConfigs::add);
+        generatedClusterConfigs.addAll(generateClusterConfigurations(context, 
annot.value()));
 
         String baseDisplayName = context.getRequiredTestMethod().getName();
         generatedClusterConfigs.forEach(config -> {
             for (Type type: config.clusterTypes()) {
-                type.invocationContexts(baseDisplayName, config, 
testInvocations);
+                contexts.add(type.invocationContexts(baseDisplayName, config));
             }
         });
+
+        if (contexts.isEmpty()) {
+            throw new IllegalStateException("ClusterConfig generator method 
should provide at least one config");
+        }
+
+        return contexts;
     }
 
-    private void generateClusterConfigurations(ExtensionContext context, 
String generateClustersMethods, ClusterGenerator generator) {
+    private List<ClusterConfig> generateClusterConfigurations(ExtensionContext 
context, String generateClustersMethods) {
         Object testInstance = context.getTestInstance().orElse(null);
-        Method method = 
ReflectionUtils.getRequiredMethod(context.getRequiredTestClass(), 
generateClustersMethods, ClusterGenerator.class);
-        ReflectionUtils.invokeMethod(method, testInstance, generator);
+        Method method = 
ReflectionUtils.getRequiredMethod(context.getRequiredTestClass(), 
generateClustersMethods);
+        return (List<ClusterConfig>) ReflectionUtils.invokeMethod(method, 
testInstance);
+    }
+
+    private List<TestTemplateInvocationContext> 
processClusterTests(ExtensionContext context, ClusterTests annots, 
ClusterTestDefaults defaults) {

Review Comment:
   ditto
   ```java
       private List<TestTemplateInvocationContext> 
processClusterTests(ExtensionContext context, ClusterTests annots, 
ClusterTestDefaults defaults) {
           List<TestTemplateInvocationContext> ret = 
Arrays.stream(annots.value())
               .flatMap(annot -> processClusterTestInternal(context, annot, 
defaults).stream()).collect(Collectors.toList());
   
           if (ret.isEmpty()) throw new 
IllegalStateException("processClusterTests method should provide at least one 
config");
   
           return ret;
       }
   ```



##########
tools/src/test/java/org/apache/kafka/tools/consumer/group/DeleteConsumerGroupsTest.java:
##########
@@ -35,12 +36,7 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;

Review Comment:
   please don't use `*`. that is not allowed in kafka



##########
core/src/test/java/kafka/test/junit/ClusterTestExtensions.java:
##########
@@ -169,9 +189,12 @@ private void processClusterTest(ExtensionContext context, 
ClusterTest annot, Clu
                 .setMetadataVersion(annot.metadataVersion())
                 .setTags(Arrays.asList(annot.tags()))
                 .build();
+
+        List<TestTemplateInvocationContext> ret = new ArrayList<>();
         for (Type type : types) {
-            type.invocationContexts(context.getRequiredTestMethod().getName(), 
config, testInvocations);
+            
ret.add(type.invocationContexts(context.getRequiredTestMethod().getName(), 
config));
         }
+        return ret;

Review Comment:
   ditto
   
   ```java
           return Arrays.stream(types).map(type -> 
type.invocationContexts(context.getRequiredTestMethod().getName(), config))
               .collect(Collectors.toList());
   ```



##########
core/src/test/java/kafka/test/junit/ClusterTestExtensions.java:
##########
@@ -94,59 +93,80 @@ public Stream<TestTemplateInvocationContext> 
provideTestTemplateInvocationContex
         // Process the @ClusterTemplate annotation
         ClusterTemplate clusterTemplateAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTemplate.class);
         if (clusterTemplateAnnot != null) {
-            processClusterTemplate(context, clusterTemplateAnnot, 
generatedContexts::add);
-            if (generatedContexts.isEmpty()) {
-                throw new IllegalStateException("ClusterConfig generator 
method should provide at least one config");
-            }
+            generatedContexts.addAll(processClusterTemplate(context, 
clusterTemplateAnnot));
         }
 
         // Process single @ClusterTest annotation
         ClusterTest clusterTestAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTest.class);
         if (clusterTestAnnot != null) {
-            processClusterTest(context, clusterTestAnnot, defaults, 
generatedContexts::add);
+            generatedContexts.addAll(processClusterTest(context, 
clusterTestAnnot, defaults));
         }
 
         // Process multiple @ClusterTest annotation within @ClusterTests
         ClusterTests clusterTestsAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTests.class);
         if (clusterTestsAnnot != null) {
-            for (ClusterTest annot : clusterTestsAnnot.value()) {
-                processClusterTest(context, annot, defaults, 
generatedContexts::add);
-            }
-        }
-
-        if (generatedContexts.isEmpty()) {
-            throw new IllegalStateException("Please annotate test methods with 
@ClusterTemplate, @ClusterTest, or " +
-                    "@ClusterTests when using the ClusterTestExtensions 
provider");
+            generatedContexts.addAll(processClusterTests(context, 
clusterTestsAnnot, defaults));
         }
 
         return generatedContexts.stream();

Review Comment:
   Could you add a final check for `generatedContexts`? it should not be empty



##########
core/src/test/java/kafka/test/junit/ClusterTestExtensions.java:
##########
@@ -94,59 +93,80 @@ public Stream<TestTemplateInvocationContext> 
provideTestTemplateInvocationContex
         // Process the @ClusterTemplate annotation
         ClusterTemplate clusterTemplateAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTemplate.class);
         if (clusterTemplateAnnot != null) {
-            processClusterTemplate(context, clusterTemplateAnnot, 
generatedContexts::add);
-            if (generatedContexts.isEmpty()) {
-                throw new IllegalStateException("ClusterConfig generator 
method should provide at least one config");
-            }
+            generatedContexts.addAll(processClusterTemplate(context, 
clusterTemplateAnnot));
         }
 
         // Process single @ClusterTest annotation
         ClusterTest clusterTestAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTest.class);
         if (clusterTestAnnot != null) {
-            processClusterTest(context, clusterTestAnnot, defaults, 
generatedContexts::add);
+            generatedContexts.addAll(processClusterTest(context, 
clusterTestAnnot, defaults));
         }
 
         // Process multiple @ClusterTest annotation within @ClusterTests
         ClusterTests clusterTestsAnnot = 
context.getRequiredTestMethod().getDeclaredAnnotation(ClusterTests.class);
         if (clusterTestsAnnot != null) {
-            for (ClusterTest annot : clusterTestsAnnot.value()) {
-                processClusterTest(context, annot, defaults, 
generatedContexts::add);
-            }
-        }
-
-        if (generatedContexts.isEmpty()) {
-            throw new IllegalStateException("Please annotate test methods with 
@ClusterTemplate, @ClusterTest, or " +
-                    "@ClusterTests when using the ClusterTestExtensions 
provider");
+            generatedContexts.addAll(processClusterTests(context, 
clusterTestsAnnot, defaults));
         }
 
         return generatedContexts.stream();
     }
 
-    void processClusterTemplate(ExtensionContext context, ClusterTemplate 
annot,
-                                        
Consumer<TestTemplateInvocationContext> testInvocations) {
+
+
+    List<TestTemplateInvocationContext> 
processClusterTemplate(ExtensionContext context, ClusterTemplate annot) {
         // If specified, call cluster config generated method (must be static)
         List<ClusterConfig> generatedClusterConfigs = new ArrayList<>();
+        List<TestTemplateInvocationContext> contexts = new ArrayList<>();
+
         if (annot.value().trim().isEmpty()) {
             throw new IllegalStateException("ClusterTemplate value can't be 
empty string.");
         }
-        generateClusterConfigurations(context, annot.value(), 
generatedClusterConfigs::add);
+        generatedClusterConfigs.addAll(generateClusterConfigurations(context, 
annot.value()));
 
         String baseDisplayName = context.getRequiredTestMethod().getName();
         generatedClusterConfigs.forEach(config -> {
             for (Type type: config.clusterTypes()) {
-                type.invocationContexts(baseDisplayName, config, 
testInvocations);
+                contexts.add(type.invocationContexts(baseDisplayName, config));
             }
         });
+
+        if (contexts.isEmpty()) {
+            throw new IllegalStateException("ClusterConfig generator method 
should provide at least one config");
+        }
+
+        return contexts;
     }
 
-    private void generateClusterConfigurations(ExtensionContext context, 
String generateClustersMethods, ClusterGenerator generator) {

Review Comment:
   please add `@SuppressWarnings("unchecked")`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to