Emcee

Форк
0
/
RunTestsOnRemoteQueueCommand.swift 
80 строк · 3.3 Кб
1
import ArgLib
2
import AutomaticTermination
3
import EmceeDI
4
import EmceeLogging
5
import EmceeVersion
6
import LocalHostDeterminer
7
import PathLib
8
import QueueModels
9
import RESTServer
10
import Tmp
11
import TestArgFile
12

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,
25
    ]
26
    
27
    private let di: DI
28
    
29
    public init(di: DI) throws {
30
        self.di = di
31
    }
32
    
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)
36
        
37
        let httpRestServer = HTTPRESTServer(
38
            automaticTerminationController: StayAliveTerminationController(),
39
            logger: try di.get(),
40
            portProvider: AnyAvailablePortProvider(),
41
            useOnlyIPv4: false
42
        )
43

44
        let commonReportOutput = ReportOutput(
45
            junit: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.junit.name),
46
            tracingReport: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.trace.name)
47
        )
48
        let emceeVersion: Version = try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.emceeVersion.name) ?? EmceeVersion.version
49
        
50
        let logger = try di.get(ContextualLogger.self)
51

52
        let remoteCacheConfig = try ArgumentsReader.remoteCacheConfig(
53
            try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.remoteCacheConfig.name)
54
        )
55
        
56
        let tempFolder = try TemporaryFolder(containerPath: try payload.optionalSingleTypedValue(argumentName: ArgumentDescriptions.tempFolder.name))
57
        
58
        let queueServerConfiguration = try ArgumentsReader.queueServerConfiguration(
59
            location: try payload.expectedSingleTypedValue(
60
                argumentName: ArgumentDescriptions.queueServerConfigurationLocation.name
61
            ),
62
            resourceLocationResolver: try di.get()
63
        )
64
        let testArgFile = try ArgumentsReader.testArgFile(
65
            try payload.expectedSingleTypedValue(argumentName: ArgumentDescriptions.testArgFile.name)
66
        )
67
        
68
        try RunTestsOnRemoteQueueLogic(di: di).run(
69
            commonReportOutput: commonReportOutput,
70
            emceeVersion: emceeVersion,
71
            hostname: hostname,
72
            logger: logger,
73
            queueServerConfiguration: queueServerConfiguration,
74
            remoteCacheConfig: remoteCacheConfig,
75
            tempFolder: tempFolder,
76
            testArgFile: testArgFile,
77
            httpRestServer: httpRestServer
78
        )
79
    }
80
}
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.