[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 get() = if (testRun.runParameters.has<TestRunParameter.WithTCTestLogger>()) TCTestOutputFilter else TestOutputFilter.NO_FILTERING
private val programArgs = mutableListOf<String>().apply { private val programArgs = mutableListOf<String>().apply {
add(executable.executable.executableFile.absolutePath)
testRun.runParameters.forEach { it.applyTo(this) } testRun.runParameters.forEach { it.applyTo(this) }
} }
private fun inputStreamFromTestParameter(): InputStream = private fun inputStreamFromTestParameter(): InputStream? =
testRun.runParameters.firstIsInstanceOrNull<TestRunParameter.WithInputData>() testRun.runParameters.firstIsInstanceOrNull<TestRunParameter.WithInputData>()
?.let { ?.let {
ByteArrayInputStream(it.inputDataFile.readBytes()) ByteArrayInputStream(it.inputDataFile.readBytes())
} ?: ByteArrayInputStream(byteArrayOf()) }
override fun buildRun() = AbstractRun { override fun buildRun() = AbstractRun {
val stdin = inputStreamFromTestParameter()
val stdout = ByteArrayOutputStream() val stdout = ByteArrayOutputStream()
val stderr = ByteArrayOutputStream() val stderr = ByteArrayOutputStream()
val request = ExecuteRequest( val request = ExecuteRequest(programArgs[0]).apply {
executableAbsolutePath = executable.executable.executableFile.absolutePath, this.args.addAll(programArgs.drop(1))
args = programArgs, this.workingDirectory = executable.executable.executableFile.parentFile
stdin = stdin, inputStreamFromTestParameter()?.let {
stdout = stdout, this.stdin = it
stderr = stderr, }
timeout = testRun.checks.executionTimeoutCheck.timeout this.stdout = stdout
) this.stderr = stderr
this.timeout = testRun.checks.executionTimeoutCheck.timeout
}
val response = executor.execute(request) val response = executor.execute(request)
RunResult( RunResult(
testExecutable = executable, testExecutable = executable,
exitCode = response.exitCode, exitCode = response.exitCode,
timeout = request.timeout, timeout = request.timeout,
duration = response.executionTime, duration = response.executionTime,
hasFinishedOnTime = request.timeout >= response.executionTime, hasFinishedOnTime = response.exitCode != null,
processOutput = ProcessOutput( processOutput = ProcessOutput(
stdOut = outputFilter.filter(stdout.toString("UTF-8")), stdOut = outputFilter.filter(stdout.toString("UTF-8")),
stdErr = stderr.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.target.*
import org.jetbrains.kotlin.konan.test.blackbox.support.TestName import org.jetbrains.kotlin.konan.test.blackbox.support.TestName
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.* import org.jetbrains.kotlin.konan.test.blackbox.support.settings.*
import org.jetbrains.kotlin.native.executors.EmulatorExecutor import org.jetbrains.kotlin.native.executors.*
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.test.services.JUnit5Assertions.fail import org.jetbrains.kotlin.test.services.JUnit5Assertions.fail
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@@ -20,22 +17,19 @@ internal object TestRunners {
if (get<ForcedNoopTestRunner>().value) { if (get<ForcedNoopTestRunner>().value) {
NoopTestRunner NoopTestRunner
} else with(get<KotlinNativeTargets>()) { } else with(get<KotlinNativeTargets>()) {
if (testTarget == hostTarget) { val configurables = configurables
LocalTestRunner(testRun)
} else {
val configurables = configurables
val executor = cached( val executor = cached(
when { when {
configurables is ConfigurablesWithEmulator -> EmulatorExecutor(configurables) testTarget == hostTarget -> HostExecutor()
configurables is AppleConfigurables && configurables.targetTriple.isSimulator -> configurables is ConfigurablesWithEmulator -> EmulatorExecutor(configurables)
XcodeSimulatorExecutor(configurables) configurables is AppleConfigurables && configurables.targetTriple.isSimulator ->
configurables is AppleConfigurables && RosettaExecutor.availableFor(configurables) -> RosettaExecutor(configurables) XcodeSimulatorExecutor(configurables)
else -> runningOnUnsupportedTarget() configurables is AppleConfigurables && RosettaExecutor.availableFor(configurables) -> RosettaExecutor(configurables)
} else -> runningOnUnsupportedTarget()
) }
RunnerWithExecutor(executor, testRun) )
} RunnerWithExecutor(executor, testRun)
} }
} }