From 7b909d3c2ba4f6ec6d385ebabad701bd422c8fa0 Mon Sep 17 00:00:00 2001 From: Yury Kamenev Date: Thu, 30 Nov 2023 16:25:50 +0300 Subject: [PATCH] Drop crashed executions --- .../kotlin/org/utbot/contest/usvm/ContestUsvm.kt | 2 +- .../org/utbot/contest/usvm/jc/JcTestExecutor.kt | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt index cdba54815c..304d6cce2a 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/ContestUsvm.kt @@ -186,7 +186,7 @@ fun runUsvmGeneration( state = state, stringConstants = jcContainer.machine.stringConstants, classConstants = jcContainer.machine.classConstants - ) + ) ?: return@analyzeAsync }.getOrElse { e -> logger.error(e) { "executor.execute(${state.entrypoint}) failed" } return@analyzeAsync diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcTestExecutor.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcTestExecutor.kt index 811277ea4a..301b96f58c 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcTestExecutor.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/jc/JcTestExecutor.kt @@ -26,6 +26,7 @@ import org.usvm.instrumentation.executor.UTestConcreteExecutor import org.usvm.instrumentation.testcase.UTest import org.usvm.instrumentation.testcase.api.UTestAllocateMemoryCall import org.usvm.instrumentation.testcase.api.UTestExecutionExceptionResult +import org.usvm.instrumentation.testcase.api.UTestExecutionFailedResult import org.usvm.instrumentation.testcase.api.UTestExecutionSuccessResult import org.usvm.instrumentation.testcase.api.UTestExpression import org.usvm.instrumentation.testcase.api.UTestMethodCall @@ -62,7 +63,7 @@ class JcTestExecutor( state: JcState, stringConstants: Map, classConstants: Map, - ): JcExecution { + ): JcExecution? { val model = state.models.first() val ctx = state.ctx @@ -99,10 +100,17 @@ class JcTestExecutor( } } - // sometimes symbolic result more preferable than concolic: e.g. if concrete times out + val testExecutionResult = concreteResult?.uTestExecutionResult + + // Drop crashed executions + if (testExecutionResult is UTestExecutionFailedResult) { + logger.warn { "JVM crash in concrete execution for method ${method.method}, dropping state" } + return null + } + + // sometimes symbolic result more preferable than concolic val preferableResult = - if (concreteResult?.uTestExecutionResult is UTestExecutionSuccessResult - || concreteResult?.uTestExecutionResult is UTestExecutionExceptionResult) { + if (testExecutionResult is UTestExecutionSuccessResult || testExecutionResult is UTestExecutionExceptionResult) { concreteResult } else { symbolicResult