2
import AutomaticTermination
6
import LocalHostDeterminer
13
public final class RunTestsOnRemoteQueueCommand: Command {
14
public let name = "runTestsOnRemoteQueue"
15
public let description = "Starts queue server on remote machine if needed and runs tests on the remote queue. Waits for resuls to come back."
16
public let arguments: Arguments = [
17
ArgumentDescriptions.emceeVersion.asOptional,
18
ArgumentDescriptions.junit.asOptional,
19
ArgumentDescriptions.queueServerConfigurationLocation.asRequired,
20
ArgumentDescriptions.remoteCacheConfig.asOptional,
21
ArgumentDescriptions.tempFolder.asOptional,
22
ArgumentDescriptions.testArgFile.asRequired,
23
ArgumentDescriptions.trace.asOptional,
24
ArgumentDescriptions.hostname.asOptional,
29
public init(di: DI) throws {
33
public func run(payload: CommandPayload) throws {
34
let hostname: String = try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.hostname.name) ?? LocalHostDeterminer.currentHostAddress
35
try HostnameSetup.update(hostname: hostname, di: di)
37
let httpRestServer = HTTPRESTServer(
38
automaticTerminationController: StayAliveTerminationController(),
40
portProvider: AnyAvailablePortProvider(),
44
let commonReportOutput = ReportOutput(
45
junit: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.junit.name),
46
tracingReport: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.trace.name)
48
let emceeVersion: Version = try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.emceeVersion.name) ?? EmceeVersion.version
50
let logger = try di.get(ContextualLogger.self)
52
let remoteCacheConfig = try ArgumentsReader.remoteCacheConfig(
53
try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.remoteCacheConfig.name)
56
let tempFolder = try TemporaryFolder(containerPath: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.tempFolder.name))
58
let queueServerConfiguration = try ArgumentsReader.queueServerConfiguration(
59
location: try payload.expectedSingleTypedValue(
60
argumentName: ArgumentDescriptions.queueServerConfigurationLocation.name
62
resourceLocationResolver: try di.get()
64
let testArgFile = try ArgumentsReader.testArgFile(
65
try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.testArgFile.name)
68
try RunTestsOnRemoteQueueLogic(di: di).run(
69
commonReportOutput: commonReportOutput,
70
emceeVersion: emceeVersion,
73
queueServerConfiguration: queueServerConfiguration,
74
remoteCacheConfig: remoteCacheConfig,
75
tempFolder: tempFolder,
76
testArgFile: testArgFile,
77
httpRestServer: httpRestServer