Skip to content

Commit e47b9aa

Browse files
committed
fix sendable for strict concurrency on swift <=6.2
1 parent f54e9d3 commit e47b9aa

3 files changed

Lines changed: 73 additions & 33 deletions

File tree

Tests/SotoCoreTests/Credential/Login/LoginCredentialsProviderTests.swift

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,24 @@ import Testing
2525

2626
@Suite("Login Credentials Provider", .serialized)
2727
final class LoginCredentialsProviderTests {
28-
var tempDirectory: URL!
29-
30-
init() async throws {
31-
// Create temp directory
32-
tempDirectory = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
33-
try FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true)
28+
29+
// Helper to create a unique temp directory for each test
30+
func createTempDirectory() throws -> URL {
31+
let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
32+
try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true)
33+
return tempDir
3434
}
35-
36-
deinit {
37-
if let tempDirectory = tempDirectory {
38-
try? FileManager.default.removeItem(at: tempDirectory)
39-
}
35+
36+
// Helper to clean up temp directory
37+
func removeTempDirectory(_ url: URL) {
38+
try? FileManager.default.removeItem(at: url)
4039
}
4140

4241
@Test("Get credentials successfully with full flow")
4342
func getCredentialsSuccess() async throws {
43+
let tempDirectory = try createTempDirectory()
44+
defer { removeTempDirectory(tempDirectory) }
45+
4446
// Setup token file
4547
let privateKey = P256.Signing.PrivateKey()
4648
let pemKey = privateKey.pemRepresentation
@@ -142,6 +144,9 @@ final class LoginCredentialsProviderTests {
142144

143145
@Test("Get credentials with HTTP error returns proper error")
144146
func getCredentialsHTTPError() async throws {
147+
let tempDirectory = try createTempDirectory()
148+
defer { removeTempDirectory(tempDirectory) }
149+
145150
// Setup token file
146151
let privateKey = P256.Signing.PrivateKey()
147152
let pemKey = privateKey.pemRepresentation
@@ -196,6 +201,8 @@ final class LoginCredentialsProviderTests {
196201

197202
@Test("Get credentials with invalid response throws decoding error")
198203
func getCredentialsInvalidResponse() async throws {
204+
let tempDirectory = try createTempDirectory()
205+
defer { removeTempDirectory(tempDirectory) }
199206

200207
// Setup token file
201208
let privateKey = P256.Signing.PrivateKey()
@@ -251,6 +258,9 @@ final class LoginCredentialsProviderTests {
251258

252259
@Test("Get credentials with missing token file throws error")
253260
func getCredentialsTokenFileNotFound() async throws {
261+
let tempDirectory = try createTempDirectory()
262+
defer { removeTempDirectory(tempDirectory) }
263+
254264
// Create provider without token file
255265
let provider = try LoginCredentialsProvider.create(
256266
loginSession: "nonexistent-session",
@@ -268,6 +278,9 @@ final class LoginCredentialsProviderTests {
268278

269279
@Test("Get credentials returns cached token when not expired")
270280
func getCredentialsCachedToken() async throws {
281+
let tempDirectory = try createTempDirectory()
282+
defer { removeTempDirectory(tempDirectory) }
283+
271284
// Setup token file with future expiration
272285
let privateKey = P256.Signing.PrivateKey()
273286
let pemKey = privateKey.pemRepresentation
@@ -329,6 +342,9 @@ final class LoginCredentialsProviderTests {
329342

330343
@Test("Token validation fails when clientId is missing")
331344
func tokenValidationMissingClientId() async throws {
345+
let tempDirectory = try createTempDirectory()
346+
defer { removeTempDirectory(tempDirectory) }
347+
332348
let privateKey = P256.Signing.PrivateKey()
333349
let pemKey = privateKey.pemRepresentation
334350
let escapedPemKey = pemKey.replacingOccurrences(of: "\n", with: "\\n")
@@ -373,6 +389,9 @@ final class LoginCredentialsProviderTests {
373389

374390
@Test("Token validation fails when refreshToken is missing")
375391
func tokenValidationMissingRefreshToken() async throws {
392+
let tempDirectory = try createTempDirectory()
393+
defer { removeTempDirectory(tempDirectory) }
394+
376395
let privateKey = P256.Signing.PrivateKey()
377396
let pemKey = privateKey.pemRepresentation
378397
let escapedPemKey = pemKey.replacingOccurrences(of: "\n", with: "\\n")
@@ -416,6 +435,9 @@ final class LoginCredentialsProviderTests {
416435

417436
@Test("Token validation fails when dpopKey is missing")
418437
func tokenValidationMissingDpopKey() async throws {
438+
let tempDirectory = try createTempDirectory()
439+
defer { removeTempDirectory(tempDirectory) }
440+
419441
let tokenData = """
420442
{
421443
"accessToken": {
@@ -455,6 +477,9 @@ final class LoginCredentialsProviderTests {
455477

456478
@Test("Provider is immutable")
457479
func providerIsImmutable() throws {
480+
let tempDirectory = try createTempDirectory()
481+
defer { removeTempDirectory(tempDirectory) }
482+
458483
let provider = try LoginCredentialsProvider.create(
459484
loginSession: "test-session",
460485
loginRegion: .useast1,

Tests/SotoCoreTests/Credential/Login/LoginErrorHandlingTests.swift

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,23 @@ import Testing
2626

2727
@Suite("Login Error Handling Tests", .serialized)
2828
final class LoginErrorHandlingTests {
29-
var tempDirectory: URL!
30-
31-
init() async throws {
32-
tempDirectory = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
33-
try FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true)
29+
30+
// Helper to create a unique temp directory for each test
31+
func createTempDirectory() throws -> URL {
32+
let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
33+
try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true)
34+
return tempDir
3435
}
35-
36-
deinit {
37-
if let tempDirectory = tempDirectory {
38-
try? FileManager.default.removeItem(at: tempDirectory)
39-
}
36+
37+
// Helper to clean up temp directory
38+
func removeTempDirectory(_ url: URL) {
39+
try? FileManager.default.removeItem(at: url)
4040
}
4141

4242
@Test("Handle TOKEN_EXPIRED error correctly")
4343
func handleTokenExpiredError() async throws {
44+
let tempDirectory = try createTempDirectory()
45+
defer { removeTempDirectory(tempDirectory) }
4446

4547
let privateKey = P256.Signing.PrivateKey()
4648
let pemKey = privateKey.pemRepresentation
@@ -103,6 +105,8 @@ final class LoginErrorHandlingTests {
103105

104106
@Test("Handle USER_CREDENTIALS_CHANGED error correctly")
105107
func handleUserCredentialsChangedError() async throws {
108+
let tempDirectory = try createTempDirectory()
109+
defer { removeTempDirectory(tempDirectory) }
106110

107111
let privateKey = P256.Signing.PrivateKey()
108112
let pemKey = privateKey.pemRepresentation
@@ -162,6 +166,9 @@ final class LoginErrorHandlingTests {
162166

163167
@Test("Handle INSUFFICIENT_PERMISSIONS error correctly")
164168
func handleInsufficientPermissionsError() async throws {
169+
let tempDirectory = try createTempDirectory()
170+
defer { removeTempDirectory(tempDirectory) }
171+
165172
let privateKey = P256.Signing.PrivateKey()
166173
let pemKey = privateKey.pemRepresentation
167174
let escapedPemKey = pemKey.replacingOccurrences(of: "\n", with: "\\n")

Tests/SotoCoreTests/Credential/Login/TokenFileManagerTests.swift

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,25 @@ import Testing
2222

2323
@Suite("Token File Manager")
2424
final class TokenFileManagerTests {
25-
var tempDirectory: URL!
26-
var manager: TokenFileManager!
27-
28-
init() throws {
29-
tempDirectory = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
30-
try FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true)
31-
manager = TokenFileManager()
25+
let manager = TokenFileManager()
26+
27+
// Helper to create a unique temp directory for each test
28+
func createTempDirectory() throws -> URL {
29+
let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
30+
try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true)
31+
return tempDir
3232
}
33-
34-
deinit {
35-
if let tempDirectory = tempDirectory {
36-
try? FileManager.default.removeItem(at: tempDirectory)
37-
}
33+
34+
// Helper to clean up temp directory
35+
func removeTempDirectory(_ url: URL) {
36+
try? FileManager.default.removeItem(at: url)
3837
}
3938

4039
@Test("Construct token path with custom directory")
4140
func constructTokenPath() throws {
41+
let tempDirectory = try createTempDirectory()
42+
defer { removeTempDirectory(tempDirectory) }
43+
4244
let path = try manager.constructTokenPath(
4345
loginSession: "test-session",
4446
cacheDirectory: tempDirectory.path
@@ -71,6 +73,9 @@ final class TokenFileManagerTests {
7173

7274
@Test("Load and save token preserves all fields including idToken")
7375
func loadAndSaveToken() throws {
76+
let tempDirectory = try createTempDirectory()
77+
defer { removeTempDirectory(tempDirectory) }
78+
7479
// Create a test token file
7580
let privateKey = P256.Signing.PrivateKey()
7681
let pemKey = privateKey.pemRepresentation
@@ -142,6 +147,9 @@ final class TokenFileManagerTests {
142147

143148
@Test("Load token with invalid JSON throws error")
144149
func loadTokenInvalidJSON() throws {
150+
let tempDirectory = try createTempDirectory()
151+
defer { removeTempDirectory(tempDirectory) }
152+
145153
let invalidJSON = "{ invalid json }"
146154
let tokenPath = tempDirectory.appendingPathComponent("invalid.json").path
147155
try invalidJSON.write(toFile: tokenPath, atomically: true, encoding: .utf8)

0 commit comments

Comments
 (0)