Skip to content

Commit

Permalink
More fixes according to PR changes request:
Browse files Browse the repository at this point in the history
1. Api refactoring
2. Other minor improvements
  • Loading branch information
DaniilStepanov committed Aug 23, 2023
1 parent 437b225 commit 7571dbd
Show file tree
Hide file tree
Showing 18 changed files with 288 additions and 222 deletions.
1 change: 0 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ include("usvm-jvm")
include("usvm-util")
include("usvm-jvm-instrumentation")
include("usvm-sample-language")
include("usvm-fuzzer")
include("usvm-jvm")

pluginManagement {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,16 @@ class InstrumentationProcessRunner(
listOf(instrumentedProcessClassName)
}

private fun createWorkerProcessArgs(rdPort: Int, timeout: Int): List<String> =
listOf("-cp", testingProjectClasspath) + listOf("-t", "$timeout") + listOf("-p", "$rdPort")
private fun createWorkerProcessArgs(rdPort: Int): List<String> =
listOf("-cp", testingProjectClasspath) +
listOf("-t", "${InstrumentationModuleConstants.concreteExecutorProcessTimeout}") +
listOf("-p", "$rdPort")

suspend fun init(parentLifetime: Lifetime) {
val processLifetime = LifetimeDefinition(parentLifetime)
lifetime = processLifetime
val rdPort = NetUtils.findFreePort(0)
val workerCommand = jvmArgs + createWorkerProcessArgs(rdPort, 120)
val workerCommand = jvmArgs + createWorkerProcessArgs(rdPort)
val pb = ProcessBuilder(workerCommand).inheritIO()
val process = pb.start()
rdProcessRunner =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import org.usvm.instrumentation.generated.models.*
import org.usvm.instrumentation.rd.*
import org.usvm.instrumentation.util.findFieldByFullNameOrNull
import org.usvm.instrumentation.serializer.SerializationContext
import org.usvm.instrumentation.serializer.UTestExpressionSerializer.Companion.registerUTestExpressionSerializer
import org.usvm.instrumentation.serializer.UTestInstSerializer.Companion.registerUTestInstSerializer
import org.usvm.instrumentation.serializer.UTestValueDescriptorSerializer.Companion.registerUTestValueDescriptorSerializer
import org.usvm.instrumentation.testcase.UTest
import org.usvm.instrumentation.testcase.api.*
Expand Down Expand Up @@ -53,7 +53,7 @@ class RdProcessRunner(

private suspend fun initRdProcess(): RdServerProcess {
val serializers = Serializers()
serializers.registerUTestExpressionSerializer(serializationContext)
serializers.registerUTestInstSerializer(serializationContext)
serializers.registerUTestValueDescriptorSerializer(serializationContext)
val protocol = Protocol(
"usvm-executor",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@file:Suppress("EXPERIMENTAL_API_USAGE","EXPERIMENTAL_UNSIGNED_LITERALS","PackageDirectoryMismatch","UnusedImport","unused","LocalVariableName","CanBeVal","PropertyName","EnumEntryName","ClassName","ObjectPropertyName","UnnecessaryVariable","SpellCheckingInspection", "UNUSED_PARAMETER", "UNCHECKED_CAST")
@file:Suppress("EXPERIMENTAL_API_USAGE","EXPERIMENTAL_UNSIGNED_LITERALS","PackageDirectoryMismatch","UnusedImport","unused","LocalVariableName","CanBeVal","PropertyName","EnumEntryName","ClassName","ObjectPropertyName","UnnecessaryVariable","SpellCheckingInspection")
package org.usvm.instrumentation.generated.models

import com.jetbrains.rd.framework.*
Expand Down Expand Up @@ -53,7 +53,7 @@ class InstrumentedProcessModel private constructor(
}


const val serializationHash = 6309547925889624776L
const val serializationHash = 7810505090720773366L

}
override val serializersOwner: ISerializersOwner get() = InstrumentedProcessModel
Expand Down Expand Up @@ -477,8 +477,8 @@ data class SerializedStaticField (
* #### Generated from [InstrumentedProcessModel.kt:42]
*/
data class SerializedUTest (
val initStatements: List<org.usvm.instrumentation.testcase.api.UTestExpression>,
val callMethodExpression: org.usvm.instrumentation.testcase.api.UTestExpression
val initStatements: List<org.usvm.instrumentation.testcase.api.UTestInst>,
val callMethodExpression: org.usvm.instrumentation.testcase.api.UTestInst
) : IPrintable {
//companion

Expand All @@ -487,14 +487,14 @@ data class SerializedUTest (

@Suppress("UNCHECKED_CAST")
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): SerializedUTest {
val initStatements = buffer.readList { (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestExpressionSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestExpression>).read(ctx, buffer) }
val callMethodExpression = (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestExpressionSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestExpression>).read(ctx, buffer)
val initStatements = buffer.readList { (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestInstSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestInst>).read(ctx, buffer) }
val callMethodExpression = (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestInstSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestInst>).read(ctx, buffer)
return SerializedUTest(initStatements, callMethodExpression)
}

override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: SerializedUTest) {
buffer.writeList(value.initStatements) { v -> (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestExpressionSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestExpression>).write(ctx,buffer, v) }
(ctx.serializers.get(org.usvm.instrumentation.serializer.UTestExpressionSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestExpression>).write(ctx,buffer, value.callMethodExpression)
buffer.writeList(value.initStatements) { v -> (ctx.serializers.get(org.usvm.instrumentation.serializer.UTestInstSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestInst>).write(ctx,buffer, v) }
(ctx.serializers.get(org.usvm.instrumentation.serializer.UTestInstSerializer.marshallerId)!! as IMarshaller<org.usvm.instrumentation.testcase.api.UTestInst>).write(ctx,buffer, value.callMethodExpression)
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import org.jacodb.impl.jacodb
import org.usvm.instrumentation.generated.models.*
import org.usvm.instrumentation.instrumentation.JcInstructionTracer
import org.usvm.instrumentation.serializer.SerializationContext
import org.usvm.instrumentation.serializer.UTestExpressionSerializer.Companion.registerUTestExpressionSerializer
import org.usvm.instrumentation.serializer.UTestInstSerializer.Companion.registerUTestInstSerializer
import org.usvm.instrumentation.serializer.UTestValueDescriptorSerializer.Companion.registerUTestValueDescriptorSerializer
import org.usvm.instrumentation.testcase.UTest
import org.usvm.instrumentation.testcase.api.*
Expand Down Expand Up @@ -97,7 +97,7 @@ class InstrumentedProcess private constructor() {
private suspend fun initiate(lifetime: Lifetime, port: Int) {
val scheduler = SingleThreadScheduler(lifetime, "usvm-executor-worker-scheduler")
val serializers = Serializers()
serializers.registerUTestExpressionSerializer(serializationCtx)
serializers.registerUTestInstSerializer(serializationCtx)
serializers.registerUTestValueDescriptorSerializer(serializationCtx)
val protocol = Protocol(
"usvm-executor-worker",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class UTestExecutor(
val accessedStatics = mutableSetOf<Pair<JcField, JcInstructionTracer.StaticFieldAccessType>>()
val callMethodExpr = uTest.callMethodExpression
val executor = UTestExpressionExecutor(workerClassLoader, accessedStatics, mockHelper)
executor.executeUTestExpressions(uTest.initStatements)
executor.executeUTestInsts(uTest.initStatements)
?.onFailure {
return UTestExecutionInitFailedResult(
cause = buildExceptionDescriptor(initStateDescriptorBuilder, it, false),
Expand All @@ -68,7 +68,7 @@ class UTestExecutor(
accessedStatics = hashSetOf()
)

executor.executeUTestExpressions(uTest.initStatements)
executor.executeUTestInsts(uTest.initStatements)
?.onFailure {
return UTestExecutionInitFailedResult(
cause = buildExceptionDescriptor(initStateDescriptorBuilder, it, false),
Expand All @@ -77,7 +77,7 @@ class UTestExecutor(
}

val methodInvocationResult =
executor.executeUTestExpression(callMethodExpr)
executor.executeUTestInst(callMethodExpr)
val resultStateDescriptorBuilder =
Value2DescriptorConverter(workerClassLoader, initStateDescriptorBuilder)
val unpackedInvocationResult =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ package org.usvm.instrumentation.serializer

import org.jacodb.api.JcClasspath
import org.usvm.instrumentation.testcase.descriptor.UTestValueDescriptor
import org.usvm.instrumentation.testcase.api.UTestExpression
import org.usvm.instrumentation.testcase.api.UTestInst
import java.util.*

class SerializationContext(
val jcClasspath: JcClasspath,
) {
val serializedUTestExpressions = IdentityHashMap<UTestExpression, Int>()
val deserializerCache: MutableMap<Int, UTestExpression> = hashMapOf()
val serializedUTestInstructions = IdentityHashMap<UTestInst, Int>()
val deserializerCache: MutableMap<Int, UTestInst> = hashMapOf()
val serializedDescriptors = IdentityHashMap<UTestValueDescriptor, Int>()
val deserializedDescriptors = HashMap<Int, UTestValueDescriptor>()

fun reset() {
serializedUTestExpressions.clear()
serializedUTestInstructions.clear()
serializedDescriptors.clear()
deserializerCache.clear()
deserializedDescriptors.clear()
Expand Down
Loading

0 comments on commit 7571dbd

Please sign in to comment.