[K/N][Tests] Use runProcess for code signing

^KT-61259
This commit is contained in:
Vladimir Sukharev
2024-01-29 18:32:42 +01:00
committed by Space Team
parent 524f0d335e
commit 1ca79e645a
@@ -10,10 +10,10 @@ import org.jetbrains.kotlin.cli.common.messages.*
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
import org.jetbrains.kotlin.compilerRunner.processCompilerOutput import org.jetbrains.kotlin.compilerRunner.processCompilerOutput
import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.test.blackbox.support.NativeTestSupport import org.jetbrains.kotlin.konan.test.blackbox.support.NativeTestSupport
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeTargets import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeTargets
import org.junit.jupiter.api.Assumptions import org.jetbrains.kotlin.native.executors.RunProcessException
import org.jetbrains.kotlin.native.executors.runProcess
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
import java.io.PrintStream import java.io.PrintStream
@@ -170,34 +170,14 @@ internal fun invokeCInterop(
} }
} }
private data class HostExecutionOutput(val executablePath: String, var exitCode: Int, var duration: Duration, val stdOut: String, val stdErr: String)
private fun executeHostProcess(executable: String, args: List<String> = listOf(), env: Map<String, String> = emptyMap()): HostExecutionOutput {
val processBuilder = ProcessBuilder(executable, *args.toTypedArray())
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
processBuilder.environment().putAll(env)
val process = processBuilder.start()
val (exitCode, duration) = measureTimedValue {
process.waitFor()
}
return HostExecutionOutput(
executable,
exitCode,
duration,
process.inputStream.bufferedReader().readText(),
process.errorStream.bufferedReader().readText(),
)
}
internal fun codesign(path: String) { internal fun codesign(path: String) {
Assumptions.assumeTrue(HostManager.hostIsMac) { "Apple specific code signing is needed" } val executableAbsolutePath = "/usr/bin/codesign"
val processOutput = executeHostProcess(executable = "/usr/bin/codesign", args = listOf("--verbose", "-s", "-", path)) val args = arrayOf("--verbose", "-s", "-", path)
check(processOutput.exitCode == 0) { try {
""" runProcess(executableAbsolutePath, *args) {
|Codesign failed with exitCode: ${processOutput.exitCode} timeout = Duration.parse("30s")
|stdout: ${processOutput.stdOut} }
|stderr: ${processOutput.stdErr} } catch (rpe: RunProcessException) {
""".trimMargin() throw AssertionError("`$executableAbsolutePath ${args.joinToString(" ")}` failed with exitCode=${rpe.exitCode}: ${rpe.message}")
} }
} }