Skip to content

Commit 4362bd2

Browse files
committed
Add timeout execution conversion
1 parent 405444f commit 4362bd2

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

utbot-junit-contest/src/main/kotlin/org/utbot/contest/usvm/converter/JcToUtExecutionConverter.kt

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.usvm.instrumentation.testcase.api.UTestExecutionResult
1313
import org.usvm.instrumentation.testcase.api.UTestExecutionState
1414
import org.usvm.instrumentation.testcase.api.UTestExecutionSuccessResult
1515
import org.usvm.instrumentation.testcase.api.UTestExecutionTimedOutResult
16+
import org.usvm.instrumentation.testcase.api.UTestSetStaticFieldStatement
1617
import org.usvm.instrumentation.testcase.descriptor.Descriptor2ValueConverter
1718
import org.usvm.instrumentation.testcase.descriptor.UTestExceptionDescriptor
1819
import org.usvm.instrumentation.util.enclosingClass
@@ -26,6 +27,8 @@ import org.utbot.framework.plugin.api.EnvironmentModels
2627
import org.utbot.framework.plugin.api.ExecutableId
2728
import org.utbot.framework.plugin.api.FieldId
2829
import org.utbot.framework.plugin.api.Instruction
30+
import org.utbot.framework.plugin.api.MissingState
31+
import org.utbot.framework.plugin.api.TimeoutException
2932
import org.utbot.framework.plugin.api.UtArrayModel
3033
import org.utbot.framework.plugin.api.UtAssembleModel
3134
import org.utbot.framework.plugin.api.UtCompositeModel
@@ -37,6 +40,7 @@ import org.utbot.framework.plugin.api.UtExplicitlyThrownException
3740
import org.utbot.framework.plugin.api.UtImplicitlyThrownException
3841
import org.utbot.framework.plugin.api.UtPrimitiveModel
3942
import org.utbot.framework.plugin.api.UtStatementCallModel
43+
import org.utbot.framework.plugin.api.UtTimeoutException
4044
import org.utbot.framework.plugin.api.UtVoidModel
4145
import org.utbot.framework.plugin.api.mapper.UtModelDeepMapper
4246
import org.utbot.framework.plugin.api.util.executableId
@@ -56,15 +60,9 @@ class JcToUtExecutionConverter(
5660
) {
5761
private val toValueConverter = Descriptor2ValueConverter(utContext.classLoader)
5862

59-
private var jcToUtModelConverter: JcToUtModelConverter
60-
private var uTestProcessResult: UTestAnalysisResult
61-
62-
init {
63-
val instToModelConverter = UTestInstToUtModelConverter(jcExecution.uTest, jcClasspath, idGenerator, utilMethodProvider)
64-
jcToUtModelConverter = JcToUtModelConverter(idGenerator, jcClasspath, instToModelConverter)
65-
66-
uTestProcessResult = instToModelConverter.processUTest()
67-
}
63+
private val instToModelConverter = UTestInstToUtModelConverter(jcExecution.uTest, jcClasspath, idGenerator, utilMethodProvider)
64+
private var jcToUtModelConverter = JcToUtModelConverter(idGenerator, jcClasspath, instToModelConverter)
65+
private var uTestProcessResult = instToModelConverter.processUTest()
6866

6967
fun convert(): UtExecution? {
7068
val coverage = convertCoverage(getTrace(jcExecution.uTestExecutionResult), jcExecution.method.enclosingType.jcClass)
@@ -108,8 +106,14 @@ class JcToUtExecutionConverter(
108106
}
109107

110108
is UTestExecutionTimedOutResult -> {
111-
// TODO usvm-sbft
112-
null
109+
logger.warn { "Timeout on ${jcExecution.method.method}" }
110+
UtUsvmExecution(
111+
stateBefore = constructStateBeforeFromUTest(),
112+
stateAfter = MissingState,
113+
result = UtTimeoutException(TimeoutException("Concrete execution timed out")),
114+
coverage = coverage,
115+
instrumentation = uTestProcessResult.instrumentation,
116+
)
113117
}
114118
} ?: return null
115119

@@ -230,6 +234,24 @@ class JcToUtExecutionConverter(
230234
return EnvironmentModels(thisInstance, parameters, statics, executableId)
231235
}
232236

237+
private fun constructStateBeforeFromUTest(): EnvironmentModels {
238+
val uTest = jcExecution.uTest
239+
val method = jcExecution.method
240+
val thisInstance =
241+
if (method.isStatic) null
242+
else if (method.method.isConstructor) null
243+
else instToModelConverter.findModelByInst(uTest.callMethodExpression.instance ?: error("Unexpected null instance expression"))
244+
val parameters = uTest.callMethodExpression.args.map {
245+
instToModelConverter.findModelByInst(it)
246+
}
247+
val statics = uTest.initStatements.filterIsInstance<UTestSetStaticFieldStatement>()
248+
.associate {
249+
it.field.fieldId to instToModelConverter.findModelByInst(it.value)
250+
}
251+
val executableId: ExecutableId = method.method.toExecutableId(jcClasspath)
252+
return EnvironmentModels(thisInstance, parameters, statics, executableId)
253+
}
254+
233255
private fun createExecutionFailureResult(
234256
exceptionDescriptor: UTestExceptionDescriptor,
235257
jcTypedMethod: JcTypedMethod,

0 commit comments

Comments
 (0)