Skip to content
Snippets Groups Projects
Commit b215df5e authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Update MessengerRestoreBackup

Do not try to clean up after failure
parent 04d8ce0c
No related branches found
No related tags found
2 merge requests!105Backup restoration fixes,!102Release 1.0.0
......@@ -30,58 +30,53 @@ extension MessengerRestoreBackup {
public static func live(_ env: MessengerEnvironment) -> MessengerRestoreBackup {
MessengerRestoreBackup { backupData, backupPassphrase in
let storageDir = env.storageDir
do {
let ndfData = try env.downloadNDF(env.ndfEnvironment)
let password = env.generateSecret()
try env.passwordStorage.save(password)
try env.fileManager.removeDirectory(storageDir)
try env.fileManager.createDirectory(storageDir)
let report = try env.newCMixFromBackup(
ndfJSON: String(data: ndfData, encoding: .utf8)!,
storageDir: storageDir,
backupPassphrase: backupPassphrase,
sessionPassword: password,
backupFileContents: backupData
)
let cMix = try env.loadCMix(
storageDir: storageDir,
password: password,
cMixParamsJSON: env.getCMixParams()
)
try cMix.startNetworkFollower(timeoutMS: 30_000)
let e2e = try env.login(
cMixId: cMix.getId(),
authCallbacks: env.authCallbacks.registered(),
identity: try cMix.makeReceptionIdentity(legacy: true),
e2eParamsJSON: env.getE2EParams()
)
let decoder = JSONDecoder()
let paramsData = report.params.data(using: .utf8)!
let params = try decoder.decode(BackupParams.self, from: paramsData)
let ud = try env.newUdManagerFromBackup(
params: NewUdManagerFromBackup.Params(
e2eId: e2e.getId(),
username: Fact(type: .username, value: params.username),
email: params.email.map { Fact(type: .email, value: $0) },
phone: params.phone.map { Fact(type: .phone, value: $0) },
cert: env.udCert ?? e2e.getUdCertFromNdf(),
contact: env.udContact ?? (try e2e.getUdContactFromNdf()),
address: env.udAddress ?? e2e.getUdAddressFromNdf()
),
follower: UdNetworkStatus { cMix.networkFollowerStatus() }
)
env.cMix.set(cMix)
env.e2e.set(e2e)
env.ud.set(ud)
env.isListeningForMessages.set(false)
return Result(
restoredParams: params,
restoredContacts: report.restoredContacts
)
} catch {
try? env.fileManager.removeDirectory(storageDir)
throw error
}
let ndfData = try env.downloadNDF(env.ndfEnvironment)
let password = env.generateSecret()
try env.passwordStorage.save(password)
try env.fileManager.removeDirectory(storageDir)
try env.fileManager.createDirectory(storageDir)
let report = try env.newCMixFromBackup(
ndfJSON: String(data: ndfData, encoding: .utf8)!,
storageDir: storageDir,
backupPassphrase: backupPassphrase,
sessionPassword: password,
backupFileContents: backupData
)
let cMix = try env.loadCMix(
storageDir: storageDir,
password: password,
cMixParamsJSON: env.getCMixParams()
)
env.cMix.set(cMix)
try cMix.startNetworkFollower(timeoutMS: 30_000)
let e2e = try env.login(
cMixId: cMix.getId(),
authCallbacks: env.authCallbacks.registered(),
identity: try cMix.makeReceptionIdentity(legacy: true),
e2eParamsJSON: env.getE2EParams()
)
env.e2e.set(e2e)
env.isListeningForMessages.set(false)
let decoder = JSONDecoder()
let paramsData = report.params.data(using: .utf8)!
let params = try decoder.decode(BackupParams.self, from: paramsData)
let ud = try env.newUdManagerFromBackup(
params: NewUdManagerFromBackup.Params(
e2eId: e2e.getId(),
username: Fact(type: .username, value: params.username),
email: params.email.map { Fact(type: .email, value: $0) },
phone: params.phone.map { Fact(type: .phone, value: $0) },
cert: env.udCert ?? e2e.getUdCertFromNdf(),
contact: env.udContact ?? (try e2e.getUdContactFromNdf()),
address: env.udAddress ?? e2e.getUdAddressFromNdf()
),
follower: UdNetworkStatus { cMix.networkFollowerStatus() }
)
env.ud.set(ud)
return Result(
restoredParams: params,
restoredContacts: report.restoredContacts
)
}
}
}
......
......@@ -136,6 +136,7 @@ final class MessengerRestoreBackupTests: XCTestCase {
password: password,
cMixParams: cMixParams
),
.didSetCMix,
.cMixDidStartNetworkFollower(
timeoutMS: 30_000
),
......@@ -148,6 +149,10 @@ final class MessengerRestoreBackupTests: XCTestCase {
identity: receptionIdentity,
e2eParamsJSON: e2eParams
),
.didSetE2E,
.didSetIsListeningForMessages(
isListening: false
),
.didNewUdManagerFromBackup(params: .init(
e2eId: e2eId,
username: Fact(type: .username, value: backupParams.username),
......@@ -157,12 +162,7 @@ final class MessengerRestoreBackupTests: XCTestCase {
contact: udContactFromNdf,
address: udAddressFromNdf
)),
.didSetCMix,
.didSetE2E,
.didSetUD,
.didSetIsListeningForMessages(
isListening: false
),
])
XCTAssertNoDifference(result, MessengerRestoreBackup.Result(
......@@ -175,19 +175,13 @@ final class MessengerRestoreBackupTests: XCTestCase {
struct Failure: Error, Equatable {}
let failure = Failure()
var actions: [CaughtAction] = []
var env: MessengerEnvironment = .unimplemented
env.downloadNDF.run = { _ in throw failure }
env.fileManager.removeDirectory = { actions.append(.didRemoveDirectory(path: $0)) }
let restore: MessengerRestoreBackup = .live(env)
XCTAssertThrowsError(try restore(backupData: Data(), backupPassphrase: "")) { error in
XCTAssertNoDifference(error as? Failure, failure)
}
XCTAssertNoDifference(actions, [
.didRemoveDirectory(path: env.storageDir)
])
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment