You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by le...@apache.org on 2023/11/10 07:06:38 UTC
(flink) 01/08: [FLINK-33023][table-planner][JUnit5 Migration] Module: flink-table-planner/planner/utils (TableTestBase)
This is an automated email from the ASF dual-hosted git repository.
leonard pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
commit 722e638924bb2c925af6fc9e3cf17cf0d3046538
Author: Jiabao Sun <ji...@xtransfer.cn>
AuthorDate: Tue Sep 12 14:39:33 2023 +0800
[FLINK-33023][table-planner][JUnit5 Migration] Module: flink-table-planner/planner/utils (TableTestBase)
---
.../planner/utils/InternalConfigOptionsTest.java | 28 +++---
.../flink/table/planner/utils/TableTestBase.scala | 100 ++++++++++++---------
2 files changed, 71 insertions(+), 57 deletions(-)
diff --git a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/utils/InternalConfigOptionsTest.java b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/utils/InternalConfigOptionsTest.java
index 8d1c182d3ea..bb30acf1228 100644
--- a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/utils/InternalConfigOptionsTest.java
+++ b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/utils/InternalConfigOptionsTest.java
@@ -24,12 +24,14 @@ import org.apache.flink.table.api.TableConfig;
import org.apache.flink.table.api.TableEnvironment;
import org.apache.flink.table.planner.delegation.PlannerBase;
import org.apache.flink.table.planner.plan.nodes.exec.ExecNodeGraph;
+import org.apache.flink.testutils.junit.extensions.parameterized.Parameter;
+import org.apache.flink.testutils.junit.extensions.parameterized.ParameterizedTestExtension;
+import org.apache.flink.testutils.junit.extensions.parameterized.Parameters;
import org.apache.calcite.rel.RelNode;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestTemplate;
+import org.junit.jupiter.api.extension.ExtendWith;
import java.util.Arrays;
import java.util.Collection;
@@ -40,21 +42,21 @@ import static org.apache.flink.table.planner.utils.JavaScalaConversionUtil.toSca
import static org.assertj.core.api.Assertions.assertThat;
/** Tests for {@link InternalConfigOptions}. */
-@RunWith(Parameterized.class)
-public class InternalConfigOptionsTest extends TableTestBase {
+@ExtendWith(ParameterizedTestExtension.class)
+class InternalConfigOptionsTest extends TableTestBase {
private TableEnvironment tEnv;
private PlannerBase planner;
- @Parameterized.Parameters(name = "plannerMode = {0}")
- public static Collection<String> parameters() {
+ @Parameters(name = "plannerMode = {0}")
+ private static Collection<String> parameters() {
return Arrays.asList("STREAMING", "BATCH");
}
- @Parameterized.Parameter public String plannerMode;
+ @Parameter private String plannerMode;
- @Before
- public void setUp() {
+ @BeforeEach
+ void setUp() {
if (plannerMode.equals("STREAMING")) {
StreamTableTestUtil util = streamTestUtil(TableConfig.getDefault());
tEnv = util.getTableEnv();
@@ -66,8 +68,8 @@ public class InternalConfigOptionsTest extends TableTestBase {
}
}
- @Test
- public void testTranslateExecNodeGraphWithInternalTemporalConf() {
+ @TestTemplate
+ void testTranslateExecNodeGraphWithInternalTemporalConf() {
Table table =
tEnv.sqlQuery("SELECT LOCALTIME, LOCALTIMESTAMP, CURRENT_TIME, CURRENT_TIMESTAMP");
RelNode relNode = planner.optimize(TableTestUtil.toRelNode(table));
diff --git a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/utils/TableTestBase.scala b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/utils/TableTestBase.scala
index 7fc23d8281f..d8920bc62c0 100644
--- a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/utils/TableTestBase.scala
+++ b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/utils/TableTestBase.scala
@@ -22,7 +22,6 @@ import org.apache.flink.api.common.typeinfo.{AtomicType, TypeInformation}
import org.apache.flink.api.java.typeutils.{PojoTypeInfo, RowTypeInfo, TupleTypeInfo}
import org.apache.flink.api.scala.typeutils.CaseClassTypeInfo
import org.apache.flink.configuration.BatchExecutionOptions
-import org.apache.flink.core.testutils.FlinkMatchers.containsMessage
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParseException
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode
import org.apache.flink.streaming.api.{environment, TimeCharacteristic}
@@ -67,6 +66,7 @@ import org.apache.flink.table.sources.{StreamTableSource, TableSource}
import org.apache.flink.table.types.logical.LogicalType
import org.apache.flink.table.types.utils.TypeConversions
import org.apache.flink.table.typeutils.FieldInfoUtils
+import org.apache.flink.testutils.junit.extensions.parameterized.ParameterizedTestExtension
import org.apache.flink.types.Row
import org.apache.flink.util.{FlinkUserCodeClassLoaders, MutableURLClassLoader}
import org.apache.flink.util.jackson.JacksonMapperFactory
@@ -79,35 +79,27 @@ import org.apache.calcite.avatica.util.TimeUnit
import org.apache.calcite.rel.RelNode
import org.apache.calcite.sql.{SqlExplainLevel, SqlIntervalQualifier}
import org.apache.calcite.sql.parser.SqlParserPos
-import org.junit.Assert.{assertEquals, assertThat, assertTrue, fail}
-import org.junit.Rule
-import org.junit.rules.{ExpectedException, TemporaryFolder, TestName}
+import org.assertj.core.api.Assertions.{assertThat, assertThatExceptionOfType, fail}
+import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue}
+import org.junit.jupiter.api.extension.{BeforeEachCallback, ExtendWith, ExtensionContext, RegisterExtension}
+import org.junit.jupiter.api.io.TempDir
+import org.junit.platform.commons.support.AnnotationSupport
import java.io.{File, IOException}
import java.net.URL
-import java.nio.file.{Files, Paths}
+import java.nio.file.{Files, Path, Paths}
import java.time.Duration
import java.util.Collections
/** Test base for testing Table API / SQL plans. */
abstract class TableTestBase {
- // used for accurate exception information checking.
- val expectedException: ExpectedException = ExpectedException.none()
-
// used for get test case method name
+ @RegisterExtension
val testName: TestName = new TestName
- val _tempFolder = new TemporaryFolder
-
- @Rule
- def tempFolder: TemporaryFolder = _tempFolder
-
- @Rule
- def thrown: ExpectedException = expectedException
-
- @Rule
- def name: TestName = testName
+ @TempDir
+ var tempFolder: Path = _
def streamTestUtil(tableConfig: TableConfig = TableConfig.getDefault): StreamTableTestUtil =
StreamTableTestUtil(this, tableConfig = tableConfig)
@@ -127,9 +119,36 @@ abstract class TableTestBase {
val expectedString = FlinkRelOptUtil.toString(TableTestUtil.toRelNode(expected))
val actualString = FlinkRelOptUtil.toString(TableTestUtil.toRelNode(actual))
assertEquals(
- "Logical plans do not match",
LogicalPlanFormatUtils.formatTempTableId(expectedString),
- LogicalPlanFormatUtils.formatTempTableId(actualString))
+ LogicalPlanFormatUtils.formatTempTableId(actualString),
+ "Logical plans do not match")
+ }
+}
+
+class TestName extends BeforeEachCallback {
+
+ private val bracketsRegex = """\[.*\]""".r
+
+ private var methodName: String = _
+
+ def getMethodName: String = methodName
+
+ override def beforeEach(context: ExtensionContext): Unit = {
+ if (hasParameterizedTestExtension(context)) {
+ val displayName = context.getDisplayName match {
+ case bracketsRegex(_*) => context.getDisplayName
+ case _ => s"[${context.getDisplayName}]"
+ }
+ methodName = s"${context.getTestMethod.get().getName}$displayName"
+ } else {
+ methodName = context.getTestMethod.get().getName
+ }
+ }
+
+ private def hasParameterizedTestExtension(context: ExtensionContext): Boolean = {
+ Option(AnnotationSupport.findAnnotation(context.getTestClass, classOf[ExtendWith]).orElse(null))
+ .map(_.value)
+ .exists(_.contains(classOf[ParameterizedTestExtension]))
}
}
@@ -622,7 +641,7 @@ abstract class TableTestUtilBase(test: TableTestBase, isStreamingMode: Boolean)
val optimizedPlan = getOptimizedRelPlan(Array(optimizedRel), Array.empty, withRowType = false)
val result = notExpected.forall(!optimizedPlan.contains(_))
val message = s"\nactual plan:\n$optimizedPlan\nnot expected:\n${notExpected.mkString(", ")}"
- assertTrue(message, result)
+ assertTrue(result, message)
}
/**
@@ -752,14 +771,9 @@ abstract class TableTestUtilBase(test: TableTestBase, isStreamingMode: Boolean)
sql: String,
message: String,
clazz: Class[_ <: Throwable] = classOf[ValidationException]): Unit = {
- try {
- verifyExplain(sql)
- fail(s"Expected a $clazz, but no exception is thrown.")
- } catch {
- case e: Throwable =>
- assertTrue(clazz.isAssignableFrom(e.getClass))
- assertThat(e, containsMessage(message))
- }
+ assertThatExceptionOfType(clazz)
+ .isThrownBy(() => verifyExplain(sql))
+ .withMessageContaining(message)
}
/**
@@ -841,22 +855,20 @@ abstract class TableTestUtilBase(test: TableTestBase, isStreamingMode: Boolean)
fail(s"$testMethodFileName regenerated.")
} else {
val expected = String.join("\n", Files.readAllLines(path))
- assertEquals(
- TableTestUtil.replaceExecNodeId(TableTestUtil.getPrettyJson(expected)),
- TableTestUtil.replaceExecNodeId(TableTestUtil.getPrettyJson(jsonPlanWithoutFlinkVersion))
- )
+ assertThat(
+ TableTestUtil.replaceExecNodeId(TableTestUtil.getPrettyJson(jsonPlanWithoutFlinkVersion)))
+ .isEqualTo(TableTestUtil.replaceExecNodeId(TableTestUtil.getPrettyJson(expected)))
// check json serde round trip as well
val expectedWithFlinkVersion = JsonTestUtils.writeToString(
JsonTestUtils
.setFlinkVersion(JsonTestUtils.readFromString(expected), FlinkVersion.current()))
- assertEquals(
- TableTestUtil.replaceExecNodeId(TableTestUtil.getFormattedJson(expectedWithFlinkVersion)),
+ assertThat(
TableTestUtil.replaceExecNodeId(
- TableTestUtil.getFormattedJson(
- getPlanner
- .loadPlan(PlanReference.fromJsonString(expectedWithFlinkVersion))
- .asJsonString()))
- )
+ TableTestUtil.getFormattedJson(getPlanner
+ .loadPlan(PlanReference.fromJsonString(expectedWithFlinkVersion))
+ .asJsonString())))
+ .isEqualTo(
+ TableTestUtil.replaceExecNodeId(TableTestUtil.getFormattedJson(expectedWithFlinkVersion)))
}
}
@@ -1127,16 +1139,16 @@ abstract class TableTestUtilBase(test: TableTestBase, isStreamingMode: Boolean)
def assertEqualsOrExpand(tag: String, actual: String, expand: Boolean = true): Unit = {
val expected = s"$${$tag}"
if (!expand) {
- diffRepository.assertEquals(test.name.getMethodName, tag, expected, actual)
+ diffRepository.assertEquals(test.testName.getMethodName, tag, expected, actual)
return
}
- val expanded = diffRepository.expand(test.name.getMethodName, tag, expected)
+ val expanded = diffRepository.expand(test.testName.getMethodName, tag, expected)
if (expanded != null && !expanded.equals(expected)) {
// expected does exist, check result
- diffRepository.assertEquals(test.name.getMethodName, tag, expected, actual)
+ diffRepository.assertEquals(test.testName.getMethodName, tag, expected, actual)
} else {
// expected does not exist, update
- diffRepository.expand(test.name.getMethodName, tag, actual)
+ diffRepository.expand(test.testName.getMethodName, tag, actual)
}
}
}