mirror of https://github.com/apache/kafka.git
MINOR: Cleanup TestPlugins and normalize TestPlugin enum (#13333)
Signed-off-by: Greg Harris <greg.harris@aiven.io> Reviewers: Chris Egerton <chrise@aiven.io>
This commit is contained in:
parent
ae192bdd41
commit
4550550c7c
|
@ -17,7 +17,6 @@
|
|||
|
||||
package org.apache.kafka.connect.runtime.isolation;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
@ -49,12 +48,6 @@ public class PluginScannerTest {
|
|||
return Stream.of(new ReflectionScanner(), new ServiceLoaderScanner());
|
||||
}
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
// Work around a circular-dependency in TestPlugins.
|
||||
TestPlugins.pluginPath();
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("parameters")
|
||||
public void testScanningEmptyPluginPath(PluginScanner scanner) {
|
||||
|
|
|
@ -34,7 +34,7 @@ import java.nio.file.Paths;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
@ -45,6 +45,7 @@ import java.util.jar.JarEntry;
|
|||
import java.util.jar.JarOutputStream;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.tools.JavaCompiler;
|
||||
import javax.tools.StandardJavaFileManager;
|
||||
|
@ -66,161 +67,35 @@ import javax.tools.ToolProvider;
|
|||
* and reference the names of the different plugins directly via the {@link TestPlugin} enum.
|
||||
*/
|
||||
public class TestPlugins {
|
||||
private static final Predicate<String> REMOVE_CLASS_FILTER = s -> s.contains("NonExistentInterface");
|
||||
public enum TestPlugin {
|
||||
/**
|
||||
* A plugin which will always throw an exception during loading
|
||||
*/
|
||||
ALWAYS_THROW_EXCEPTION("always-throw-exception", "test.plugins.AlwaysThrowException", false),
|
||||
/**
|
||||
* A plugin which samples information about its initialization.
|
||||
*/
|
||||
ALIASED_STATIC_FIELD("aliased-static-field", "test.plugins.AliasedStaticField"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.storage.Converter}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONVERTER("sampling-converter", "test.plugins.SamplingConverter"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.common.Configurable}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONFIGURABLE("sampling-configurable", "test.plugins.SamplingConfigurable"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.storage.HeaderConverter}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_HEADER_CONVERTER("sampling-header-converter", "test.plugins.SamplingHeaderConverter"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.common.config.provider.ConfigProvider}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONFIG_PROVIDER("sampling-config-provider", "test.plugins.SamplingConfigProvider"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.sink.SinkConnector}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONNECTOR("sampling-connector", "test.plugins.SamplingConnector"),
|
||||
/**
|
||||
* A plugin which uses a {@link java.util.ServiceLoader}
|
||||
* to load internal classes, and samples information about their initialization.
|
||||
*/
|
||||
SERVICE_LOADER("service-loader", "test.plugins.ServiceLoaderPlugin"),
|
||||
/**
|
||||
* A plugin which reads a version string from a resource and packages the version string 1.0.0.
|
||||
*/
|
||||
READ_VERSION_FROM_RESOURCE_V1("read-version-from-resource-v1", "test.plugins.ReadVersionFromResource"),
|
||||
/**
|
||||
* A plugin which reads a version string from a resource and packages the version string 2.0.0.
|
||||
* This plugin is not included in {@link TestPlugins#pluginPath()} and must be included explicitly
|
||||
*/
|
||||
READ_VERSION_FROM_RESOURCE_V2("read-version-from-resource-v2", "test.plugins.ReadVersionFromResource", false),
|
||||
/**
|
||||
* A plugin which shares a jar file with {@link TestPlugin#MULTIPLE_PLUGINS_IN_JAR_THING_TWO}
|
||||
*/
|
||||
MULTIPLE_PLUGINS_IN_JAR_THING_ONE("multiple-plugins-in-jar", "test.plugins.ThingOne"),
|
||||
/**
|
||||
* A plugin which shares a jar file with {@link TestPlugin#MULTIPLE_PLUGINS_IN_JAR_THING_ONE}
|
||||
*/
|
||||
MULTIPLE_PLUGINS_IN_JAR_THING_TWO("multiple-plugins-in-jar", "test.plugins.ThingTwo"),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, and is missing a superclass definition.
|
||||
*/
|
||||
BAD_PACKAGING_MISSING_SUPERCLASS("bad-packaging", "test.plugins.MissingSuperclassConverter", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is packaged with other incorrectly packaged plugins, but itself has no issues loading.
|
||||
*/
|
||||
BAD_PACKAGING_CO_LOCATED("bad-packaging", "test.plugins.CoLocatedPlugin", true, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A connector which is incorrectly packaged, and throws during static initialization.
|
||||
*/
|
||||
BAD_PACKAGING_STATIC_INITIALIZER_THROWS_CONNECTOR("bad-packaging", "test.plugins.StaticInitializerThrowsConnector", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_VERSION_METHOD_THROWS_CONNECTOR("bad-packaging", "test.plugins.VersionMethodThrowsConnector", true, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from default constructor.
|
||||
*/
|
||||
BAD_PACKAGING_DEFAULT_CONSTRUCTOR_THROWS_CONNECTOR("bad-packaging", "test.plugins.DefaultConstructorThrowsConnector", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a private default constructor.
|
||||
*/
|
||||
BAD_PACKAGING_DEFAULT_CONSTRUCTOR_PRIVATE_CONNECTOR("bad-packaging", "test.plugins.DefaultConstructorPrivateConnector", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a constructor which takes arguments.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_CONNECTOR("bad-packaging", "test.plugins.NoDefaultConstructorConnector", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a constructor which takes arguments.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_CONVERTER("bad-packaging", "test.plugins.NoDefaultConstructorConverter", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a constructor which takes arguments.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_OVERRIDE_POLICY("bad-packaging", "test.plugins.NoDefaultConstructorOverridePolicy", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_INNER_CLASS_CONNECTOR("bad-packaging", "test.plugins.OuterClass$InnerClass", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_STATIC_INITIALIZER_THROWS_REST_EXTENSION("bad-packaging", "test.plugins.StaticInitializerThrowsRestExtension", false, REMOVE_CLASS_FILTER),
|
||||
/**
|
||||
* A reflectively discovered plugin which subclasses another plugin which is present on the classpath
|
||||
*/
|
||||
SUBCLASS_OF_CLASSPATH_CONVERTER("subclass-of-classpath", "test.plugins.SubclassOfClasspathConverter"),
|
||||
/**
|
||||
* A ServiceLoader discovered plugin which subclasses another plugin which is present on the classpath
|
||||
*/
|
||||
SUBCLASS_OF_CLASSPATH_OVERRIDE_POLICY("subclass-of-classpath", "test.plugins.SubclassOfClasspathOverridePolicy"),
|
||||
/**
|
||||
* A converter which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_CONVERTER("non-migrated", "test.plugins.NonMigratedConverter", false),
|
||||
/**
|
||||
* A header converter which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_HEADER_CONVERTER("non-migrated", "test.plugins.NonMigratedHeaderConverter", false),
|
||||
/**
|
||||
* A plugin which implements multiple interfaces, and has ServiceLoader manifests for some interfaces and not others.
|
||||
*/
|
||||
NON_MIGRATED_MULTI_PLUGIN("non-migrated", "test.plugins.NonMigratedMultiPlugin", false),
|
||||
/**
|
||||
* A predicate which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_PREDICATE("non-migrated", "test.plugins.NonMigratedPredicate", false),
|
||||
/**
|
||||
* A sink connector which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_SINK_CONNECTOR("non-migrated", "test.plugins.NonMigratedSinkConnector", false),
|
||||
/**
|
||||
* A source connector which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_SOURCE_CONNECTOR("non-migrated", "test.plugins.NonMigratedSourceConnector", false),
|
||||
/**
|
||||
* A transformation which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_TRANSFORMATION("non-migrated", "test.plugins.NonMigratedTransformation", false);
|
||||
|
||||
/**
|
||||
* Unit of compilation and distribution, containing zero or more plugin classes.
|
||||
*/
|
||||
public enum TestPackage {
|
||||
ALIASED_STATIC_FIELD("aliased-static-field"),
|
||||
ALWAYS_THROW_EXCEPTION("always-throw-exception"),
|
||||
BAD_PACKAGING("bad-packaging", s -> s.contains("NonExistentInterface")),
|
||||
MULTIPLE_PLUGINS_IN_JAR("multiple-plugins-in-jar"),
|
||||
NON_MIGRATED("non-migrated"),
|
||||
READ_VERSION_FROM_RESOURCE_V1("read-version-from-resource-v1"),
|
||||
READ_VERSION_FROM_RESOURCE_V2("read-version-from-resource-v2"),
|
||||
SAMPLING_CONFIGURABLE("sampling-configurable"),
|
||||
SAMPLING_CONFIG_PROVIDER("sampling-config-provider"),
|
||||
SAMPLING_CONNECTOR("sampling-connector"),
|
||||
SAMPLING_CONVERTER("sampling-converter"),
|
||||
SAMPLING_HEADER_CONVERTER("sampling-header-converter"),
|
||||
SERVICE_LOADER("service-loader"),
|
||||
SUBCLASS_OF_CLASSPATH("subclass-of-classpath");
|
||||
|
||||
private final String resourceDir;
|
||||
private final String className;
|
||||
private final boolean includeByDefault;
|
||||
private final Predicate<String> removeRuntimeClasses;
|
||||
|
||||
TestPlugin(String resourceDir, String className) {
|
||||
this(resourceDir, className, true);
|
||||
TestPackage(String resourceDir) {
|
||||
this(resourceDir, ignored -> false);
|
||||
}
|
||||
|
||||
TestPlugin(String resourceDir, String className, boolean includeByDefault) {
|
||||
this(resourceDir, className, includeByDefault, ignored -> false);
|
||||
}
|
||||
|
||||
TestPlugin(String resourceDir, String className, boolean includeByDefault, Predicate<String> removeRuntimeClasses) {
|
||||
TestPackage(String resourceDir, Predicate<String> removeRuntimeClasses) {
|
||||
this.resourceDir = resourceDir;
|
||||
this.className = className;
|
||||
this.includeByDefault = includeByDefault;
|
||||
this.removeRuntimeClasses = removeRuntimeClasses;
|
||||
}
|
||||
|
||||
|
@ -228,6 +103,166 @@ public class TestPlugins {
|
|||
return resourceDir;
|
||||
}
|
||||
|
||||
public Predicate<String> removeRuntimeClasses() {
|
||||
return removeRuntimeClasses;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TestPlugin {
|
||||
/**
|
||||
* A plugin which samples information about its initialization.
|
||||
*/
|
||||
ALIASED_STATIC_FIELD(TestPackage.ALIASED_STATIC_FIELD, "test.plugins.AliasedStaticField"),
|
||||
/**
|
||||
* A plugin which will always throw an exception during loading
|
||||
*/
|
||||
ALWAYS_THROW_EXCEPTION(TestPackage.ALWAYS_THROW_EXCEPTION, "test.plugins.AlwaysThrowException", false),
|
||||
/**
|
||||
* A plugin which is packaged with other incorrectly packaged plugins, but itself has no issues loading.
|
||||
*/
|
||||
BAD_PACKAGING_CO_LOCATED(TestPackage.BAD_PACKAGING, "test.plugins.CoLocatedPlugin", true),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a private default constructor.
|
||||
*/
|
||||
BAD_PACKAGING_DEFAULT_CONSTRUCTOR_PRIVATE_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.DefaultConstructorPrivateConnector", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from default constructor.
|
||||
*/
|
||||
BAD_PACKAGING_DEFAULT_CONSTRUCTOR_THROWS_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.DefaultConstructorThrowsConnector", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_INNER_CLASS_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.OuterClass$InnerClass", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, and is missing a superclass definition.
|
||||
*/
|
||||
BAD_PACKAGING_MISSING_SUPERCLASS(TestPackage.BAD_PACKAGING, "test.plugins.MissingSuperclassConverter", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a private default constructor.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.NoDefaultConstructorConnector", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a constructor which takes arguments.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_CONVERTER(TestPackage.BAD_PACKAGING, "test.plugins.NoDefaultConstructorConverter", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which has a constructor which takes arguments.
|
||||
*/
|
||||
BAD_PACKAGING_NO_DEFAULT_CONSTRUCTOR_OVERRIDE_POLICY(TestPackage.BAD_PACKAGING, "test.plugins.NoDefaultConstructorOverridePolicy", false),
|
||||
/**
|
||||
* A connector which is incorrectly packaged, and throws during static initialization.
|
||||
*/
|
||||
BAD_PACKAGING_STATIC_INITIALIZER_THROWS_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.StaticInitializerThrowsConnector", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_STATIC_INITIALIZER_THROWS_REST_EXTENSION(TestPackage.BAD_PACKAGING, "test.plugins.StaticInitializerThrowsRestExtension", false),
|
||||
/**
|
||||
* A plugin which is incorrectly packaged, which throws an exception from the {@link Versioned#version()} method.
|
||||
*/
|
||||
BAD_PACKAGING_VERSION_METHOD_THROWS_CONNECTOR(TestPackage.BAD_PACKAGING, "test.plugins.VersionMethodThrowsConnector", true),
|
||||
/**
|
||||
* A plugin which shares a jar file with {@link TestPlugin#MULTIPLE_PLUGINS_IN_JAR_THING_TWO}
|
||||
*/
|
||||
MULTIPLE_PLUGINS_IN_JAR_THING_ONE(TestPackage.MULTIPLE_PLUGINS_IN_JAR, "test.plugins.ThingOne"),
|
||||
/**
|
||||
* A plugin which shares a jar file with {@link TestPlugin#MULTIPLE_PLUGINS_IN_JAR_THING_ONE}
|
||||
*/
|
||||
MULTIPLE_PLUGINS_IN_JAR_THING_TWO(TestPackage.MULTIPLE_PLUGINS_IN_JAR, "test.plugins.ThingTwo"),
|
||||
/**
|
||||
* A converter which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_CONVERTER(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedConverter", false),
|
||||
/**
|
||||
* A header converter which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_HEADER_CONVERTER(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedHeaderConverter", false),
|
||||
/**
|
||||
* A plugin which implements multiple interfaces, and has ServiceLoader manifests for some interfaces and not others.
|
||||
*/
|
||||
NON_MIGRATED_MULTI_PLUGIN(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedMultiPlugin", false),
|
||||
/**
|
||||
* A predicate which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_PREDICATE(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedPredicate", false),
|
||||
/**
|
||||
* A sink connector which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_SINK_CONNECTOR(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedSinkConnector", false),
|
||||
/**
|
||||
* A source connector which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_SOURCE_CONNECTOR(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedSourceConnector", false),
|
||||
/**
|
||||
* A transformation which does not have a corresponding ServiceLoader manifest
|
||||
*/
|
||||
NON_MIGRATED_TRANSFORMATION(TestPackage.NON_MIGRATED, "test.plugins.NonMigratedTransformation", false),
|
||||
/**
|
||||
* A plugin which reads a version string from a resource and packages the version string 1.0.0.
|
||||
*/
|
||||
READ_VERSION_FROM_RESOURCE_V1(TestPackage.READ_VERSION_FROM_RESOURCE_V1, "test.plugins.ReadVersionFromResource"),
|
||||
/**
|
||||
* A plugin which reads a version string from a resource and packages the version string 2.0.0.
|
||||
* This plugin is not included in {@link TestPlugins#pluginPath()} and must be included explicitly
|
||||
*/
|
||||
READ_VERSION_FROM_RESOURCE_V2(TestPackage.READ_VERSION_FROM_RESOURCE_V2, "test.plugins.ReadVersionFromResource", false),
|
||||
/**
|
||||
* A {@link org.apache.kafka.common.Configurable}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONFIGURABLE(TestPackage.SAMPLING_CONFIGURABLE, "test.plugins.SamplingConfigurable"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.common.config.provider.ConfigProvider}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONFIG_PROVIDER(TestPackage.SAMPLING_CONFIG_PROVIDER, "test.plugins.SamplingConfigProvider"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.sink.SinkConnector}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONNECTOR(TestPackage.SAMPLING_CONNECTOR, "test.plugins.SamplingConnector"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.storage.Converter}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_CONVERTER(TestPackage.SAMPLING_CONVERTER, "test.plugins.SamplingConverter"),
|
||||
/**
|
||||
* A {@link org.apache.kafka.connect.storage.HeaderConverter}
|
||||
* which samples information about its method calls.
|
||||
*/
|
||||
SAMPLING_HEADER_CONVERTER(TestPackage.SAMPLING_HEADER_CONVERTER, "test.plugins.SamplingHeaderConverter"),
|
||||
/**
|
||||
* A plugin which uses a {@link java.util.ServiceLoader}
|
||||
* to load internal classes, and samples information about their initialization.
|
||||
*/
|
||||
SERVICE_LOADER(TestPackage.SERVICE_LOADER, "test.plugins.ServiceLoaderPlugin"),
|
||||
/**
|
||||
* A reflectively discovered plugin which subclasses another plugin which is present on the classpath
|
||||
*/
|
||||
SUBCLASS_OF_CLASSPATH_CONVERTER(TestPackage.SUBCLASS_OF_CLASSPATH, "test.plugins.SubclassOfClasspathConverter"),
|
||||
/**
|
||||
* A ServiceLoader discovered plugin which subclasses another plugin which is present on the classpath
|
||||
*/
|
||||
SUBCLASS_OF_CLASSPATH_OVERRIDE_POLICY(TestPackage.SUBCLASS_OF_CLASSPATH, "test.plugins.SubclassOfClasspathOverridePolicy");
|
||||
|
||||
private final TestPackage testPackage;
|
||||
private final String className;
|
||||
private final boolean includeByDefault;
|
||||
|
||||
TestPlugin(TestPackage testPackage, String className) {
|
||||
this(testPackage, className, true);
|
||||
}
|
||||
|
||||
TestPlugin(TestPackage testPackage, String className, boolean includeByDefault) {
|
||||
this.testPackage = testPackage;
|
||||
this.className = className;
|
||||
this.includeByDefault = includeByDefault;
|
||||
}
|
||||
|
||||
public TestPackage testPackage() {
|
||||
return testPackage;
|
||||
}
|
||||
|
||||
public String className() {
|
||||
return className;
|
||||
}
|
||||
|
@ -235,25 +270,21 @@ public class TestPlugins {
|
|||
public boolean includeByDefault() {
|
||||
return includeByDefault;
|
||||
}
|
||||
|
||||
public Predicate<String> removeRuntimeClasses() {
|
||||
return removeRuntimeClasses;
|
||||
}
|
||||
}
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TestPlugins.class);
|
||||
private static final Map<String, Path> PLUGIN_JARS;
|
||||
private static final Map<TestPackage, Path> PLUGIN_JARS;
|
||||
private static final Throwable INITIALIZATION_EXCEPTION;
|
||||
|
||||
static {
|
||||
Throwable err = null;
|
||||
Map<String, Path> pluginJars = new HashMap<>();
|
||||
Map<TestPackage, Path> pluginJars = new EnumMap<>(TestPackage.class);
|
||||
try {
|
||||
for (TestPlugin testPlugin : TestPlugin.values()) {
|
||||
if (pluginJars.containsKey(testPlugin.resourceDir())) {
|
||||
log.debug("Skipping recompilation of " + testPlugin.resourceDir());
|
||||
for (TestPackage testPackage : TestPackage.values()) {
|
||||
if (pluginJars.containsKey(testPackage)) {
|
||||
log.debug("Skipping recompilation of " + testPackage.resourceDir());
|
||||
}
|
||||
pluginJars.put(testPlugin.resourceDir(), createPluginJar(testPlugin.resourceDir(), testPlugin.removeRuntimeClasses()));
|
||||
pluginJars.put(testPackage, createPluginJar(testPackage.resourceDir(), testPackage.removeRuntimeClasses()));
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
log.error("Could not set up plugin test jars", e);
|
||||
|
@ -296,7 +327,7 @@ public class TestPlugins {
|
|||
assertAvailable();
|
||||
return Arrays.stream(plugins)
|
||||
.filter(Objects::nonNull)
|
||||
.map(TestPlugin::resourceDir)
|
||||
.map(TestPlugin::testPackage)
|
||||
.distinct()
|
||||
.map(PLUGIN_JARS::get)
|
||||
.collect(Collectors.toSet());
|
||||
|
@ -374,11 +405,15 @@ public class TestPlugins {
|
|||
}
|
||||
|
||||
private static void removeDirectory(Path binDir) throws IOException {
|
||||
List<Path> classFiles = Files.walk(binDir)
|
||||
.sorted(Comparator.reverseOrder())
|
||||
.collect(Collectors.toList());
|
||||
for (Path classFile : classFiles) {
|
||||
if (!Files.deleteIfExists(classFile)) {
|
||||
List<File> classFiles;
|
||||
try (Stream<Path> stream = Files.walk(binDir)) {
|
||||
classFiles = stream
|
||||
.sorted(Comparator.reverseOrder())
|
||||
.map(Path::toFile)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
for (File classFile : classFiles) {
|
||||
if (!classFile.delete()) {
|
||||
throw new IOException("Could not delete: " + classFile);
|
||||
}
|
||||
}
|
||||
|
@ -390,18 +425,21 @@ public class TestPlugins {
|
|||
*
|
||||
* <p>Dependencies between source files in this directory are resolved against one another
|
||||
* and the classes present in the test environment.
|
||||
* See https://stackoverflow.com/questions/1563909/ for more information.
|
||||
* See <a href="https://stackoverflow.com/questions/1563909/"/> for more information.
|
||||
* Additional dependencies in your plugins should be added as test scope to :connect:runtime.
|
||||
* @param sourceDir Directory containing java source files
|
||||
* @throws IOException if the files cannot be compiled
|
||||
*/
|
||||
private static void compileJavaSources(Path sourceDir, Path binDir) throws IOException {
|
||||
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
|
||||
List<File> sourceFiles = Files.walk(sourceDir)
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(path -> path.toFile().getName().endsWith(".java"))
|
||||
.map(Path::toFile)
|
||||
.collect(Collectors.toList());
|
||||
List<File> sourceFiles;
|
||||
try (Stream<Path> stream = Files.walk(sourceDir)) {
|
||||
sourceFiles = stream
|
||||
.filter(Files::isRegularFile)
|
||||
.map(Path::toFile)
|
||||
.filter(file -> file.getName().endsWith(".java"))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
StringWriter writer = new StringWriter();
|
||||
List<String> options = Arrays.asList(
|
||||
"-d", binDir.toString() // Write class output to a different directory.
|
||||
|
@ -423,11 +461,14 @@ public class TestPlugins {
|
|||
}
|
||||
|
||||
private static void writeJar(JarOutputStream jar, Path inputDir, Predicate<String> removeRuntimeClasses) throws IOException {
|
||||
List<Path> paths = Files.walk(inputDir)
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(path -> !path.toFile().getName().endsWith(".java"))
|
||||
.filter(path -> !removeRuntimeClasses.test(path.toFile().getName()))
|
||||
.collect(Collectors.toList());
|
||||
List<Path> paths;
|
||||
try (Stream<Path> stream = Files.walk(inputDir)) {
|
||||
paths = stream
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(path -> !path.toFile().getName().endsWith(".java"))
|
||||
.filter(path -> !removeRuntimeClasses.test(path.toFile().getName()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
for (Path path : paths) {
|
||||
try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) {
|
||||
jar.putNextEntry(new JarEntry(
|
||||
|
|
|
@ -26,7 +26,6 @@ import org.apache.kafka.connect.runtime.isolation.ReflectionScanner;
|
|||
import org.apache.kafka.connect.runtime.isolation.ServiceLoaderScanner;
|
||||
import org.apache.kafka.connect.runtime.isolation.TestPlugins;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
|
@ -82,13 +81,6 @@ public class ConnectPluginPathTest {
|
|||
@TempDir
|
||||
public Path workspace;
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
// Work around a circular-dependency in TestPlugins.
|
||||
TestPlugins.pluginPath();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testNoArguments() {
|
||||
CommandResult res = runCommand();
|
||||
|
|
Loading…
Reference in New Issue