[K/N][tests] Use HostExecutor in new test infra

This commit is contained in:
Alexander Shabalin
2024-01-26 13:34:44 +01:00
committed by Space Team
parent 8c000b8319
commit f2ba4a3e6e
2 changed files with 27 additions and 31 deletions
@@ -27,34 +27,36 @@ internal class RunnerWithExecutor(
get() = if (testRun.runParameters.has<TestRunParameter.WithTCTestLogger>()) TCTestOutputFilter else TestOutputFilter.NO_FILTERING
private val programArgs = mutableListOf<String>().apply {
add(executable.executable.executableFile.absolutePath)
testRun.runParameters.forEach { it.applyTo(this) }
}
private fun inputStreamFromTestParameter(): InputStream =
private fun inputStreamFromTestParameter(): InputStream? =
testRun.runParameters.firstIsInstanceOrNull<TestRunParameter.WithInputData>()
?.let {
ByteArrayInputStream(it.inputDataFile.readBytes())
} ?: ByteArrayInputStream(byteArrayOf())
}
override fun buildRun() = AbstractRun {
val stdin = inputStreamFromTestParameter()
val stdout = ByteArrayOutputStream()
val stderr = ByteArrayOutputStream()
val request = ExecuteRequest(
executableAbsolutePath = executable.executable.executableFile.absolutePath,
args = programArgs,
stdin = stdin,
stdout = stdout,
stderr = stderr,
timeout = testRun.checks.executionTimeoutCheck.timeout
)
val request = ExecuteRequest(programArgs[0]).apply {
this.args.addAll(programArgs.drop(1))
this.workingDirectory = executable.executable.executableFile.parentFile
inputStreamFromTestParameter()?.let {
this.stdin = it
}
this.stdout = stdout
this.stderr = stderr
this.timeout = testRun.checks.executionTimeoutCheck.timeout
}
val response = executor.execute(request)
RunResult(
testExecutable = executable,
exitCode = response.exitCode,
timeout = request.timeout,
duration = response.executionTime,
hasFinishedOnTime = request.timeout >= response.executionTime,
hasFinishedOnTime = response.exitCode != null,
processOutput = ProcessOutput(
stdOut = outputFilter.filter(stdout.toString("UTF-8")),
stdErr = stderr.toString("UTF-8")
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.konan.test.blackbox.support.runner
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.test.blackbox.support.TestName
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.*
import org.jetbrains.kotlin.native.executors.EmulatorExecutor
import org.jetbrains.kotlin.native.executors.Executor
import org.jetbrains.kotlin.native.executors.RosettaExecutor
import org.jetbrains.kotlin.native.executors.XcodeSimulatorExecutor
import org.jetbrains.kotlin.native.executors.*
import org.jetbrains.kotlin.test.services.JUnit5Assertions.fail
import java.util.concurrent.ConcurrentHashMap
@@ -20,22 +17,19 @@ internal object TestRunners {
if (get<ForcedNoopTestRunner>().value) {
NoopTestRunner
} else with(get<KotlinNativeTargets>()) {
if (testTarget == hostTarget) {
LocalTestRunner(testRun)
} else {
val configurables = configurables
val configurables = configurables
val executor = cached(
when {
configurables is ConfigurablesWithEmulator -> EmulatorExecutor(configurables)
configurables is AppleConfigurables && configurables.targetTriple.isSimulator ->
XcodeSimulatorExecutor(configurables)
configurables is AppleConfigurables && RosettaExecutor.availableFor(configurables) -> RosettaExecutor(configurables)
else -> runningOnUnsupportedTarget()
}
)
RunnerWithExecutor(executor, testRun)
}
val executor = cached(
when {
testTarget == hostTarget -> HostExecutor()
configurables is ConfigurablesWithEmulator -> EmulatorExecutor(configurables)
configurables is AppleConfigurables && configurables.targetTriple.isSimulator ->
XcodeSimulatorExecutor(configurables)
configurables is AppleConfigurables && RosettaExecutor.availableFor(configurables) -> RosettaExecutor(configurables)
else -> runningOnUnsupportedTarget()
}
)
RunnerWithExecutor(executor, testRun)
}
}