Share the test passphrase through a RestorationTokenFixtures enum.

The legacy restoration token formats store the passphrase as a base64 string
whereas the current one exposes Data, so keep both representations of the
same value in one place instead of repeating the conversions in every test.
This commit is contained in:
Stefan Ceriu
2026-09-23 16:01:17 +03:00
parent b1923b418f
commit df3bdb992a
3 changed files with 18 additions and 13 deletions
@@ -36,7 +36,7 @@ struct KeychainControllerTests {
oauthData: "oauthData", oauthData: "oauthData",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectories: .init(), sessionDirectories: .init(),
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: "pusherClientID") pusherNotificationClientIdentifier: "pusherClientID")
keychain.setRestorationToken(restorationToken, forUsername: username) keychain.setRestorationToken(restorationToken, forUsername: username)
@@ -56,7 +56,7 @@ struct KeychainControllerTests {
oauthData: "oauthData", oauthData: "oauthData",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectories: .init(), sessionDirectories: .init(),
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: "pusherClientID") pusherNotificationClientIdentifier: "pusherClientID")
keychain.setRestorationToken(restorationToken, forUsername: username) keychain.setRestorationToken(restorationToken, forUsername: username)
#expect(keychain.restorationTokens().count == 1, "The keychain should have 1 restoration token.") #expect(keychain.restorationTokens().count == 1, "The keychain should have 1 restoration token.")
@@ -82,7 +82,7 @@ struct KeychainControllerTests {
oauthData: "oauthData", oauthData: "oauthData",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectories: .init(), sessionDirectories: .init(),
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: "pusherClientID") pusherNotificationClientIdentifier: "pusherClientID")
keychain.setRestorationToken(restorationToken, forUsername: "@test\(index):example.com") keychain.setRestorationToken(restorationToken, forUsername: "@test\(index):example.com")
} }
@@ -107,7 +107,7 @@ struct KeychainControllerTests {
oauthData: "oauthData", oauthData: "oauthData",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectories: .init(), sessionDirectories: .init(),
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: "pusherClientID") pusherNotificationClientIdentifier: "pusherClientID")
keychain.setRestorationToken(restorationToken, forUsername: "@test\(index):example.com") keychain.setRestorationToken(restorationToken, forUsername: "@test\(index):example.com")
} }
@@ -141,7 +141,7 @@ struct KeychainControllerTests {
oidcData: nil, oidcData: nil,
slidingSyncVersion: .proxy(url: "https://sync.example.com")), slidingSyncVersion: .proxy(url: "https://sync.example.com")),
sessionDirectory: .sessionsBaseDirectory.appending(component: UUID().uuidString), sessionDirectory: .sessionsBaseDirectory.appending(component: UUID().uuidString),
passphrase: Data("passphrase".utf8).base64EncodedString(), passphrase: RestorationTokenFixtures.base64Passphrase,
pusherNotificationClientIdentifier: "pusherClientID") pusherNotificationClientIdentifier: "pusherClientID")
let tokenData = try JSONEncoder().encode(unsupportedToken) let tokenData = try JSONEncoder().encode(unsupportedToken)
try underlyingKeychain.set(tokenData, key: "@test:example.com") try underlyingKeychain.set(tokenData, key: "@test:example.com")
@@ -23,7 +23,7 @@ struct RestorationTokenTests {
oidcData: "data-from-mas", oidcData: "data-from-mas",
slidingSyncVersion: .proxy(url: "https://sync.example.com")), slidingSyncVersion: .proxy(url: "https://sync.example.com")),
sessionDirectory: .sessionsBaseDirectory.appending(component: UUID().uuidString), sessionDirectory: .sessionsBaseDirectory.appending(component: UUID().uuidString),
passphrase: Data("passphrase".utf8).base64EncodedString(), passphrase: RestorationTokenFixtures.base64Passphrase,
pusherNotificationClientIdentifier: "pusher-identifier") pusherNotificationClientIdentifier: "pusher-identifier")
let data = try JSONEncoder().encode(originalToken) let data = try JSONEncoder().encode(originalToken)
@@ -46,7 +46,7 @@ struct RestorationTokenTests {
oidcData: "data-from-mas", oidcData: "data-from-mas",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectory: .sessionsBaseDirectory.appending(component: sessionDirectoryName), sessionDirectory: .sessionsBaseDirectory.appending(component: sessionDirectoryName),
passphrase: Data("passphrase".utf8).base64EncodedString(), passphrase: RestorationTokenFixtures.base64Passphrase,
pusherNotificationClientIdentifier: "pusher-identifier") pusherNotificationClientIdentifier: "pusher-identifier")
let data = try JSONEncoder().encode(originalToken) let data = try JSONEncoder().encode(originalToken)
@@ -77,7 +77,7 @@ struct RestorationTokenTests {
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectory: .sessionsBaseDirectory.appending(component: sessionDirectoryName), sessionDirectory: .sessionsBaseDirectory.appending(component: sessionDirectoryName),
cacheDirectory: .sessionCachesBaseDirectory.appending(component: sessionDirectoryName), cacheDirectory: .sessionCachesBaseDirectory.appending(component: sessionDirectoryName),
passphrase: Data("passphrase".utf8).base64EncodedString(), passphrase: RestorationTokenFixtures.base64Passphrase,
pusherNotificationClientIdentifier: "pusher-identifier") pusherNotificationClientIdentifier: "pusher-identifier")
let data = try JSONEncoder().encode(originalToken) let data = try JSONEncoder().encode(originalToken)
@@ -106,7 +106,7 @@ struct RestorationTokenTests {
oauthData: "data-from-mas", oauthData: "data-from-mas",
slidingSyncVersion: .native), slidingSyncVersion: .native),
sessionDirectories: .init(), sessionDirectories: .init(),
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: "pusher-identifier") pusherNotificationClientIdentifier: "pusher-identifier")
let data = try JSONEncoder().encode(originalToken) let data = try JSONEncoder().encode(originalToken)
@@ -129,6 +129,11 @@ struct RestorationTokenTests {
// MARK: - Token formats // MARK: - Token formats
enum RestorationTokenFixtures {
static let passphrase = Data("passphrase".utf8)
static let base64Passphrase = passphrase.base64EncodedString()
}
struct RestorationTokenV4: Equatable, Codable { struct RestorationTokenV4: Equatable, Codable {
let session: SessionV1 let session: SessionV1
let sessionDirectory: URL let sessionDirectory: URL
@@ -114,7 +114,7 @@ struct UserSessionStoreTests {
let sessionDirectories = SessionDirectories() let sessionDirectories = SessionDirectories()
// When creating a user session for it. // When creating a user session for it.
guard case .success(let userSession) = await store.userSession(for: client, sessionDirectories: sessionDirectories, passphrase: Data("passphrase".utf8)) else { guard case .success(let userSession) = await store.userSession(for: client, sessionDirectories: sessionDirectories, passphrase: RestorationTokenFixtures.passphrase) else {
Issue.record("Creating the session should succeed.") Issue.record("Creating the session should succeed.")
return return
} }
@@ -122,7 +122,7 @@ struct UserSessionStoreTests {
// Then the session should be built and its restoration token persisted. // Then the session should be built and its restoration token persisted.
#expect(userSession.clientProxy.userID == "@alice:matrix.org") #expect(userSession.clientProxy.userID == "@alice:matrix.org")
#expect(keychainController.setRestorationTokenForUsernameReceivedArguments?.forUsername == "@alice:matrix.org") #expect(keychainController.setRestorationTokenForUsernameReceivedArguments?.forUsername == "@alice:matrix.org")
#expect(keychainController.setRestorationTokenForUsernameReceivedArguments?.restorationToken.passphrase == Data("passphrase".utf8)) #expect(keychainController.setRestorationTokenForUsernameReceivedArguments?.restorationToken.passphrase == RestorationTokenFixtures.passphrase)
} }
@Test @Test
@@ -132,7 +132,7 @@ struct UserSessionStoreTests {
client.sessionThrowableError = TestError.generic client.sessionThrowableError = TestError.generic
// When creating a user session for it. // When creating a user session for it.
guard case .failure(.failedSettingUpSession) = await store.userSession(for: client, sessionDirectories: .init(), passphrase: Data("passphrase".utf8)) else { guard case .failure(.failedSettingUpSession) = await store.userSession(for: client, sessionDirectories: .init(), passphrase: RestorationTokenFixtures.passphrase) else {
Issue.record("Creating the session should fail.") Issue.record("Creating the session should fail.")
return return
} }
@@ -177,7 +177,7 @@ struct UserSessionStoreTests {
slidingSyncVersion: .native) slidingSyncVersion: .native)
let restorationToken = RestorationToken(session: session, let restorationToken = RestorationToken(session: session,
sessionDirectories: sessionDirectories, sessionDirectories: sessionDirectories,
passphrase: Data("passphrase".utf8), passphrase: RestorationTokenFixtures.passphrase,
pusherNotificationClientIdentifier: nil) pusherNotificationClientIdentifier: nil)
return KeychainCredentials(userID: userID, restorationToken: restorationToken) return KeychainCredentials(userID: userID, restorationToken: restorationToken)
} }