adixitconfluent commented on code in PR #18864: URL: https://github.com/apache/kafka/pull/18864#discussion_r1967077487
########## group-coordinator/src/test/java/org/apache/kafka/coordinator/group/assignor/SimpleAssignorTest.java: ########## @@ -320,12 +365,377 @@ public void testAssignWithOneMemberNoAssignedTopicHeterogeneous() { Map<String, Map<Uuid, Set<Integer>>> expectedAssignment = new HashMap<>(); expectedAssignment.put(MEMBER_A, mkAssignment( mkTopicAssignment(TOPIC_1_UUID, 0, 1, 2), - mkTopicAssignment(TOPIC_2_UUID, 0, 1) - )); + mkTopicAssignment(TOPIC_2_UUID, 0, 1))); + expectedAssignment.put(MEMBER_B, mkAssignment()); + // T1: 3 partitions + T2: 2 partitions = 5 partitions + assertEveryPartitionGetsAssignment(5, computedAssignment); assertAssignment(expectedAssignment, computedAssignment); } + @Test + public void testMemberHashAssignment() { + // hashcode for "member1" is 948881623. + String member1 = "member1"; + // hashcode for "member2" is 948881624. + String member2 = "member2"; + // hashcode for "member3" is 948881625. + String member3 = "member3"; + // hashcode for "member4" is 948881626. + String member4 = "member4"; + // hashcode for "AaAaAaAa" is -540425984 to test with negative hashcode. + String member5 = "AaAaAaAa"; + List<String> members = Arrays.asList(member1, member2, member3, member4, member5); + + TopicIdPartition partition1 = new TopicIdPartition(TOPIC_1_UUID, 0); + TopicIdPartition partition2 = new TopicIdPartition(TOPIC_2_UUID, 0); + TopicIdPartition partition3 = new TopicIdPartition(TOPIC_3_UUID, 0); + List<TopicIdPartition> partitions = Arrays.asList(partition1, partition2, partition3); + + Map<TopicIdPartition, List<String>> computedAssignment = new HashMap<>(); + assignor.memberHashAssignment(partitions, members, computedAssignment); + + Map<TopicIdPartition, List<String>> expectedAssignment = new HashMap<>(); + expectedAssignment.put(partition1, List.of(member3)); + expectedAssignment.put(partition2, Arrays.asList(member1, member4)); + expectedAssignment.put(partition3, Arrays.asList(member2, member5)); + assertAssignment(expectedAssignment, computedAssignment); + } + + @Test + public void testRoundRobinAssignment() { + String member1 = "member1"; + String member2 = "member2"; + List<String> members = Arrays.asList(member1, member2); + TopicIdPartition partition1 = new TopicIdPartition(TOPIC_1_UUID, 0); + TopicIdPartition partition2 = new TopicIdPartition(TOPIC_2_UUID, 0); + TopicIdPartition partition3 = new TopicIdPartition(TOPIC_3_UUID, 0); + TopicIdPartition partition4 = new TopicIdPartition(TOPIC_4_UUID, 0); + List<TopicIdPartition> unassignedPartitions = Arrays.asList(partition2, partition3, partition4); + + Map<TopicIdPartition, List<String>> assignment = new HashMap<>(); + assignment.put(partition1, List.of(member1)); + + assignor.roundRobinAssignment(members, unassignedPartitions, assignment); + Map<TopicIdPartition, List<String>> expectedAssignment = new HashMap<>(); + expectedAssignment.put(partition1, List.of(member1)); + expectedAssignment.put(partition2, List.of(member1)); + expectedAssignment.put(partition3, List.of(member2)); + expectedAssignment.put(partition4, List.of(member1)); + + assertAssignment(expectedAssignment, assignment); + } + + @Test + public void testAssignWithCurrentAssignmentHomogeneous() { + // Current assignment setup - Two members A, B subscribing to T1 and T2. + Map<Uuid, TopicMetadata> topicMetadata1 = new HashMap<>(); + topicMetadata1.put(TOPIC_1_UUID, new TopicMetadata( + TOPIC_1_UUID, + TOPIC_1_NAME, + 3 + )); + topicMetadata1.put(TOPIC_2_UUID, new TopicMetadata( + TOPIC_2_UUID, + TOPIC_2_NAME, + 2 + )); + + Map<String, MemberSubscriptionAndAssignmentImpl> members1 = new TreeMap<>(); Review Comment: actually we don't need to consider order here. I have just used a `HashMap` here and at other places in the code. -- 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: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org