Skip to content

Commit 4ff2eb2

Browse files
committed
Skip tests that rely on snapshots for platforms where snapshots are not available
Add required system packages that are missing on debian 12 and fedora 39
1 parent c202b02 commit 4ff2eb2

File tree

4 files changed

+51
-10
lines changed

4 files changed

+51
-10
lines changed

Sources/LinuxPlatform/Linux.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ public struct Linux: Platform {
202202
"libuuid-devel",
203203
"libxml2-devel",
204204
"python3-devel",
205+
"libstdc++-devel",
206+
"libstdc++-static",
205207
]
206208
case "debian12":
207209
[
@@ -218,6 +220,7 @@ public struct Linux: Platform {
218220
"tzdata",
219221
"git",
220222
"gcc",
223+
"libstdc++-12-dev",
221224
]
222225
default:
223226
[]

Tests/SwiftlyTests/InstallTests.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ final class InstallTests: SwiftlyTests {
3939

4040
/// Tests that `swiftly install a.b` installs the latest patch version of Swift a.b.
4141
func testInstallLatestPatchVersion() async throws {
42+
let snapshotsAvailable = try await self.snapshotsAvailable()
43+
try XCTSkipIf(!snapshotsAvailable)
44+
4245
guard try await self.baseTestConfig().platform.name != "ubi9" else {
4346
print("Skipping test due to insufficient download availability for ubi9")
4447
return
@@ -133,6 +136,9 @@ final class InstallTests: SwiftlyTests {
133136

134137
/// Tests that `swiftly install main-snapshot` installs the latest available main snapshot.
135138
func testInstallLatestMainSnapshot() async throws {
139+
let snapshotsAvailable = try await self.snapshotsAvailable()
140+
try XCTSkipIf(!snapshotsAvailable)
141+
136142
try await self.withTestHome {
137143
try await self.withMockedToolchain {
138144
var cmd = try self.parseCommand(Install.self, ["install", "main-snapshot", "--post-install-file=\(Swiftly.currentPlatform.getTempFilePath().path)"])
@@ -165,6 +171,9 @@ final class InstallTests: SwiftlyTests {
165171

166172
/// Tests that `swiftly install a.b-snapshot` installs the latest available a.b release snapshot.
167173
func testInstallLatestReleaseSnapshot() async throws {
174+
let snapshotsAvailable = try await self.snapshotsAvailable()
175+
try XCTSkipIf(!snapshotsAvailable)
176+
168177
try await self.withTestHome {
169178
try await self.withMockedToolchain {
170179
var cmd = try self.parseCommand(Install.self, ["install", "6.0-snapshot", "--post-install-file=\(Swiftly.currentPlatform.getTempFilePath().path)"])
@@ -249,12 +258,18 @@ final class InstallTests: SwiftlyTests {
249258

250259
/// Tests that attempting to install main snapshots that are already installed doesn't result in an error.
251260
func testInstallDuplicateMainSnapshots() async throws {
261+
let snapshotsAvailable = try await self.snapshotsAvailable()
262+
try XCTSkipIf(!snapshotsAvailable)
263+
252264
try await self.duplicateTest("main-snapshot-2023-04-01")
253265
try await self.duplicateTest("main-snapshot")
254266
}
255267

256268
/// Tests that attempting to install release snapshots that are already installed doesn't result in an error.
257269
func testInstallDuplicateReleaseSnapshots() async throws {
270+
let snapshotsAvailable = try await self.snapshotsAvailable()
271+
try XCTSkipIf(!snapshotsAvailable)
272+
258273
try await self.duplicateTest("6.0-snapshot-2024-06-18")
259274
try await self.duplicateTest("6.0-snapshot")
260275
}

Tests/SwiftlyTests/SwiftlyTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,20 @@ class SwiftlyTests: XCTestCase {
373373
let toolchainVersion = String(decoding: outputData, as: UTF8.self).trimmingCharacters(in: .newlines)
374374
return try ToolchainVersion(parsing: toolchainVersion)
375375
}
376+
377+
func snapshotsAvailable() async throws -> Bool {
378+
let pd = try await Swiftly.currentPlatform.detectPlatform(disableConfirmation: true, platform: nil)
379+
380+
// Snapshots are currently unavailable for these platforms on swift.org
381+
// TODO: remove these once snapshots are available for them
382+
let snapshotsUnavailable = [
383+
PlatformDefinition.ubuntu2404,
384+
PlatformDefinition.fedora39,
385+
PlatformDefinition.debian12,
386+
]
387+
388+
return !snapshotsUnavailable.contains(pd)
389+
}
376390
}
377391

378392
public class TestOutputHandler: SwiftlyCore.OutputHandler {

Tests/SwiftlyTests/UpdateTests.swift

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ final class UpdateTests: SwiftlyTests {
8484

8585
/// Verify that a toolchain can be updated to the latest patch version of that toolchain's minor version.
8686
func testUpdateToLatestPatch() async throws {
87+
let snapshotsAvailable = try await self.snapshotsAvailable()
88+
try XCTSkipIf(!snapshotsAvailable)
89+
8790
try await self.withTestHome {
8891
try await self.withMockedToolchain {
8992
try await self.installMockedToolchain(selector: "5.9.0")
@@ -111,16 +114,16 @@ final class UpdateTests: SwiftlyTests {
111114
func testUpdateInUse() async throws {
112115
try await self.withTestHome {
113116
try await self.withMockedToolchain {
114-
try await self.installMockedToolchain(selector: "5.9.0")
117+
try await self.installMockedToolchain(selector: "6.0.0")
115118

116119
var update = try self.parseCommand(Update.self, ["update", "-y", "--no-verify", "--post-install-file=\(Swiftly.currentPlatform.getTempFilePath().path)"])
117120
try await update.run()
118121

119122
let config = try Config.load()
120123
let inUse = config.inUse!.asStableRelease!
121-
XCTAssertGreaterThan(inUse, .init(major: 5, minor: 9, patch: 0))
122-
XCTAssertEqual(inUse.major, 5)
123-
XCTAssertEqual(inUse.minor, 9)
124+
XCTAssertGreaterThan(inUse, .init(major: 6, minor: 0, patch: 0))
125+
XCTAssertEqual(inUse.major, 6)
126+
XCTAssertEqual(inUse.minor, 0)
124127
XCTAssertGreaterThan(inUse.patch, 0)
125128

126129
try await self.validateInstalledToolchains(
@@ -135,6 +138,9 @@ final class UpdateTests: SwiftlyTests {
135138

136139
/// Verifies that snapshots, both from the main branch and from development branches, can be updated.
137140
func testUpdateSnapshot() async throws {
141+
let snapshotsAvailable = try await self.snapshotsAvailable()
142+
try XCTSkipIf(!snapshotsAvailable)
143+
138144
let branches: [ToolchainVersion.Snapshot.Branch] = [
139145
.main,
140146
.release(major: 6, minor: 0),
@@ -170,20 +176,20 @@ final class UpdateTests: SwiftlyTests {
170176
func testUpdateSelectsLatestMatchingStableRelease() async throws {
171177
try await self.withTestHome {
172178
try await self.withMockedToolchain {
173-
try await self.installMockedToolchain(selector: "5.9.1")
174-
try await self.installMockedToolchain(selector: "5.9.0")
179+
try await self.installMockedToolchain(selector: "6.0.1")
180+
try await self.installMockedToolchain(selector: "6.0.0")
175181

176-
var update = try self.parseCommand(Update.self, ["update", "-y", "5.9", "--no-verify", "--post-install-file=\(Swiftly.currentPlatform.getTempFilePath().path)"])
182+
var update = try self.parseCommand(Update.self, ["update", "-y", "6.0", "--no-verify", "--post-install-file=\(Swiftly.currentPlatform.getTempFilePath().path)"])
177183
try await update.run()
178184

179185
let config = try Config.load()
180186
let inUse = config.inUse!.asStableRelease!
181-
XCTAssertEqual(inUse.major, 5)
182-
XCTAssertEqual(inUse.minor, 9)
187+
XCTAssertEqual(inUse.major, 6)
188+
XCTAssertEqual(inUse.minor, 0)
183189
XCTAssertGreaterThan(inUse.patch, 1)
184190

185191
try await self.validateInstalledToolchains(
186-
[config.inUse!, .init(major: 5, minor: 9, patch: 0)],
192+
[config.inUse!, .init(major: 6, minor: 0, patch: 0)],
187193
description: "update with ambiguous selector should update the latest matching toolchain"
188194
)
189195
}
@@ -192,6 +198,9 @@ final class UpdateTests: SwiftlyTests {
192198

193199
/// Verify that the latest of all the matching snapshot toolchains is updated.
194200
func testUpdateSelectsLatestMatchingSnapshotRelease() async throws {
201+
let snapshotsAvailable = try await self.snapshotsAvailable()
202+
try XCTSkipIf(!snapshotsAvailable)
203+
195204
let branches: [ToolchainVersion.Snapshot.Branch] = [
196205
.main,
197206
.release(major: 6, minor: 0),

0 commit comments

Comments
 (0)