Search in sources :

Example 1 with KeyedExecutionParameter

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedExecutionParameter in project legend-engine by finos.

the class ServiceTestRunner method executeTests.

public List<RichServiceTestResult> executeTests() throws IOException, JavaCompileException {
    Execution serviceExecution = this.service.execution;
    if (serviceExecution instanceof PureMultiExecution) {
        List<RichServiceTestResult> results = Lists.mutable.empty();
        try (Scope scope = GlobalTracer.get().buildSpan("Generate Tests And Run For MultiExecution Service").startActive(true)) {
            MutableMap<String, KeyedExecutionParameter> executionsByKey = Iterate.groupByUniqueKey(((PureMultiExecution) serviceExecution).executionParameters, e -> e.key);
            for (KeyedSingleExecutionTest es : ((MultiExecutionTest) service.test).tests) {
                List<TestContainer> asserts = es.asserts;
                KeyedExecutionParameter e = executionsByKey.get(es.key);
                PureMultiExecution pureExecution = (PureMultiExecution) service.execution;
                PureSingleExecution pureSingleExecution = new PureSingleExecution();
                pureSingleExecution.func = pureExecution.func;
                pureSingleExecution.mapping = e.mapping;
                pureSingleExecution.runtime = e.runtime;
                pureSingleExecution.executionOptions = e.executionOptions;
                String noAssertMessage = "No test assert found for key - " + es.key + "!!";
                RichServiceTestResult richServiceTestResult = executeSingleExecutionTest(pureSingleExecution, es.data, asserts, noAssertMessage, pureModelContextData, pureModel, scope);
                richServiceTestResult.setOptionalMultiExecutionKey(es.key);
                results.add(richServiceTestResult);
            }
            return results;
        }
    } else if (serviceExecution instanceof PureSingleExecution) {
        try (Scope scope = GlobalTracer.get().buildSpan("Generate Single Pure Tests And Run").startActive(true)) {
            List<TestContainer> asserts = ((SingleExecutionTest) service.test).asserts;
            String noAssertMessage = "No test assert found !!";
            return Collections.singletonList(executeSingleExecutionTest((PureSingleExecution) service.execution, ((SingleExecutionTest) service.test).data, asserts, noAssertMessage, pureModelContextData, pureModel, scope));
        }
    } else {
        try (Scope scope = GlobalTracer.get().buildSpan("Generate Extra Service Execution Tests and Run").startActive(true)) {
            MutableList<ServiceExecutionExtension> serviceExecutionExtensions = Lists.mutable.withAll(ServiceLoader.load(ServiceExecutionExtension.class));
            Pair<ExecutionPlan, RichIterable<? extends String>> testExecutor = getExtraServiceExecutionPlan(serviceExecutionExtensions, serviceExecution, ((Root_meta_legend_service_metamodel_SingleExecutionTest) this.pureService._test())._data());
            ExecutionPlan executionPlan = testExecutor.getOne();
            Assert.assertTrue(executionPlan instanceof SingleExecutionPlan, () -> "Only Single Execution Plan supported");
            List<TestContainer> containers = getExtraServiceTestContainers(serviceExecutionExtensions, service.test);
            return Collections.singletonList(executeTestAsserts((SingleExecutionPlan) executionPlan, containers, testExecutor.getTwo(), scope));
        }
    }
}
Also used : PureMultiExecution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureMultiExecution) TestContainer(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.TestContainer) PureSingleExecution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureSingleExecution) Root_meta_legend_service_metamodel_SingleExecutionTest(org.finos.legend.pure.generated.Root_meta_legend_service_metamodel_SingleExecutionTest) Execution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.Execution) PureMultiExecution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureMultiExecution) PureSingleExecution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureSingleExecution) PureExecution(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureExecution) SingleExecutionPlan(org.finos.legend.engine.protocol.pure.v1.model.executionPlan.SingleExecutionPlan) ExecutionPlan(org.finos.legend.engine.protocol.pure.v1.model.executionPlan.ExecutionPlan) Scope(io.opentracing.Scope) TestExecutionScope(org.finos.legend.engine.plan.execution.stores.relational.TestExecutionScope) MultiExecutionTest(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.MultiExecutionTest) MutableList(org.eclipse.collections.api.list.MutableList) KeyedExecutionParameter(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedExecutionParameter) KeyedSingleExecutionTest(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedSingleExecutionTest) MutableList(org.eclipse.collections.api.list.MutableList) List(java.util.List) PureList(org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.raw.PureList) SingleExecutionPlan(org.finos.legend.engine.protocol.pure.v1.model.executionPlan.SingleExecutionPlan) Pair(org.eclipse.collections.api.tuple.Pair)

