jeffkbkim commented on code in PR #18832:
URL: https://github.com/apache/kafka/pull/18832#discussion_r1946794473


##########
group-coordinator/src/test/java/org/apache/kafka/coordinator/group/GroupCoordinatorConfigTest.java:
##########
@@ -16,47 +16,118 @@
  */
 package org.apache.kafka.coordinator.group;
 
+import org.apache.kafka.common.Configurable;
 import org.apache.kafka.common.KafkaException;
 import org.apache.kafka.common.config.AbstractConfig;
 import org.apache.kafka.common.config.ConfigDef;
 import org.apache.kafka.common.config.ConfigException;
 import org.apache.kafka.common.record.CompressionType;
 import org.apache.kafka.common.utils.Utils;
+import 
org.apache.kafka.coordinator.group.api.assignor.ConsumerGroupPartitionAssignor;
+import org.apache.kafka.coordinator.group.api.assignor.GroupAssignment;
+import org.apache.kafka.coordinator.group.api.assignor.GroupSpec;
+import 
org.apache.kafka.coordinator.group.api.assignor.PartitionAssignorException;
+import 
org.apache.kafka.coordinator.group.api.assignor.SubscribedTopicDescriber;
 import org.apache.kafka.coordinator.group.assignor.RangeAssignor;
+import org.apache.kafka.coordinator.group.assignor.UniformAssignor;
 
 import org.junit.jupiter.api.Test;
 
 import java.time.Duration;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class GroupCoordinatorConfigTest {
-    private static final List<ConfigDef> GROUP_COORDINATOR_CONFIG_DEFS = 
Arrays.asList(
-            GroupCoordinatorConfig.GROUP_COORDINATOR_CONFIG_DEF,
-            GroupCoordinatorConfig.NEW_GROUP_CONFIG_DEF,
-            GroupCoordinatorConfig.OFFSET_MANAGEMENT_CONFIG_DEF,
-            GroupCoordinatorConfig.CONSUMER_GROUP_CONFIG_DEF,
-            GroupCoordinatorConfig.SHARE_GROUP_CONFIG_DEF);
+    private static final List<ConfigDef> GROUP_COORDINATOR_CONFIG_DEFS = 
List.of(
+        GroupCoordinatorConfig.GROUP_COORDINATOR_CONFIG_DEF,
+        GroupCoordinatorConfig.NEW_GROUP_CONFIG_DEF,
+        GroupCoordinatorConfig.OFFSET_MANAGEMENT_CONFIG_DEF,
+        GroupCoordinatorConfig.CONSUMER_GROUP_CONFIG_DEF,
+        GroupCoordinatorConfig.SHARE_GROUP_CONFIG_DEF
+    );
+
+    public static class CustomAssignor implements 
ConsumerGroupPartitionAssignor, Configurable {
+        public Map<String, ?> configs;
+
+        @Override
+        public void configure(Map<String, ?> configs) {
+            this.configs = configs;
+        }
+
+        @Override
+        public String name() {
+            return "CustomAssignor";
+        }
+
+        @Override
+        public GroupAssignment assign(
+            GroupSpec groupSpec,
+            SubscribedTopicDescriber subscribedTopicDescriber
+        ) throws PartitionAssignorException {
+            return null;
+        }
+    }
 
     @Test
-    public void testConsumerGroupAssignorsDefault() {
+    public void testConsumerGroupAssignorFullClassNames() {
         // The full class name of the assignors is part of our public api. 
Hence,
         // we should ensure that they are not changed by mistake.
         assertEquals(
-            List.of(
-                "org.apache.kafka.coordinator.group.assignor.UniformAssignor",
-                "org.apache.kafka.coordinator.group.assignor.RangeAssignor"
-            ),
-            GroupCoordinatorConfig.CONSUMER_GROUP_ASSIGNORS_DEFAULT
+            "org.apache.kafka.coordinator.group.assignor.UniformAssignor",
+            UniformAssignor.class.getName()
+        );
+        assertEquals(
+            "org.apache.kafka.coordinator.group.assignor.RangeAssignor",
+            RangeAssignor.class.getName()
         );
     }
 
+    @Test
+    public void testConsumerGroupAssignors() {
+        Map<String, Object> configs = new HashMap<>();
+        GroupCoordinatorConfig config;
+        List<ConsumerGroupPartitionAssignor> assignors;
+
+        // Test short names.
+        configs.put(GroupCoordinatorConfig.CONSUMER_GROUP_ASSIGNORS_CONFIG, 
"range, uniform");
+        config = createConfig(configs);
+        assignors = config.consumerGroupAssignors();
+        assertEquals(2, assignors.size());
+        assertTrue(assignors.get(0) instanceof RangeAssignor);
+        assertTrue(assignors.get(1) instanceof UniformAssignor);
+
+        // Test custom assignor.
+        configs.put(GroupCoordinatorConfig.CONSUMER_GROUP_ASSIGNORS_CONFIG, 
CustomAssignor.class.getName());
+        config = createConfig(configs);
+        assignors = config.consumerGroupAssignors();
+        assertEquals(1, assignors.size());
+        assertTrue(assignors.get(0) instanceof CustomAssignor);
+        assertNotNull(((CustomAssignor) assignors.get(0)).configs);
+
+        // Test with classes.
+        configs.put(GroupCoordinatorConfig.CONSUMER_GROUP_ASSIGNORS_CONFIG, 
List.of(RangeAssignor.class, CustomAssignor.class));

Review Comment:
   Should we add test case for a mix of both? something like
   
   List.of("range", CustomAssignor.class)
   
   for completeness, can we add simple failure scenarios as well



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