From f2ba4a3e6e3165e4cd670ce775160448a63c44da Mon Sep 17 00:00:00 2001 From: Alexander Shabalin Date: Fri, 26 Jan 2024 13:34:44 +0100 Subject: [PATCH] [K/N][tests] Use HostExecutor in new test infra --- .../support/runner/RunnerWithExecutor.kt | 26 ++++++++------- .../blackbox/support/runner/TestRunners.kt | 32 ++++++++----------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/RunnerWithExecutor.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/RunnerWithExecutor.kt index bc4ef927004..b3807360e70 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/RunnerWithExecutor.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/RunnerWithExecutor.kt @@ -27,34 +27,36 @@ internal class RunnerWithExecutor( get() = if (testRun.runParameters.has()) TCTestOutputFilter else TestOutputFilter.NO_FILTERING private val programArgs = mutableListOf().apply { + add(executable.executable.executableFile.absolutePath) testRun.runParameters.forEach { it.applyTo(this) } } - private fun inputStreamFromTestParameter(): InputStream = + private fun inputStreamFromTestParameter(): InputStream? = testRun.runParameters.firstIsInstanceOrNull() ?.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") diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRunners.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRunners.kt index 9e8c72628fa..4efaadc622a 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRunners.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/runner/TestRunners.kt @@ -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().value) { NoopTestRunner } else with(get()) { - 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) } }