Skip to content

Commit 45a0614

Browse files
Update EndToEndTests to DRY out code a bit, add tests for amazonlinux2 and fedora39
1 parent eed7c21 commit 45a0614

File tree

1 file changed

+94
-45
lines changed

1 file changed

+94
-45
lines changed

Tests/SwiftSDKGeneratorTests/EndToEndTests.swift

+94-45
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,12 @@ extension FileManager {
3434
try createDirectory(at: temporaryDirectory, withIntermediateDirectories: false)
3535
defer {
3636
// Best effort cleanup.
37-
do {
38-
if cleanup {
39-
try removeItem(at: temporaryDirectory)
40-
logger.info("Removed temporary directory")
41-
} else {
42-
logger.info("Keeping temporary directory")
43-
}
44-
} catch {}
37+
if cleanup {
38+
try? removeItem(at: temporaryDirectory)
39+
logger.info("Removed temporary directory")
40+
} else {
41+
logger.info("Keeping temporary directory")
42+
}
4543
}
4644

4745
logger.info("Created temporary directory")
@@ -58,7 +56,7 @@ func buildSDK(_ logger: Logger, scratchPath: String, withArguments runArguments:
5856
logger[metadataKey: "runArguments"] = "\"\(runArguments)\""
5957
logger[metadataKey: "scratchPath"] = "\(scratchPath)"
6058

61-
logger.info("Building SDK")
59+
logger.info("Building Swift SDK")
6260

6361
var packageDirectory = FilePath(#filePath)
6462
packageDirectory.removeLastComponent()
@@ -67,7 +65,7 @@ func buildSDK(_ logger: Logger, scratchPath: String, withArguments runArguments:
6765
let generatorOutput = try await Shell.readStdout(
6866
"cd \(packageDirectory) && swift run --scratch-path \"\(scratchPath)\" swift-sdk-generator make-linux-sdk \(runArguments)"
6967
)
70-
logger.info("Finished building SDK")
68+
logger.info("Finished building Swift SDK")
7169

7270
let installCommand = try XCTUnwrap(generatorOutput.split(separator: "\n").first {
7371
$0.contains("swift experimental-sdk install")
@@ -78,16 +76,16 @@ func buildSDK(_ logger: Logger, scratchPath: String, withArguments runArguments:
7876
).stem
7977
logger[metadataKey: "bundleName"] = "\(bundleName)"
8078

81-
logger.info("Checking installed SDKs")
79+
logger.info("Checking installed Swift SDKs")
8280
let installedSDKs = try await Shell.readStdout("swift experimental-sdk list").components(separatedBy: "\n")
8381

8482
// Make sure this bundle hasn't been installed already.
8583
if installedSDKs.contains(bundleName) {
86-
logger.info("Removing existing SDK")
84+
logger.info("Removing existing Swift SDK")
8785
try await Shell.run("swift experimental-sdk remove \(bundleName)")
8886
}
8987

90-
logger.info("Installing new SDK")
88+
logger.info("Installing new Swift SDK")
9189
let installOutput = try await Shell.readStdout(String(installCommand))
9290
XCTAssertTrue(installOutput.contains("successfully installed"))
9391

@@ -154,15 +152,25 @@ struct SDKConfiguration {
154152
var linuxDistributionVersion: String
155153
var architecture: String
156154
var withDocker: Bool
155+
var containerImageSuffix: String?
157156

158-
var bundleName: String { "\(linuxDistributionName)_\(linuxDistributionVersion)_\(architecture)_\(swiftVersion)-RELEASE\(withDocker ? "_with-docker" : "")" }
157+
var bundleName: String {
158+
let sdkPrefix = containerImageSuffix ?? "\(linuxDistributionName)_\(linuxDistributionVersion)"
159+
return "\(sdkPrefix)_\(architecture)_\(swiftVersion)-RELEASE\(withDocker ? "_with-docker" : "")"
160+
}
159161

160162
func withDocker(_ enabled: Bool = true) -> SDKConfiguration {
161163
var res = self
162164
res.withDocker = enabled
163165
return res
164166
}
165167

168+
func withContainerImageSuffix(_ containerImageSuffix: String) -> SDKConfiguration {
169+
var res = self
170+
res.containerImageSuffix = containerImageSuffix
171+
return res
172+
}
173+
166174
func withArchitecture(_ arch: String) -> SDKConfiguration {
167175
var res = self
168176
res.architecture = arch
@@ -175,14 +183,22 @@ struct SDKConfiguration {
175183
}
176184

177185
var sdkGeneratorArguments: String {
186+
// Build the container image tag
187+
var containerImage: String? = nil
188+
if let containerImageSuffix {
189+
containerImage = "swift:\(swiftVersion)-\(containerImageSuffix)"
190+
}
191+
178192
return [
179193
"--sdk-name \(bundleName)",
180194
"--host-toolchain",
181195
withDocker ? "--with-docker" : nil,
196+
containerImage != nil ? "--from-container-image" : nil, containerImage,
182197
"--swift-version \(swiftVersion)-RELEASE",
183198
testLinuxSwiftSDKs ? "--host \(hostArch!)-unknown-linux-gnu" : nil,
184199
"--target \(architecture)-unknown-linux-gnu",
185-
"--linux-distribution-name \(linuxDistributionName)"
200+
"--linux-distribution-name \(linuxDistributionName)",
201+
"--linux-distribution-version \(linuxDistributionVersion)"
186202
].compactMap{ $0 }.joined(separator: " ")
187203
}
188204
}
@@ -273,6 +289,8 @@ func buildTestcase(_ logger: Logger, testcase: String, bundleName: String, tempD
273289
}
274290

275291
func buildTestcases(config: SDKConfiguration) async throws {
292+
try skipSlow()
293+
276294
var logger = Logger(label: "EndToEndTests")
277295
logger[metadataKey: "testcase"] = "testPackageInitExecutable"
278296

@@ -292,17 +310,26 @@ func buildTestcases(config: SDKConfiguration) async throws {
292310
try await buildSDK(logger, scratchPath: tempDir.path, withArguments: config.sdkGeneratorArguments)
293311
}
294312

295-
logger.info("Built SDK")
313+
logger.info("Built Swift SDK")
314+
315+
// Cleanup
316+
let cleanupSdk: () async -> Void = {
317+
logger.info("Removing Swift SDK to cleanup...")
318+
try? await Shell.run("swift experimental-sdk remove \(bundleName)")
319+
}
296320

297321
for testcase in testcases {
298-
try await FileManager.default.withTemporaryDirectory(logger: logger) { tempDir in
299-
try await buildTestcase(logger, testcase: testcase, bundleName: bundleName, tempDir: tempDir)
322+
do {
323+
try await FileManager.default.withTemporaryDirectory(logger: logger) { tempDir in
324+
try await buildTestcase(logger, testcase: testcase, bundleName: bundleName, tempDir: tempDir)
325+
}
326+
} catch {
327+
await cleanupSdk()
328+
throw error
300329
}
301330
}
302331

303-
// Cleanup
304-
logger.info("Removing SDK to cleanup...")
305-
try await Shell.run("swift experimental-sdk remove \(bundleName)")
332+
await cleanupSdk()
306333
}
307334

308335
final class Swift59_UbuntuEndToEndTests: XCTestCase {
@@ -315,22 +342,18 @@ final class Swift59_UbuntuEndToEndTests: XCTestCase {
315342
)
316343

317344
func testAarch64Direct() async throws {
318-
try skipSlow()
319345
try await buildTestcases(config: config.withArchitecture("aarch64"))
320346
}
321347

322348
func testX86_64Direct() async throws {
323-
try skipSlow()
324349
try await buildTestcases(config: config.withArchitecture("x86_64"))
325350
}
326351

327352
func testAarch64FromContainer() async throws {
328-
try skipSlow()
329353
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
330354
}
331355

332356
func testX86_64FromContainer() async throws {
333-
try skipSlow()
334357
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
335358
}
336359
}
@@ -345,22 +368,18 @@ final class Swift510_UbuntuEndToEndTests: XCTestCase {
345368
)
346369

347370
func testAarch64Direct() async throws {
348-
try skipSlow()
349371
try await buildTestcases(config: config.withArchitecture("aarch64"))
350372
}
351373

352374
func testX86_64Direct() async throws {
353-
try skipSlow()
354375
try await buildTestcases(config: config.withArchitecture("x86_64"))
355376
}
356377

357378
func testAarch64FromContainer() async throws {
358-
try skipSlow()
359379
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
360380
}
361381

362382
func testX86_64FromContainer() async throws {
363-
try skipSlow()
364383
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
365384
}
366385
}
@@ -375,22 +394,18 @@ final class Swift60_UbuntuEndToEndTests: XCTestCase {
375394
)
376395

377396
func testAarch64Direct() async throws {
378-
try skipSlow()
379397
try await buildTestcases(config: config.withArchitecture("aarch64"))
380398
}
381399

382400
func testX86_64Direct() async throws {
383-
try skipSlow()
384401
try await buildTestcases(config: config.withArchitecture("x86_64"))
385402
}
386403

387404
func testAarch64FromContainer() async throws {
388-
try skipSlow()
389405
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
390406
}
391407

392408
func testX86_64FromContainer() async throws {
393-
try skipSlow()
394409
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
395410
}
396411
}
@@ -405,13 +420,19 @@ final class Swift59_RHELEndToEndTests: XCTestCase {
405420
)
406421

407422
func testAarch64FromContainer() async throws {
408-
try skipSlow()
409-
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
423+
try await buildTestcases(config: config.withArchitecture("aarch64"))
410424
}
411425

412426
func testX86_64FromContainer() async throws {
413-
try skipSlow()
414-
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
427+
try await buildTestcases(config: config.withArchitecture("x86_64"))
428+
}
429+
430+
func testAmazonLinux2Aarch64FromContainer() async throws {
431+
try await buildTestcases(config: config.withArchitecture("aarch64").withContainerImageSuffix("amazonlinux2"))
432+
}
433+
434+
func testAmazonLinux2X86_64FromContainer() async throws {
435+
try await buildTestcases(config: config.withArchitecture("x86_64").withContainerImageSuffix("amazonlinux2"))
415436
}
416437
}
417438

@@ -425,13 +446,27 @@ final class Swift510_RHELEndToEndTests: XCTestCase {
425446
)
426447

427448
func testAarch64FromContainer() async throws {
428-
try skipSlow()
429-
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
449+
try await buildTestcases(config: config.withArchitecture("aarch64"))
430450
}
431451

432452
func testX86_64FromContainer() async throws {
433-
try skipSlow()
434-
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
453+
try await buildTestcases(config: config.withArchitecture("x86_64"))
454+
}
455+
456+
func testAmazonLinux2Aarch64FromContainer() async throws {
457+
try await buildTestcases(config: config.withArchitecture("aarch64").withContainerImageSuffix("amazonlinux2"))
458+
}
459+
460+
func testAmazonLinux2X86_64FromContainer() async throws {
461+
try await buildTestcases(config: config.withArchitecture("x86_64").withContainerImageSuffix("amazonlinux2"))
462+
}
463+
464+
func testFedora39Aarch64FromContainer() async throws {
465+
try await buildTestcases(config: config.withArchitecture("aarch64").withContainerImageSuffix("fedora39"))
466+
}
467+
468+
func testFedora39X86_64FromContainer() async throws {
469+
try await buildTestcases(config: config.withArchitecture("x86_64").withContainerImageSuffix("fedora39"))
435470
}
436471
}
437472

@@ -445,12 +480,26 @@ final class Swift60_RHELEndToEndTests: XCTestCase {
445480
)
446481

447482
func testAarch64FromContainer() async throws {
448-
try skipSlow()
449-
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
483+
try await buildTestcases(config: config.withArchitecture("aarch64"))
450484
}
451485

452486
func testX86_64FromContainer() async throws {
453-
try skipSlow()
454-
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
487+
try await buildTestcases(config: config.withArchitecture("x86_64"))
488+
}
489+
490+
func testAmazonLinux2Aarch64FromContainer() async throws {
491+
try await buildTestcases(config: config.withArchitecture("aarch64").withContainerImageSuffix("amazonlinux2"))
492+
}
493+
494+
func testAmazonLinux2X86_64FromContainer() async throws {
495+
try await buildTestcases(config: config.withArchitecture("x86_64").withContainerImageSuffix("amazonlinux2"))
496+
}
497+
498+
func testFedora39Aarch64FromContainer() async throws {
499+
try await buildTestcases(config: config.withArchitecture("aarch64").withContainerImageSuffix("fedora39"))
500+
}
501+
502+
func testFedora39X86_64FromContainer() async throws {
503+
try await buildTestcases(config: config.withArchitecture("x86_64").withContainerImageSuffix("fedora39"))
455504
}
456505
}

0 commit comments

Comments
 (0)