fun startAspireHost()

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)
                }
            }
        }
    }