in rider/src/main/kotlin/com/jetbrains/aspire/rider/unitTests/AspireUnitTestService.kt [47:108]
fun startAspireHost(
lifetime: Lifetime,
request: StartAspireHostRequest,
rdTask: RdTask<StartAspireHostResponse>
) {
val existingAspireHost = aspireUnitTestHosts[request.unitTestRunId]
if (existingAspireHost != null) {
LOG.trace { "Found existing aspire host for ${request.unitTestRunId}" }
val response = StartAspireHostResponse(existingAspireHost.environmentVariables.toTypedArray())
rdTask.set(response)
return
}
scope.launch(Dispatchers.Default) {
lifetimedCoroutineScope(lifetime) {
LOG.trace("Starting an Aspire host for a unit test session")
val aspireWorker = AspireWorker.getInstance(project)
aspireWorker.start()
val dcpEnvironmentVariables = aspireWorker.getEnvironmentVariablesForDcpConnection()
val dcpInstancePrefix = generateDcpInstancePrefix()
val aspireHostProjectPath = request.aspireHostProjectPath.toNioPath()
val aspireHostConfig = AspireHostModelConfig(
dcpInstancePrefix,
null,
aspireHostProjectPath.absolutePathString(),
null,
null,
null,
null
)
val environmentVariables = buildList {
dcpEnvironmentVariables.forEach { envVar ->
add(AspireHostEnvironmentVariable(envVar.key, envVar.value))
}
add(AspireHostEnvironmentVariable(DCP_INSTANCE_ID_PREFIX, dcpInstancePrefix))
}
val aspireUnitTestServiceHost = AspireHostForUnitTestRun(
aspireHostConfig.id,
environmentVariables
)
val currentAspireHost =
aspireUnitTestHosts.putIfAbsent(request.unitTestRunId, aspireUnitTestServiceHost)
if (currentAspireHost == null) {
withContext(Dispatchers.EDT) {
aspireWorker.startAspireHostModel(aspireHostConfig)
}
val response = StartAspireHostResponse(environmentVariables.toTypedArray())
rdTask.set(response)
} else {
val response = StartAspireHostResponse(currentAspireHost.environmentVariables.toTypedArray())
rdTask.set(response)
}
}
}
}