Example 2 with KeyedExecutionParameter

use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedExecutionParameter in project legend-engine by finos.

the class ServiceParseTreeWalker method visitKeyedExecutionParameter.

private KeyedExecutionParameter visitKeyedExecutionParameter(ServiceParserGrammar.ExecParameterContext ctx) {
    KeyedExecutionParameter keyedExecutionParameter = new KeyedExecutionParameter();
    keyedExecutionParameter.sourceInformation = walkerSourceInformation.getSourceInformation(ctx);
    // execution key value
    keyedExecutionParameter.key = PureGrammarParserUtility.fromGrammarString(ctx.execParameterSignature().STRING().getText(), true);
    // mapping
    ServiceParserGrammar.ServiceMappingContext mappingContext = PureGrammarParserUtility.validateAndExtractRequiredField(ctx.serviceMapping(), "mapping", keyedExecutionParameter.sourceInformation);
    keyedExecutionParameter.mapping = PureGrammarParserUtility.fromQualifiedName(mappingContext.qualifiedName().packagePath() == null ? Collections.emptyList() : mappingContext.qualifiedName().packagePath().identifier(), mappingContext.qualifiedName().identifier());
    keyedExecutionParameter.mappingSourceInformation = walkerSourceInformation.getSourceInformation(mappingContext.qualifiedName());
    // runtime
    ServiceParserGrammar.ServiceRuntimeContext runtimeContext = PureGrammarParserUtility.validateAndExtractRequiredField(ctx.serviceRuntime(), "runtime", keyedExecutionParameter.sourceInformation);
    keyedExecutionParameter.runtime = this.visitRuntime(runtimeContext);
    return keyedExecutionParameter;
}
Also used : KeyedExecutionParameter(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedExecutionParameter) ServiceParserGrammar(org.finos.legend.engine.language.pure.grammar.from.antlr4.ServiceParserGrammar)

Aggregations

KeyedExecutionParameter (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedExecutionParameter)2 Scope (io.opentracing.Scope)1 List (java.util.List)1 MutableList (org.eclipse.collections.api.list.MutableList)1 Pair (org.eclipse.collections.api.tuple.Pair)1 ServiceParserGrammar (org.finos.legend.engine.language.pure.grammar.from.antlr4.ServiceParserGrammar)1 TestExecutionScope (org.finos.legend.engine.plan.execution.stores.relational.TestExecutionScope)1 ExecutionPlan (org.finos.legend.engine.protocol.pure.v1.model.executionPlan.ExecutionPlan)1 SingleExecutionPlan (org.finos.legend.engine.protocol.pure.v1.model.executionPlan.SingleExecutionPlan)1 Execution (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.Execution)1 KeyedSingleExecutionTest (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.KeyedSingleExecutionTest)1 MultiExecutionTest (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.MultiExecutionTest)1 PureExecution (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureExecution)1 PureMultiExecution (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureMultiExecution)1 PureSingleExecution (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.PureSingleExecution)1 TestContainer (org.finos.legend.engine.protocol.pure.v1.model.packageableElement.service.TestContainer)1 PureList (org.finos.legend.engine.protocol.pure.v1.model.valueSpecification.raw.PureList)1 Root_meta_legend_service_metamodel_SingleExecutionTest (org.finos.legend.pure.generated.Root_meta_legend_service_metamodel_SingleExecutionTest)1