ZcashLightClientKit/ZcashLightClientKitTests/utils/FakeStorage.swift

65 lines
1.8 KiB
Swift

//
// Storage.swift
// ZcashLightClientKit
//
// Created by Francisco Gindre on 12/09/2019.
// Copyright © 2019 Electric Coin Company. All rights reserved.
//
import Foundation
@testable import ZcashLightClientKit
class ZcashConsoleFakeStorage: CompactBlockStoring {
func latestHeight() throws -> Int {
return self.latestBlockHeight
}
func write(blocks: [ZcashCompactBlock]) throws {
fakeSave(blocks: blocks)
}
func rewind(to height: BlockHeight) throws {
fakeRewind(to: height)
}
var latestBlockHeight: BlockHeight = 0
var delay = DispatchTimeInterval.milliseconds(300)
init(latestBlockHeight: BlockHeight = 0) {
self.latestBlockHeight = latestBlockHeight
}
func latestHeight(result: @escaping (Result<BlockHeight, Error>) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
result(.success(self.latestBlockHeight))
}
}
fileprivate func fakeSave(blocks: [ZcashCompactBlock]) {
blocks.forEach {
print("saving block \($0)")
self.latestBlockHeight = $0.height
}
}
func write(blocks: [ZcashCompactBlock], completion: ((Error?) -> Void)?) {
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
self.fakeSave(blocks: blocks)
completion?(nil)
}
}
func rewind(to height: BlockHeight, completion: ((Error?) -> Void)?) {
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
self.fakeRewind(to: height)
completion?(nil)
}
}
private func fakeRewind(to height: BlockHeight) {
print("rewind to \(height)")
self.latestBlockHeight = min(self.latestBlockHeight, height)
}
}