Skip to content

Commit cc840f1

Browse files
authored
Fixing long summarization timeouts & mics (#1151)
* [utbot-rd] fixing long delays in summarization, fixing sarif reports resource root creation, fixing kryo serialization error, fixing idea thread relating problems * [utbot-rd] compilation fix
1 parent 14e1eb6 commit cc840f1

File tree

16 files changed

+376
-149
lines changed

16 files changed

+376
-149
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ target/
77
.idea/
88
.gradle/
99
*.log
10+
*.rdgen

utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/util/ClassUtil.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ object ClassUtil {
5656
val clazz = classLoader.tryLoadClass(classFqn)
5757
?: return null
5858
val sourceFileName = withUtContext(UtContext(classLoader)) {
59-
Instrumenter.computeSourceFileName(clazz) // finds the file name in bytecode
59+
Instrumenter.adapter.computeSourceFileName(clazz) // finds the file name in bytecode
6060
} ?: return null
6161
val candidates = sourceCodeFiles.filter { sourceCodeFile ->
6262
sourceCodeFile.endsWith(File(sourceFileName))

utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineMain.kt

+5-6
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import org.utbot.framework.plugin.api.util.id
2323
import org.utbot.framework.plugin.api.util.jClass
2424
import org.utbot.framework.plugin.services.JdkInfo
2525
import org.utbot.framework.process.generated.*
26-
import org.utbot.framework.util.Conflict
2726
import org.utbot.framework.util.ConflictTriggers
27+
import org.utbot.instrumentation.instrumentation.instrumenter.Instrumenter
2828
import org.utbot.instrumentation.util.KryoHelper
2929
import org.utbot.rd.CallsSynchronizer
3030
import org.utbot.rd.ClientProtocolBuilder
@@ -33,13 +33,9 @@ import org.utbot.rd.loggers.UtRdKLoggerFactory
3333
import org.utbot.sarif.RdSourceFindingStrategyFacade
3434
import org.utbot.sarif.SarifReport
3535
import org.utbot.summary.summarize
36-
import soot.SootMethod
37-
import soot.UnitPatchingChain
38-
import soot.util.HashChain
3936
import java.io.File
4037
import java.net.URLClassLoader
4138
import java.nio.file.Paths
42-
import java.util.*
4339
import kotlin.reflect.full.functions
4440
import kotlin.time.Duration.Companion.seconds
4541

@@ -56,6 +52,7 @@ suspend fun main(args: Array<String>) = runBlocking {
5652
ClientProtocolBuilder().withProtocolTimeout(messageFromMainTimeoutMillis).start(port) {
5753
settingsModel
5854
rdSourceFindingStrategy
55+
rdInstrumenterAdapter
5956

6057
AbstractSettings.setupFactory(RdSettingsContainerFactory(protocol))
6158
val kryoHelper = KryoHelper(lifetime)
@@ -82,6 +79,7 @@ private fun EngineProcessModel.setup(
8279
}
8380
synchronizer.measureExecutionForTermination(createTestGenerator) { params ->
8481
AnalyticsConfigureUtil.configureML()
82+
Instrumenter.adapter = RdInstrumenter(realProtocol)
8583
testGenerator = TestCaseGenerator(buildDirs = params.buildDir.map { Paths.get(it) },
8684
classpath = params.classpath,
8785
dependencyPaths = params.dependencyPaths,
@@ -150,7 +148,7 @@ private fun EngineProcessModel.setup(
150148
codeGenerator.generateAsStringWithTestReport(testSets[testSetsId]!!)
151149
.let {
152150
testGenerationReports.add(it.testsGenerationReport)
153-
RenderResult(it.generatedCode, kryoHelper.writeObject(it.utilClassKind))
151+
RenderResult(it.generatedCode, it.utilClassKind?.javaClass?.simpleName)
154152
}
155153
}
156154
synchronizer.measureExecutionForTermination(stopProcess) { synchronizer.stopProtocol() }
@@ -177,6 +175,7 @@ private fun EngineProcessModel.setup(
177175
}
178176
synchronizer.measureExecutionForTermination(writeSarifReport) { params ->
179177
val reportFilePath = Paths.get(params.reportFilePath)
178+
reportFilePath.parent.toFile().mkdirs()
180179
reportFilePath.toFile().writeText(
181180
SarifReport(
182181
testSets[params.testSetsId]!!,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.utbot.framework.process
2+
3+
import com.jetbrains.rd.framework.IProtocol
4+
import kotlinx.coroutines.runBlocking
5+
import mu.KotlinLogging
6+
import org.utbot.framework.process.generated.ComputeSourceFileByClassArguments
7+
import org.utbot.framework.process.generated.rdInstrumenterAdapter
8+
import org.utbot.instrumentation.instrumentation.instrumenter.InstrumenterAdapter
9+
import java.io.File
10+
import java.nio.file.Path
11+
12+
private val logger = KotlinLogging.logger { }
13+
14+
class RdInstrumenter(private val protocol: IProtocol): InstrumenterAdapter() {
15+
override fun computeSourceFileByClass(
16+
className: String,
17+
packageName: String?,
18+
directoryToSearchRecursively: Path
19+
): File? = runBlocking {
20+
logger.debug { "starting computeSourceFileByClass with classname - $className" }
21+
val result = try {
22+
protocol.rdInstrumenterAdapter.computeSourceFileByClass.startSuspending(
23+
ComputeSourceFileByClassArguments(
24+
className,
25+
packageName
26+
)
27+
)
28+
}
29+
catch(e: Exception) {
30+
logger.error(e) { "error during computeSourceFileByClass" }
31+
throw e
32+
}
33+
logger.debug { "computeSourceFileByClass result for $className from idea: $result"}
34+
return@runBlocking result?.let { File(it) }
35+
}
36+
}

utbot-framework/src/main/kotlin/org/utbot/framework/process/generated/EngineProcessModel.Generated.kt

+22-22
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import kotlin.jvm.JvmStatic
1515

1616

1717
/**
18-
* #### Generated from [EngineProcessModel.kt:20]
18+
* #### Generated from [EngineProcessModel.kt:30]
1919
*/
2020
class EngineProcessModel private constructor(
2121
private val _setupUtContext: RdCall<SetupContextParams, Unit>,
@@ -73,7 +73,7 @@ class EngineProcessModel private constructor(
7373
}
7474

7575

76-
const val serializationHash = 4674749231408610997L
76+
const val serializationHash = 3907671513584285891L
7777

7878
}
7979
override val serializersOwner: ISerializersOwner get() = EngineProcessModel
@@ -180,7 +180,7 @@ val IProtocol.engineProcessModel get() = getOrCreateExtension(EngineProcessModel
180180

181181

182182
/**
183-
* #### Generated from [EngineProcessModel.kt:89]
183+
* #### Generated from [EngineProcessModel.kt:99]
184184
*/
185185
data class FindMethodParamNamesArguments (
186186
val classId: ByteArray,
@@ -243,7 +243,7 @@ data class FindMethodParamNamesArguments (
243243

244244

245245
/**
246-
* #### Generated from [EngineProcessModel.kt:93]
246+
* #### Generated from [EngineProcessModel.kt:103]
247247
*/
248248
data class FindMethodParamNamesResult (
249249
val paramNames: ByteArray
@@ -300,7 +300,7 @@ data class FindMethodParamNamesResult (
300300

301301

302302
/**
303-
* #### Generated from [EngineProcessModel.kt:82]
303+
* #### Generated from [EngineProcessModel.kt:92]
304304
*/
305305
data class FindMethodsInClassMatchingSelectedArguments (
306306
val classId: ByteArray,
@@ -363,7 +363,7 @@ data class FindMethodsInClassMatchingSelectedArguments (
363363

364364

365365
/**
366-
* #### Generated from [EngineProcessModel.kt:86]
366+
* #### Generated from [EngineProcessModel.kt:96]
367367
*/
368368
data class FindMethodsInClassMatchingSelectedResult (
369369
val executableIds: ByteArray
@@ -420,7 +420,7 @@ data class FindMethodsInClassMatchingSelectedResult (
420420

421421

422422
/**
423-
* #### Generated from [EngineProcessModel.kt:32]
423+
* #### Generated from [EngineProcessModel.kt:42]
424424
*/
425425
data class GenerateParams (
426426
val mockInstalled: Boolean,
@@ -543,7 +543,7 @@ data class GenerateParams (
543543

544544

545545
/**
546-
* #### Generated from [EngineProcessModel.kt:50]
546+
* #### Generated from [EngineProcessModel.kt:60]
547547
*/
548548
data class GenerateResult (
549549
val notEmptyCases: Int,
@@ -606,7 +606,7 @@ data class GenerateResult (
606606

607607

608608
/**
609-
* #### Generated from [EngineProcessModel.kt:101]
609+
* #### Generated from [EngineProcessModel.kt:111]
610610
*/
611611
data class GenerateTestReportArgs (
612612
val eventLogMessage: String?,
@@ -699,7 +699,7 @@ data class GenerateTestReportArgs (
699699

700700

701701
/**
702-
* #### Generated from [EngineProcessModel.kt:110]
702+
* #### Generated from [EngineProcessModel.kt:120]
703703
*/
704704
data class GenerateTestReportResult (
705705
val notifyMessage: String,
@@ -768,7 +768,7 @@ data class GenerateTestReportResult (
768768

769769

770770
/**
771-
* #### Generated from [EngineProcessModel.kt:21]
771+
* #### Generated from [EngineProcessModel.kt:31]
772772
*/
773773
data class JdkInfo (
774774
val path: String,
@@ -831,7 +831,7 @@ data class JdkInfo (
831831

832832

833833
/**
834-
* #### Generated from [EngineProcessModel.kt:54]
834+
* #### Generated from [EngineProcessModel.kt:64]
835835
*/
836836
data class RenderParams (
837837
val testSetsId: Long,
@@ -972,11 +972,11 @@ data class RenderParams (
972972

973973

974974
/**
975-
* #### Generated from [EngineProcessModel.kt:71]
975+
* #### Generated from [EngineProcessModel.kt:81]
976976
*/
977977
data class RenderResult (
978978
val generatedCode: String,
979-
val utilClassKind: ByteArray
979+
val utilClassKind: String?
980980
) : IPrintable {
981981
//companion
982982

@@ -986,13 +986,13 @@ data class RenderResult (
986986
@Suppress("UNCHECKED_CAST")
987987
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): RenderResult {
988988
val generatedCode = buffer.readString()
989-
val utilClassKind = buffer.readByteArray()
989+
val utilClassKind = buffer.readNullable { buffer.readString() }
990990
return RenderResult(generatedCode, utilClassKind)
991991
}
992992

993993
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: RenderResult) {
994994
buffer.writeString(value.generatedCode)
995-
buffer.writeByteArray(value.utilClassKind)
995+
buffer.writeNullable(value.utilClassKind) { buffer.writeString(it) }
996996
}
997997

998998

@@ -1009,15 +1009,15 @@ data class RenderResult (
10091009
other as RenderResult
10101010

10111011
if (generatedCode != other.generatedCode) return false
1012-
if (!(utilClassKind contentEquals other.utilClassKind)) return false
1012+
if (utilClassKind != other.utilClassKind) return false
10131013

10141014
return true
10151015
}
10161016
//hash code trait
10171017
override fun hashCode(): Int {
10181018
var __r = 0
10191019
__r = __r*31 + generatedCode.hashCode()
1020-
__r = __r*31 + utilClassKind.contentHashCode()
1020+
__r = __r*31 + if (utilClassKind != null) utilClassKind.hashCode() else 0
10211021
return __r
10221022
}
10231023
//pretty print
@@ -1035,7 +1035,7 @@ data class RenderResult (
10351035

10361036

10371037
/**
1038-
* #### Generated from [EngineProcessModel.kt:75]
1038+
* #### Generated from [EngineProcessModel.kt:85]
10391039
*/
10401040
data class SetupContextParams (
10411041
val classpathForUrlsClassloader: List<String>
@@ -1092,7 +1092,7 @@ data class SetupContextParams (
10921092

10931093

10941094
/**
1095-
* #### Generated from [EngineProcessModel.kt:78]
1095+
* #### Generated from [EngineProcessModel.kt:88]
10961096
*/
10971097
data class Signature (
10981098
val name: String,
@@ -1155,7 +1155,7 @@ data class Signature (
11551155

11561156

11571157
/**
1158-
* #### Generated from [EngineProcessModel.kt:26]
1158+
* #### Generated from [EngineProcessModel.kt:36]
11591159
*/
11601160
data class TestGeneratorParams (
11611161
val buildDir: Array<String>,
@@ -1230,7 +1230,7 @@ data class TestGeneratorParams (
12301230

12311231

12321232
/**
1233-
* #### Generated from [EngineProcessModel.kt:96]
1233+
* #### Generated from [EngineProcessModel.kt:106]
12341234
*/
12351235
data class WriteSarifReportArguments (
12361236
val testSetsId: Long,

utbot-framework/src/main/kotlin/org/utbot/framework/process/generated/EngineProcessProtocolRoot.Generated.kt

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class EngineProcessProtocolRoot private constructor(
2626
override fun registerSerializersCore(serializers: ISerializers) {
2727
EngineProcessProtocolRoot.register(serializers)
2828
EngineProcessModel.register(serializers)
29+
RdInstrumenterAdapter.register(serializers)
2930
RdSourceFindingStrategy.register(serializers)
3031
}
3132

0 commit comments

Comments
 (0)