From 958d207121b3610bc69f46220f89097d4467709d Mon Sep 17 00:00:00 2001 From: Jiri Pechanec Date: Thu, 21 Mar 2019 12:51:28 +0100 Subject: [PATCH] DBZ-1185 Skip unsupported tests for legacy parser --- .../mysql/MySqlUnsignedIntegerIT.java | 8 +++++ .../mysql/TopicNameSanitizationIT.java | 8 +++++ .../mysql/junit/SkipForLegacyParser.java | 20 +++++++++++ .../mysql/junit/SkipTestForLegacyParser.java | 33 +++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipForLegacyParser.java create mode 100644 debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipTestForLegacyParser.java diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlUnsignedIntegerIT.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlUnsignedIntegerIT.java index 62b95b278..759e9e901 100644 --- a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlUnsignedIntegerIT.java +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlUnsignedIntegerIT.java @@ -18,9 +18,13 @@ import org.apache.kafka.connect.source.SourceRecord; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import io.debezium.config.Configuration; +import io.debezium.connector.mysql.junit.SkipForLegacyParser; +import io.debezium.connector.mysql.junit.SkipTestForLegacyParser; import io.debezium.data.Envelope; import io.debezium.doc.FixFor; import io.debezium.embedded.AbstractConnectorTest; @@ -29,6 +33,7 @@ /** * @author Omar Al-Safi */ +@SkipForLegacyParser public class MySqlUnsignedIntegerIT extends AbstractConnectorTest { private static final Path DB_HISTORY_PATH = Testing.Files.createTestingPath("file-db-history-json.txt") @@ -39,6 +44,9 @@ public class MySqlUnsignedIntegerIT extends AbstractConnectorTest { private final UniqueDatabase DATABASE = new UniqueDatabase("unsignednumericit", "unsigned_integer_test") .withDbHistoryPath(DB_HISTORY_PATH); + @Rule + public final TestRule skip = new SkipTestForLegacyParser(); + @Before public void beforeEach() { stopConnector(); diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/TopicNameSanitizationIT.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/TopicNameSanitizationIT.java index e82b7939f..990aac935 100644 --- a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/TopicNameSanitizationIT.java +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/TopicNameSanitizationIT.java @@ -15,9 +15,13 @@ import org.apache.kafka.connect.source.SourceRecord; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import io.debezium.config.Configuration; +import io.debezium.connector.mysql.junit.SkipForLegacyParser; +import io.debezium.connector.mysql.junit.SkipTestForLegacyParser; import io.debezium.data.VerifyRecord; import io.debezium.doc.FixFor; import io.debezium.embedded.AbstractConnectorTest; @@ -28,6 +32,7 @@ * * @author Gunnar Morling */ +@SkipForLegacyParser public class TopicNameSanitizationIT extends AbstractConnectorTest { private static final Path DB_HISTORY_PATH = Testing.Files.createTestingPath("file-db-history-topic-name-sanitization.txt") @@ -35,6 +40,9 @@ public class TopicNameSanitizationIT extends AbstractConnectorTest { private final UniqueDatabase DATABASE = new UniqueDatabase("topic-name-sanitization-it", "topic_name_sanitization_test") .withDbHistoryPath(DB_HISTORY_PATH); + @Rule + public final TestRule skip = new SkipTestForLegacyParser(); + private Configuration config; @Before diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipForLegacyParser.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipForLegacyParser.java new file mode 100644 index 000000000..91f8d412f --- /dev/null +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipForLegacyParser.java @@ -0,0 +1,20 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.connector.mysql.junit; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marker annotation used together with the {@link SkipTestForLegacyParser} JUnit rule, that allows + * tests to be skipped if the legacy parser is used. + */ +@Retention( RetentionPolicy.RUNTIME) +@Target( {ElementType.METHOD, ElementType.TYPE}) +public @interface SkipForLegacyParser { +} diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipTestForLegacyParser.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipTestForLegacyParser.java new file mode 100644 index 000000000..385ce7e3e --- /dev/null +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/junit/SkipTestForLegacyParser.java @@ -0,0 +1,33 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.connector.mysql.junit; + +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import io.debezium.connector.mysql.MySqlConnectorConfig; +import io.debezium.junit.AnnotationBasedTestRule; +import io.debezium.util.Strings; + +/** + * JUnit rule that skips a test based on the {@link SkipForLegacyParser} annotation on either a test method or a test class. + */ +public class SkipTestForLegacyParser extends AnnotationBasedTestRule { + private static boolean isLegacyParserInUse() { + final String mode = System.getProperty("ddl.parser.mode"); + return !Strings.isNullOrEmpty(mode) && mode.equalsIgnoreCase(MySqlConnectorConfig.DdlParsingMode.LEGACY.getValue()); + } + + @Override + public Statement apply(Statement base, Description description) { + final SkipForLegacyParser skipHasName = hasAnnotation(description, SkipForLegacyParser.class); + if (skipHasName != null && isLegacyParserInUse()) { + String reasonForSkipping = "Legacy parser is used"; + return emptyStatement(reasonForSkipping, description); + } + return base; + } +}