Skip to content

Commit 97f011b

Browse files
authored
Fix incorrect test file path in SARIF report (#1223)
1 parent 2df028a commit 97f011b

File tree

8 files changed

+74
-59
lines changed

8 files changed

+74
-59
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ private fun EngineProcessModel.setup(
179179
val sarifReport = SarifReport(
180180
testSets[params.testSetsId]!!,
181181
params.generatedTestsCode,
182-
RdSourceFindingStrategyFacade(realProtocol.rdSourceFindingStrategy)
182+
RdSourceFindingStrategyFacade(params.testSetsId, realProtocol.rdSourceFindingStrategy)
183183
).createReport().toJson()
184184
reportFilePath.toFile().writeText(sarifReport)
185185
sarifReport

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import kotlin.jvm.JvmStatic
1515

1616

1717
/**
18-
* #### Generated from [EngineProcessModel.kt:30]
18+
* #### Generated from [EngineProcessModel.kt:31]
1919
*/
2020
class EngineProcessModel private constructor(
2121
private val _setupUtContext: RdCall<SetupContextParams, Unit>,
@@ -180,7 +180,7 @@ val IProtocol.engineProcessModel get() = getOrCreateExtension(EngineProcessModel
180180

181181

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

244244

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

301301

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

364364

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

421421

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

544544

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

607607

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

700700

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

769769

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

832832

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

973973

974974
/**
975-
* #### Generated from [EngineProcessModel.kt:81]
975+
* #### Generated from [EngineProcessModel.kt:82]
976976
*/
977977
data class RenderResult (
978978
val generatedCode: String,
@@ -1035,7 +1035,7 @@ data class RenderResult (
10351035

10361036

10371037
/**
1038-
* #### Generated from [EngineProcessModel.kt:85]
1038+
* #### Generated from [EngineProcessModel.kt:86]
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:88]
1095+
* #### Generated from [EngineProcessModel.kt:89]
10961096
*/
10971097
data class Signature (
10981098
val name: String,
@@ -1155,7 +1155,7 @@ data class Signature (
11551155

11561156

11571157
/**
1158-
* #### Generated from [EngineProcessModel.kt:36]
1158+
* #### Generated from [EngineProcessModel.kt:37]
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:106]
1233+
* #### Generated from [EngineProcessModel.kt:107]
12341234
*/
12351235
data class WriteSarifReportArguments (
12361236
val testSetsId: Long,

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

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ import kotlin.jvm.JvmStatic
1818
* #### Generated from [EngineProcessModel.kt:17]
1919
*/
2020
class RdSourceFindingStrategy private constructor(
21-
private val _testsRelativePath: RdCall<Unit, String>,
22-
private val _getSourceRelativePath: RdCall<SourceStrategeMethodArgs, String>,
23-
private val _getSourceFile: RdCall<SourceStrategeMethodArgs, String?>
21+
private val _testsRelativePath: RdCall<Long, String>,
22+
private val _getSourceRelativePath: RdCall<SourceStrategyMethodArgs, String>,
23+
private val _getSourceFile: RdCall<SourceStrategyMethodArgs, String?>
2424
) : RdExtBase() {
2525
//companion
2626

2727
companion object : ISerializersOwner {
2828

2929
override fun registerSerializersCore(serializers: ISerializers) {
30-
serializers.register(SourceStrategeMethodArgs)
30+
serializers.register(SourceStrategyMethodArgs)
3131
}
3232

3333

@@ -52,16 +52,16 @@ class RdSourceFindingStrategy private constructor(
5252

5353
private val __StringNullableSerializer = FrameworkMarshallers.String.nullable()
5454

55-
const val serializationHash = -8019839448677987345L
55+
const val serializationHash = 3794277837200536292L
5656

5757
}
5858
override val serializersOwner: ISerializersOwner get() = RdSourceFindingStrategy
5959
override val serializationHash: Long get() = RdSourceFindingStrategy.serializationHash
6060

6161
//fields
62-
val testsRelativePath: RdCall<Unit, String> get() = _testsRelativePath
63-
val getSourceRelativePath: RdCall<SourceStrategeMethodArgs, String> get() = _getSourceRelativePath
64-
val getSourceFile: RdCall<SourceStrategeMethodArgs, String?> get() = _getSourceFile
62+
val testsRelativePath: RdCall<Long, String> get() = _testsRelativePath
63+
val getSourceRelativePath: RdCall<SourceStrategyMethodArgs, String> get() = _getSourceRelativePath
64+
val getSourceFile: RdCall<SourceStrategyMethodArgs, String?> get() = _getSourceFile
6565
//methods
6666
//initializer
6767
init {
@@ -79,9 +79,9 @@ class RdSourceFindingStrategy private constructor(
7979
//secondary constructor
8080
private constructor(
8181
) : this(
82-
RdCall<Unit, String>(FrameworkMarshallers.Void, FrameworkMarshallers.String),
83-
RdCall<SourceStrategeMethodArgs, String>(SourceStrategeMethodArgs, FrameworkMarshallers.String),
84-
RdCall<SourceStrategeMethodArgs, String?>(SourceStrategeMethodArgs, __StringNullableSerializer)
82+
RdCall<Long, String>(FrameworkMarshallers.Long, FrameworkMarshallers.String),
83+
RdCall<SourceStrategyMethodArgs, String>(SourceStrategyMethodArgs, FrameworkMarshallers.String),
84+
RdCall<SourceStrategyMethodArgs, String?>(SourceStrategyMethodArgs, __StringNullableSerializer)
8585
)
8686

8787
//equals trait
@@ -113,23 +113,26 @@ val IProtocol.rdSourceFindingStrategy get() = getOrCreateExtension(RdSourceFindi
113113
/**
114114
* #### Generated from [EngineProcessModel.kt:18]
115115
*/
116-
data class SourceStrategeMethodArgs (
116+
data class SourceStrategyMethodArgs (
117+
val testSetId: Long,
117118
val classFqn: String,
118119
val extension: String?
119120
) : IPrintable {
120121
//companion
121122

122-
companion object : IMarshaller<SourceStrategeMethodArgs> {
123-
override val _type: KClass<SourceStrategeMethodArgs> = SourceStrategeMethodArgs::class
123+
companion object : IMarshaller<SourceStrategyMethodArgs> {
124+
override val _type: KClass<SourceStrategyMethodArgs> = SourceStrategyMethodArgs::class
124125

125126
@Suppress("UNCHECKED_CAST")
126-
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): SourceStrategeMethodArgs {
127+
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): SourceStrategyMethodArgs {
128+
val testSetId = buffer.readLong()
127129
val classFqn = buffer.readString()
128130
val extension = buffer.readNullable { buffer.readString() }
129-
return SourceStrategeMethodArgs(classFqn, extension)
131+
return SourceStrategyMethodArgs(testSetId, classFqn, extension)
130132
}
131133

132-
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: SourceStrategeMethodArgs) {
134+
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: SourceStrategyMethodArgs) {
135+
buffer.writeLong(value.testSetId)
133136
buffer.writeString(value.classFqn)
134137
buffer.writeNullable(value.extension) { buffer.writeString(it) }
135138
}
@@ -145,8 +148,9 @@ data class SourceStrategeMethodArgs (
145148
if (this === other) return true
146149
if (other == null || other::class != this::class) return false
147150

148-
other as SourceStrategeMethodArgs
151+
other as SourceStrategyMethodArgs
149152

153+
if (testSetId != other.testSetId) return false
150154
if (classFqn != other.classFqn) return false
151155
if (extension != other.extension) return false
152156

@@ -155,14 +159,16 @@ data class SourceStrategeMethodArgs (
155159
//hash code trait
156160
override fun hashCode(): Int {
157161
var __r = 0
162+
__r = __r*31 + testSetId.hashCode()
158163
__r = __r*31 + classFqn.hashCode()
159164
__r = __r*31 + if (extension != null) extension.hashCode() else 0
160165
return __r
161166
}
162167
//pretty print
163168
override fun print(printer: PrettyPrinter) {
164-
printer.println("SourceStrategeMethodArgs (")
169+
printer.println("SourceStrategyMethodArgs (")
165170
printer.indent {
171+
print("testSetId = "); testSetId.print(printer); println()
166172
print("classFqn = "); classFqn.print(printer); println()
167173
print("extension = "); extension.print(printer); println()
168174
}

utbot-framework/src/main/kotlin/org/utbot/sarif/RdSourceFindingStrategy.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ package org.utbot.sarif
22

33
import kotlinx.coroutines.runBlocking
44
import org.utbot.framework.process.generated.RdSourceFindingStrategy
5-
import org.utbot.framework.process.generated.SourceStrategeMethodArgs
5+
import org.utbot.framework.process.generated.SourceStrategyMethodArgs
66
import java.io.File
77

8-
class RdSourceFindingStrategyFacade(private val realStrategy: RdSourceFindingStrategy): SourceFindingStrategy() {
8+
class RdSourceFindingStrategyFacade(
9+
private val testSetsId: Long,
10+
private val realStrategy: RdSourceFindingStrategy
11+
) : SourceFindingStrategy() {
912
override val testsRelativePath: String
10-
get() = runBlocking { realStrategy.testsRelativePath.startSuspending(Unit) }
13+
get() = runBlocking { realStrategy.testsRelativePath.startSuspending(testSetsId) }
1114

1215
override fun getSourceRelativePath(classFqn: String, extension: String?): String = runBlocking {
13-
realStrategy.getSourceRelativePath.startSuspending(SourceStrategeMethodArgs(classFqn, extension))
16+
realStrategy.getSourceRelativePath.startSuspending(SourceStrategyMethodArgs(testSetsId, classFqn, extension))
1417
}
1518

1619
override fun getSourceFile(classFqn: String, extension: String?): File? = runBlocking {
17-
realStrategy.getSourceFile.startSuspending(SourceStrategeMethodArgs(classFqn, extension))?.let {
20+
realStrategy.getSourceFile.startSuspending(SourceStrategyMethodArgs(testSetsId, classFqn, extension))?.let {
1821
File(it)
1922
}
2023
}

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ object CodeGenerationController {
694694
val file = filePointer.containingFile
695695

696696
val srcClassPath = srcClass.containingFile.virtualFile.toNioPath()
697-
val sarifReport = saveSarifReport(
697+
saveSarifReport(
698698
proc,
699699
testSetsId,
700700
testClassUpdated,

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.intellij.psi.PsiMethod
77
import com.intellij.psi.impl.file.impl.JavaFileManager
88
import com.intellij.psi.search.GlobalSearchScope
99
import com.intellij.refactoring.util.classMembers.MemberInfo
10-
import com.jetbrains.rd.framework.util.asCompletableFuture
10+
import com.jetbrains.rd.util.ConcurrentHashMap
1111
import com.jetbrains.rd.util.Logger
1212
import com.jetbrains.rd.util.lifetime.Lifetime
1313
import com.jetbrains.rd.util.lifetime.throwIfNotAlive
@@ -38,7 +38,6 @@ import org.utbot.rd.ProcessWithRdServer
3838
import org.utbot.rd.loggers.UtRdKLoggerFactory
3939
import org.utbot.rd.rdPortArgument
4040
import org.utbot.rd.startUtProcessWithRdServer
41-
import org.utbot.sarif.Sarif
4241
import org.utbot.sarif.SourceFindingStrategy
4342
import java.io.File
4443
import java.nio.file.Path
@@ -65,6 +64,8 @@ class EngineProcess(parent: Lifetime, val project: Project) {
6564
private var count = 0
6665
private var configPath: Path? = null
6766

67+
private val sourceFindingStrategies = ConcurrentHashMap<Long, SourceFindingStrategy>()
68+
6869
private fun getOrCreateLogConfig(): String {
6970
var realPath = configPath
7071
if (realPath == null) {
@@ -164,6 +165,7 @@ class EngineProcess(parent: Lifetime, val project: Project) {
164165
}
165166
}.awaitSignal()
166167
current = proc
168+
initSourceFindingStrategies()
167169
}
168170

169171
proc.protocol.engineProcessModel
@@ -323,34 +325,39 @@ class EngineProcess(parent: Lifetime, val project: Project) {
323325
current?.terminate()
324326
}
325327

326-
fun writeSarif(reportFilePath: Path,
327-
testSetsId: Long,
328-
generatedTestsCode: String,
329-
sourceFindingStrategy: SourceFindingStrategy
330-
): String = runBlocking {
328+
private fun initSourceFindingStrategies() {
331329
current!!.protocol.rdSourceFindingStrategy.let {
332330
it.getSourceFile.set { params ->
333331
DumbService.getInstance(project).runReadActionInSmartMode<String?> {
334-
sourceFindingStrategy.getSourceFile(
332+
sourceFindingStrategies[params.testSetId]!!.getSourceFile(
335333
params.classFqn,
336334
params.extension
337335
)?.canonicalPath
338336
}
339337
}
340338
it.getSourceRelativePath.set { params ->
341339
DumbService.getInstance(project).runReadActionInSmartMode<String> {
342-
sourceFindingStrategy.getSourceRelativePath(
340+
sourceFindingStrategies[params.testSetId]!!.getSourceRelativePath(
343341
params.classFqn,
344342
params.extension
345343
)
346344
}
347345
}
348-
it.testsRelativePath.set { _ ->
346+
it.testsRelativePath.set { testSetId ->
349347
DumbService.getInstance(project).runReadActionInSmartMode<String> {
350-
sourceFindingStrategy.testsRelativePath
348+
sourceFindingStrategies[testSetId]!!.testsRelativePath
351349
}
352350
}
353351
}
352+
}
353+
354+
fun writeSarif(
355+
reportFilePath: Path,
356+
testSetsId: Long,
357+
generatedTestsCode: String,
358+
sourceFindingStrategy: SourceFindingStrategy
359+
): String = runBlocking {
360+
sourceFindingStrategies[testSetsId] = sourceFindingStrategy
354361
engineModel().writeSarifReport.startSuspending(
355362
WriteSarifReportArguments(testSetsId, reportFilePath.pathString, generatedTestsCode)
356363
)

0 commit comments

Comments
 (0)