@@ -6,10 +6,7 @@ import com.jetbrains.rd.util.lifetime.Lifetime
6
6
import kotlinx.coroutines.runBlocking
7
7
import mu.KotlinLogging
8
8
import org.utbot.analytics.AnalyticsConfigureUtil
9
- import org.utbot.common.AbstractSettings
10
- import org.utbot.common.allNestedClasses
11
- import org.utbot.common.appendHtmlLine
12
- import org.utbot.common.nameOfPackage
9
+ import org.utbot.common.*
13
10
import org.utbot.engine.util.mockListeners.ForceMockListener
14
11
import org.utbot.engine.util.mockListeners.ForceStaticMockListener
15
12
import org.utbot.framework.codegen.*
@@ -48,10 +45,16 @@ import kotlin.reflect.jvm.kotlinFunction
48
45
import kotlin.time.Duration.Companion.seconds
49
46
50
47
private val messageFromMainTimeoutMillis = 120 .seconds
51
- private val logger = KotlinLogging .logger {}
48
+ private val logger = KotlinLogging .logger{}
49
+
50
+ @Suppress(" unused" )
51
+ object EngineProcessMain
52
52
53
53
// use log4j2.configurationFile property to set log4j configuration
54
54
suspend fun main (args : Array <String >) = runBlocking {
55
+ logger.info(" -----------------------------------------------------------------------" )
56
+ logger.info(" -------------------NEW ENGINE PROCESS STARTED--------------------------" )
57
+ logger.info(" -----------------------------------------------------------------------" )
55
58
// 0 - auto port for server, should not be used here
56
59
val port = findRdPort(args)
57
60
@@ -62,9 +65,6 @@ suspend fun main(args: Array<String>) = runBlocking {
62
65
val kryoHelper = KryoHelper (lifetime)
63
66
engineProcessModel.setup(kryoHelper, it, protocol)
64
67
}
65
- logger.info { " runBlocking ending" }
66
- }.also {
67
- logger.info { " runBlocking ended" }
68
68
}
69
69
70
70
private lateinit var testGenerator: TestCaseGenerator
@@ -74,12 +74,12 @@ private var idCounter: Long = 0
74
74
75
75
private fun EngineProcessModel.setup (kryoHelper : KryoHelper , watchdog : IdleWatchdog , realProtocol : IProtocol ) {
76
76
val model = this
77
- watchdog.wrapActiveCall (setupUtContext) { params ->
77
+ watchdog.bracketActiveCall (setupUtContext, " UtContext setup " ) { params ->
78
78
UtContext .setUtContext(UtContext (URLClassLoader (params.classpathForUrlsClassloader.map {
79
79
File (it).toURI().toURL()
80
80
}.toTypedArray())))
81
81
}
82
- watchdog.wrapActiveCall (createTestGenerator) { params ->
82
+ watchdog.bracketActiveCall (createTestGenerator, " Creating Test Generator " ) { params ->
83
83
AnalyticsConfigureUtil .configureML()
84
84
Instrumenter .adapter = RdInstrumenter (realProtocol.rdInstrumenterAdapter)
85
85
testGenerator = TestCaseGenerator (buildDirs = params.buildDir.map { Paths .get(it) },
@@ -90,39 +90,43 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
90
90
runBlocking {
91
91
model.isCancelled.startSuspending(Unit )
92
92
}
93
- })
93
+ }
94
+ )
94
95
}
95
- watchdog.wrapActiveCall(generate) { params ->
96
- val mockFrameworkInstalled = params.mockInstalled
97
- val conflictTriggers = ConflictTriggers (kryoHelper.readObject(params.conflictTriggers))
98
- if (! mockFrameworkInstalled) {
99
- ForceMockListener .create(testGenerator, conflictTriggers, cancelJob = true )
100
- }
101
- val staticsMockingConfigured = params.staticsMockingIsConfigureda
102
- if (! staticsMockingConfigured) {
103
- ForceStaticMockListener .create(testGenerator, conflictTriggers, cancelJob = true )
104
- }
105
- val result = testGenerator.generate(kryoHelper.readObject(params.methods),
106
- MockStrategyApi .valueOf(params.mockStrategy),
107
- kryoHelper.readObject(params.chosenClassesToMockAlways),
108
- params.timeout,
109
- generate = testFlow {
110
- generationTimeout = params.generationTimeout
111
- isSymbolicEngineEnabled = params.isSymbolicEngineEnabled
112
- isFuzzingEnabled = params.isFuzzingEnabled
113
- fuzzingValue = params.fuzzingValue
114
- })
115
- .apply { logger.info(" generation ended, starting summarization, result size: ${this .size} " ) }
116
- .map { it.summarize(Paths .get(params.searchDirectory)) }
117
- .apply { logger.info(" summarization ended" ) }
118
- .filterNot { it.executions.isEmpty() && it.errors.isEmpty() }
96
+ watchdog.bracketActiveCall(generate, " Generating tests" ) { params ->
97
+ val methods: List <ExecutableId > = kryoHelper.readObject(params.methods)
98
+ logger.debug().bracket(" starting generation for ${methods.size} methods, starting with ${methods.first()} " ) {
99
+ val mockFrameworkInstalled = params.mockInstalled
100
+ val conflictTriggers = ConflictTriggers (kryoHelper.readObject(params.conflictTriggers))
101
+ if (! mockFrameworkInstalled) {
102
+ ForceMockListener .create(testGenerator, conflictTriggers, cancelJob = true )
103
+ }
104
+ val staticsMockingConfigured = params.staticsMockingIsConfigureda
105
+ if (! staticsMockingConfigured) {
106
+ ForceStaticMockListener .create(testGenerator, conflictTriggers, cancelJob = true )
107
+ }
108
+ val result = testGenerator.generate(methods,
109
+ MockStrategyApi .valueOf(params.mockStrategy),
110
+ kryoHelper.readObject(params.chosenClassesToMockAlways),
111
+ params.timeout,
112
+ generate = testFlow {
113
+ generationTimeout = params.generationTimeout
114
+ isSymbolicEngineEnabled = params.isSymbolicEngineEnabled
115
+ isFuzzingEnabled = params.isFuzzingEnabled
116
+ fuzzingValue = params.fuzzingValue
117
+ })
118
+ .apply { logger.info(" generation ended, starting summarization, result size: ${this .size} " ) }
119
+ .map { it.summarize(Paths .get(params.searchDirectory)) }
120
+ .apply { logger.info(" summarization ended" ) }
121
+ .filterNot { it.executions.isEmpty() && it.errors.isEmpty() }
119
122
120
- val id = ++ idCounter
123
+ val id = ++ idCounter
121
124
122
- testSets[id] = result
123
- GenerateResult (result.size, id)
125
+ testSets[id] = result
126
+ GenerateResult (result.size, id)
127
+ }
124
128
}
125
- watchdog.wrapActiveCall (render) { params ->
129
+ watchdog.bracketActiveCall (render, " Rendering tests " ) { params ->
126
130
val testFramework = testFrameworkByName(params.testFramework)
127
131
val staticMocking = if (params.staticsMocking.startsWith(" No" )) {
128
132
NoStaticMocking
@@ -153,11 +157,10 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
153
157
RenderResult (it.generatedCode, it.utilClassKind?.javaClass?.simpleName)
154
158
}
155
159
}
156
- watchdog.wrapActiveCall(stopProcess) { watchdog.stopProtocol() }
157
- watchdog.wrapActiveCall(obtainClassId) { canonicalName ->
160
+ watchdog.bracketActiveCall(obtainClassId, " Obtain class id in UtContext" ) { canonicalName ->
158
161
kryoHelper.writeObject(UtContext .currentContext()!! .classLoader.loadClass(canonicalName).id)
159
162
}
160
- watchdog.wrapActiveCall (findMethodsInClassMatchingSelected) { params ->
163
+ watchdog.bracketActiveCall (findMethodsInClassMatchingSelected, " Find methods in Class " ) { params ->
161
164
val classId = kryoHelper.readObject<ClassId >(params.classId)
162
165
val selectedMethodDescriptions =
163
166
params.methodDescriptions.map { MethodDescription (it.name, it.containingClass, it.parametersTypes) }
@@ -168,7 +171,7 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
168
171
.map { it.executableId }
169
172
}))
170
173
}
171
- watchdog.wrapActiveCall (findMethodParamNames) { params ->
174
+ watchdog.bracketActiveCall (findMethodParamNames, " Find method parameters names " ) { params ->
172
175
val classId = kryoHelper.readObject<ClassId >(params.classId)
173
176
val byMethodDescription = kryoHelper.readObject<Map <MethodDescription , List <String >>>(params.bySignature)
174
177
FindMethodParamNamesResult (kryoHelper.writeObject(
@@ -177,7 +180,7 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
177
180
.toMap()
178
181
))
179
182
}
180
- watchdog.wrapActiveCall (writeSarifReport) { params ->
183
+ watchdog.bracketActiveCall (writeSarifReport, " Writing Sarif report " ) { params ->
181
184
val reportFilePath = Paths .get(params.reportFilePath)
182
185
reportFilePath.parent.toFile().mkdirs()
183
186
val sarifReport = SarifReport (
@@ -188,12 +191,12 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
188
191
reportFilePath.toFile().writeText(sarifReport)
189
192
sarifReport
190
193
}
191
- watchdog.wrapActiveCall (generateTestReport) { params ->
194
+ watchdog.bracketActiveCall (generateTestReport, " Generating test report " ) { params ->
192
195
val eventLogMessage = params.eventLogMessage
193
196
val testPackageName: String? = params.testPackageName
194
197
var hasWarnings = false
195
198
val reports = testGenerationReports
196
- if (reports.isEmpty()) return @wrapActiveCall GenerateTestReportResult (" No tests were generated" , null , true )
199
+ if (reports.isEmpty()) return @bracketActiveCall GenerateTestReportResult (" No tests were generated" , null , true )
197
200
val isMultiPackage = params.isMultiPackage
198
201
val (notifyMessage, statistics) = if (reports.size == 1 ) {
199
202
val report = reports.first()
0 commit comments