@@ -6,10 +6,7 @@ import com.jetbrains.rd.util.lifetime.Lifetime
66import kotlinx.coroutines.runBlocking
77import mu.KotlinLogging
88import 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.*
1310import org.utbot.engine.util.mockListeners.ForceMockListener
1411import org.utbot.engine.util.mockListeners.ForceStaticMockListener
1512import org.utbot.framework.codegen.*
@@ -48,10 +45,16 @@ import kotlin.reflect.jvm.kotlinFunction
4845import kotlin.time.Duration.Companion.seconds
4946
5047private val messageFromMainTimeoutMillis = 120 .seconds
51- private val logger = KotlinLogging .logger {}
48+ private val logger = KotlinLogging .logger{}
49+
50+ @Suppress(" unused" )
51+ object EngineProcessMain
5252
5353// use log4j2.configurationFile property to set log4j configuration
5454suspend fun main (args : Array <String >) = runBlocking {
55+ logger.info(" -----------------------------------------------------------------------" )
56+ logger.info(" -------------------NEW ENGINE PROCESS STARTED--------------------------" )
57+ logger.info(" -----------------------------------------------------------------------" )
5558 // 0 - auto port for server, should not be used here
5659 val port = findRdPort(args)
5760
@@ -62,9 +65,6 @@ suspend fun main(args: Array<String>) = runBlocking {
6265 val kryoHelper = KryoHelper (lifetime)
6366 engineProcessModel.setup(kryoHelper, it, protocol)
6467 }
65- logger.info { " runBlocking ending" }
66- }.also {
67- logger.info { " runBlocking ended" }
6868}
6969
7070private lateinit var testGenerator: TestCaseGenerator
@@ -74,12 +74,12 @@ private var idCounter: Long = 0
7474
7575private fun EngineProcessModel.setup (kryoHelper : KryoHelper , watchdog : IdleWatchdog , realProtocol : IProtocol ) {
7676 val model = this
77- watchdog.wrapActiveCall (setupUtContext) { params ->
77+ watchdog.bracketActiveCall (setupUtContext, " UtContext setup " ) { params ->
7878 UtContext .setUtContext(UtContext (URLClassLoader (params.classpathForUrlsClassloader.map {
7979 File (it).toURI().toURL()
8080 }.toTypedArray())))
8181 }
82- watchdog.wrapActiveCall (createTestGenerator) { params ->
82+ watchdog.bracketActiveCall (createTestGenerator, " Creating Test Generator " ) { params ->
8383 AnalyticsConfigureUtil .configureML()
8484 Instrumenter .adapter = RdInstrumenter (realProtocol.rdInstrumenterAdapter)
8585 testGenerator = TestCaseGenerator (buildDirs = params.buildDir.map { Paths .get(it) },
@@ -90,39 +90,43 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
9090 runBlocking {
9191 model.isCancelled.startSuspending(Unit )
9292 }
93- })
93+ }
94+ )
9495 }
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() }
119122
120- val id = ++ idCounter
123+ val id = ++ idCounter
121124
122- testSets[id] = result
123- GenerateResult (result.size, id)
125+ testSets[id] = result
126+ GenerateResult (result.size, id)
127+ }
124128 }
125- watchdog.wrapActiveCall (render) { params ->
129+ watchdog.bracketActiveCall (render, " Rendering tests " ) { params ->
126130 val testFramework = testFrameworkByName(params.testFramework)
127131 val staticMocking = if (params.staticsMocking.startsWith(" No" )) {
128132 NoStaticMocking
@@ -153,11 +157,10 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
153157 RenderResult (it.generatedCode, it.utilClassKind?.javaClass?.simpleName)
154158 }
155159 }
156- watchdog.wrapActiveCall(stopProcess) { watchdog.stopProtocol() }
157- watchdog.wrapActiveCall(obtainClassId) { canonicalName ->
160+ watchdog.bracketActiveCall(obtainClassId, " Obtain class id in UtContext" ) { canonicalName ->
158161 kryoHelper.writeObject(UtContext .currentContext()!! .classLoader.loadClass(canonicalName).id)
159162 }
160- watchdog.wrapActiveCall (findMethodsInClassMatchingSelected) { params ->
163+ watchdog.bracketActiveCall (findMethodsInClassMatchingSelected, " Find methods in Class " ) { params ->
161164 val classId = kryoHelper.readObject<ClassId >(params.classId)
162165 val selectedMethodDescriptions =
163166 params.methodDescriptions.map { MethodDescription (it.name, it.containingClass, it.parametersTypes) }
@@ -168,7 +171,7 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
168171 .map { it.executableId }
169172 }))
170173 }
171- watchdog.wrapActiveCall (findMethodParamNames) { params ->
174+ watchdog.bracketActiveCall (findMethodParamNames, " Find method parameters names " ) { params ->
172175 val classId = kryoHelper.readObject<ClassId >(params.classId)
173176 val byMethodDescription = kryoHelper.readObject<Map <MethodDescription , List <String >>>(params.bySignature)
174177 FindMethodParamNamesResult (kryoHelper.writeObject(
@@ -177,7 +180,7 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
177180 .toMap()
178181 ))
179182 }
180- watchdog.wrapActiveCall (writeSarifReport) { params ->
183+ watchdog.bracketActiveCall (writeSarifReport, " Writing Sarif report " ) { params ->
181184 val reportFilePath = Paths .get(params.reportFilePath)
182185 reportFilePath.parent.toFile().mkdirs()
183186 val sarifReport = SarifReport (
@@ -188,12 +191,12 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
188191 reportFilePath.toFile().writeText(sarifReport)
189192 sarifReport
190193 }
191- watchdog.wrapActiveCall (generateTestReport) { params ->
194+ watchdog.bracketActiveCall (generateTestReport, " Generating test report " ) { params ->
192195 val eventLogMessage = params.eventLogMessage
193196 val testPackageName: String? = params.testPackageName
194197 var hasWarnings = false
195198 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 )
197200 val isMultiPackage = params.isMultiPackage
198201 val (notifyMessage, statistics) = if (reports.size == 1 ) {
199202 val report = reports.first()
0 commit comments