use of io.confluent.ksql.test.model.TestCaseNode in project ksql by confluentinc.
the class TestExecutorUtilTest method loadTestCase.
private static TestCase loadTestCase(final String testName) {
try {
final QttTestFile qttTestFile = TestJsonMapper.INSTANCE.get().readValue(TEST_FILE, QttTestFile.class);
final TestCaseNode testCaseNode = qttTestFile.tests.stream().filter(tcn -> tcn.name().equals(testName)).findFirst().orElseThrow(() -> new AssertionError("Invalid test: no test case named " + testName));
return TestCaseBuilder.buildTests(testCaseNode, TEST_FILE.toPath(), name -> mock(TestLocation.class)).get(0);
} catch (final Exception e) {
throw new AssertionError("Invalid test: failed to load test " + testName, e);
}
}
use of io.confluent.ksql.test.model.TestCaseNode in project ksql by confluentinc.
the class TestCasePlanLoader method buildStatementsInTestCase.
private static TestCasePlan buildStatementsInTestCase(final TestCase testCase, final KsqlVersion version, final long timestamp, final Map<String, String> configs, final String simpleTestName, final boolean validateResults) {
final TestInfoGatherer testInfo = executeTestCaseAndGatherInfo(testCase, validateResults);
final List<TopicNode> allTopicNodes = getTopicsFromTestCase(testCase, configs);
final TestCaseNode testCodeNode = new TestCaseNode(simpleTestName, Optional.empty(), ImmutableList.of(), testCase.getInputRecords().stream().map(RecordNode::from).collect(Collectors.toList()), testCase.getOutputRecords().stream().map(RecordNode::from).collect(Collectors.toList()), allTopicNodes, testCase.statements(), testCase.properties(), null, testCase.getPostConditions().asNode(testInfo.getTopics(), testInfo.getSources()), true);
final TestCaseSpecNode spec = new TestCaseSpecNode(version.getVersion().toString(), timestamp, testCase.getOriginalFileName().toString(), testInfo.getSchemas(), testCodeNode);
final TestCasePlanNode plan = new TestCasePlanNode(testInfo.getPlans(), configs);
return new TestCasePlan(// not used
new PathLocation(Paths.get("").toAbsolutePath()), spec, plan, testInfo.getTopologyDescription());
}
use of io.confluent.ksql.test.model.TestCaseNode in project ksql by confluentinc.
the class KsqlTestingTool method runWithTripleFiles.
static void runWithTripleFiles(final String statementFile, final String inputFile, final String outputFile, final Optional<String> extensionDir) throws Exception {
final InputRecordsNode inputRecordNodes;
final OutputRecordsNode outRecordNodes;
try {
inputRecordNodes = (inputFile == null) ? null : OBJECT_MAPPER.readValue(new File(inputFile), InputRecordsNode.class);
} catch (final Exception inputException) {
throw new Exception("File name: " + inputFile + " Message: " + inputException.getMessage());
}
try {
outRecordNodes = OBJECT_MAPPER.readValue(new File(outputFile), OutputRecordsNode.class);
} catch (final Exception outputException) {
throw new Exception("File name: " + outputFile + " Message: " + outputException.getMessage());
}
final Path stmtsPath = Paths.get(statementFile);
final List<String> statements = getSqlStatements(stmtsPath);
final TestCaseNode testCaseNode = new TestCaseNode("KSQL_Test", Optional.empty(), null, (inputFile == null) ? null : inputRecordNodes.getInputRecords(), outRecordNodes.getOutputRecords(), Collections.emptyList(), statements, null, null, null, true);
final PathLocation location = new PathLocation(stmtsPath.toAbsolutePath());
final TestCase testCase = TestCaseBuilder.buildTests(testCaseNode, location.getTestPath(), name -> location).get(0);
executeTestCase(testCase, TestExecutor.create(true, extensionDir));
}
use of io.confluent.ksql.test.model.TestCaseNode in project ksql by confluentinc.
the class TestCaseBuilder method createTest.
private static TestCase createTest(final TestCaseNode test, final Path originalFileName, final TestLocation location, final Optional<String> explicitFormat) {
final String testName = TestCaseBuilderUtil.buildTestName(originalFileName, test.name(), explicitFormat);
try {
final VersionBounds versionBounds = test.versionBounds().build();
final List<String> statements = TestCaseBuilderUtil.buildStatements(test.statements(), explicitFormat);
final Optional<Matcher<Throwable>> ee = test.expectedException().map(ExpectedExceptionNode::build);
final Map<String, Topic> topics = TestCaseBuilderUtil.getAllTopics(statements, test.topics().stream().map(TopicNode::build).collect(Collectors.toList()), test.outputs().stream().map(RecordNode::build).collect(Collectors.toList()), test.inputs().stream().map(RecordNode::build).collect(Collectors.toList()), new InternalFunctionRegistry(), new KsqlConfig(test.properties())).stream().collect(Collectors.toMap(t -> t.getName().toLowerCase(), t -> t));
final List<Record> inputRecords = test.inputs().stream().map(r -> {
final String topicName = r.topicName().toLowerCase();
// parse columns which value type cannot be detected without a schema
if (topics.containsKey(topicName)) {
return r.build(topics.get(topicName).getKeySchema(), topics.get(topicName).getValueSchema(), topics.get(topicName).getKeyFeatures(), topics.get(topicName).getValueFeatures());
}
return r.build();
}).collect(Collectors.toList());
final List<Record> outputRecords = test.outputs().stream().map(RecordNode::build).collect(Collectors.toList());
final PostConditions post = test.postConditions().map(PostConditionsNode::build).orElse(PostConditions.NONE);
return new TestCase(location, originalFileName, testName, versionBounds, test.properties(), topics.values(), inputRecords, outputRecords, statements, ee, post);
} catch (final Exception e) {
throw new AssertionError(testName + ": Invalid test. " + e.getMessage(), e);
}
}
use of io.confluent.ksql.test.model.TestCaseNode in project ksql by confluentinc.
the class TestCaseBuilder method buildTests.
public static List<TestCase> buildTests(final TestCaseNode test, final Path originalFileName, final Function<String, TestLocation> testLocator) {
if (!test.isEnabled()) {
return ImmutableList.of();
}
try {
final Stream<Optional<String>> formats = test.formats().isEmpty() ? Stream.of(Optional.empty()) : test.formats().stream().map(Optional::of);
final TestLocation location = testLocator.apply(test.name());
return formats.map(format -> createTest(test, originalFileName, location, format)).collect(Collectors.toList());
} catch (final Exception e) {
throw new AssertionError("Invalid test '" + test.name() + "': " + e.getMessage(), e);
}
}
Aggregations