inotify exposes a /proc interface to limit kernel memory usage. If those limits are set too low, inotify cannot add all watches. The integration test verifies, that Inotify yields an error in that case.
46 lines
1.4 KiB
Swift
46 lines
1.4 KiB
Swift
import ArgumentParser
|
|
import AsyncAlgorithms
|
|
import Foundation
|
|
import Subprocess
|
|
import Noora
|
|
|
|
struct TestCommand: AsyncParsableCommand {
|
|
static let configuration = CommandConfiguration(
|
|
commandName: "test",
|
|
abstract: "Run swift test in a linux container.",
|
|
aliases: ["t"],
|
|
)
|
|
|
|
@OptionGroup var global: GlobalOptions
|
|
|
|
// MARK: - Run
|
|
|
|
func run() async throws {
|
|
let noora = Noora()
|
|
let logger = global.makeLogger(labeled: "swift-inotify.cli.task.test")
|
|
let currentDirectory = FileManager.default.currentDirectoryPath
|
|
|
|
noora.info("Running tests on Linux.")
|
|
logger.debug("Current directory", metadata: ["current-directory": "\(currentDirectory)"])
|
|
async let monitorResult = Subprocess.run(
|
|
.name("docker"),
|
|
arguments: ["run", "-v", "\(currentDirectory):/code", "--security-opt", "systempaths=unconfined", "--platform", "linux/arm64", "-w", "/code", "swift:latest", "/bin/bash", "-c", "swift test --skip InotifyLimitTests; swift test --skip-build --filter InotifyLimitTests"],
|
|
preferredBufferSize: 10,
|
|
) { execution, standardInput, standardOutput, standardError in
|
|
print("")
|
|
let stdout = standardOutput.lines()
|
|
let stderr = standardError.lines()
|
|
for try await line in merge(stdout, stderr) {
|
|
noora.passthrough("\(line)")
|
|
}
|
|
print("")
|
|
}
|
|
|
|
if (try await monitorResult.terminationStatus.isSuccess) {
|
|
noora.success("All tests completed successfully.")
|
|
} else {
|
|
noora.error("Not all tests completed successfully.")
|
|
}
|
|
}
|
|
}
|