MINOR: Ensure that DisplayName is set in all parameterized tests (#14850)

This is a follow-up to https://github.com/apache/kafka/pull/14687 as we found out that some parameterized tests do not include the test method name in their name. For the context, the JUnit XML report does not include the name of the method by default but only rely on the display name provided.

Reviewers: David Arthur <mumrah@gmail.com>
This commit is contained in:
David Jacot 2023-12-05 08:58:48 +01:00 committed by GitHub
parent b46505c8de
commit 26274afd05
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 22 deletions

View File

@ -30,36 +30,36 @@ import java.util.function.Consumer;
public enum Type {
KRAFT {
@Override
public void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(config.copyOf(), false));
public void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(baseDisplayName, config.copyOf(), false));
}
},
CO_KRAFT {
@Override
public void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(config.copyOf(), true));
public void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(baseDisplayName, config.copyOf(), true));
}
},
ZK {
@Override
public void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new ZkClusterInvocationContext(config.copyOf()));
public void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new ZkClusterInvocationContext(baseDisplayName, config.copyOf()));
}
},
ALL {
@Override
public void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(config.copyOf(), false));
invocationConsumer.accept(new RaftClusterInvocationContext(config.copyOf(), true));
invocationConsumer.accept(new ZkClusterInvocationContext(config.copyOf()));
public void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
invocationConsumer.accept(new RaftClusterInvocationContext(baseDisplayName, config.copyOf(), false));
invocationConsumer.accept(new RaftClusterInvocationContext(baseDisplayName, config.copyOf(), true));
invocationConsumer.accept(new ZkClusterInvocationContext(baseDisplayName, config.copyOf()));
}
},
DEFAULT {
@Override
public void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
public void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer) {
throw new UnsupportedOperationException("Cannot create invocation contexts for DEFAULT type");
}
};
public abstract void invocationContexts(ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer);
public abstract void invocationContexts(String baseDisplayName, ClusterConfig config, Consumer<TestTemplateInvocationContext> invocationConsumer);
}

View File

@ -128,7 +128,8 @@ public class ClusterTestExtensions implements TestTemplateInvocationContextProvi
generatedClusterConfigs.add(ClusterConfig.defaultClusterBuilder().build());
}
generatedClusterConfigs.forEach(config -> config.clusterType().invocationContexts(config, testInvocations));
String baseDisplayName = context.getRequiredTestMethod().getName();
generatedClusterConfigs.forEach(config -> config.clusterType().invocationContexts(baseDisplayName, config, testInvocations));
}
private void generateClusterConfigurations(ExtensionContext context, String generateClustersMethods, ClusterGenerator generator) {
@ -183,8 +184,6 @@ public class ClusterTestExtensions implements TestTemplateInvocationContextProvi
annot.securityProtocol(), annot.metadataVersion());
if (!annot.name().isEmpty()) {
builder.name(annot.name());
} else {
builder.name(context.getRequiredTestMethod().getName());
}
if (!annot.listener().isEmpty()) {
builder.listenerName(annot.listener());
@ -197,7 +196,7 @@ public class ClusterTestExtensions implements TestTemplateInvocationContextProvi
ClusterConfig config = builder.build();
config.serverProperties().putAll(properties);
type.invocationContexts(config, testInvocations);
type.invocationContexts(context.getRequiredTestMethod().getName(), config, testInvocations);
}
private ClusterTestDefaults getClusterTestDefaults(Class<?> testClass) {

View File

@ -64,12 +64,14 @@ import java.util.stream.Stream;
*/
public class RaftClusterInvocationContext implements TestTemplateInvocationContext {
private final String baseDisplayName;
private final ClusterConfig clusterConfig;
private final AtomicReference<KafkaClusterTestKit> clusterReference;
private final AtomicReference<EmbeddedZookeeper> zkReference;
private final boolean isCombined;
public RaftClusterInvocationContext(ClusterConfig clusterConfig, boolean isCombined) {
public RaftClusterInvocationContext(String baseDisplayName, ClusterConfig clusterConfig, boolean isCombined) {
this.baseDisplayName = baseDisplayName;
this.clusterConfig = clusterConfig;
this.clusterReference = new AtomicReference<>();
this.zkReference = new AtomicReference<>();
@ -81,7 +83,7 @@ public class RaftClusterInvocationContext implements TestTemplateInvocationConte
String clusterDesc = clusterConfig.nameTags().entrySet().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
return String.format("[%d] Type=Raft-%s, %s", invocationIndex, isCombined ? "Combined" : "Isolated", clusterDesc);
return String.format("%s [%d] Type=Raft-%s, %s", baseDisplayName, invocationIndex, isCombined ? "Combined" : "Isolated", clusterDesc);
}
@Override

View File

@ -66,10 +66,12 @@ import java.util.stream.Stream;
*/
public class ZkClusterInvocationContext implements TestTemplateInvocationContext {
private final String baseDisplayName;
private final ClusterConfig clusterConfig;
private final AtomicReference<IntegrationTestHarness> clusterReference;
public ZkClusterInvocationContext(ClusterConfig clusterConfig) {
public ZkClusterInvocationContext(String baseDisplayName, ClusterConfig clusterConfig) {
this.baseDisplayName = baseDisplayName;
this.clusterConfig = clusterConfig;
this.clusterReference = new AtomicReference<>();
}
@ -79,7 +81,7 @@ public class ZkClusterInvocationContext implements TestTemplateInvocationContext
String clusterDesc = clusterConfig.nameTags().entrySet().stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
return String.format("[%d] Type=ZK, %s", invocationIndex, clusterDesc);
return String.format("%s [%d] Type=ZK, %s", baseDisplayName, invocationIndex, clusterDesc);
}
@Override

View File

@ -52,7 +52,7 @@ object TestInfoUtils {
testInfo.getDisplayName().contains("quorum=zkMigration")
}
}
final val TestWithParameterizedQuorumName = "{displayName}.quorum={0}"
final val TestWithParameterizedQuorumName = "{displayName}.{argumentsWithNames}"
final val TestWithParameterizedQuorumAndGroupProtocolNames = "{displayName}.quorum={0}.groupProtocol={1}"

View File

@ -42,7 +42,7 @@ import java.util.stream.Collectors;
public class ToolsTestUtils {
/** @see TestInfoUtils#TestWithParameterizedQuorumName() */
public static final String TEST_WITH_PARAMETERIZED_QUORUM_NAME = "{displayName}.quorum={0}";
public static final String TEST_WITH_PARAMETERIZED_QUORUM_NAME = "{displayName}.{argumentsWithNames}";
private static int randomPort = 0;