parent
60ea9d6737
commit
3e2050d0f0
|
@ -0,0 +1,45 @@
|
|||
whitelist_rules:
|
||||
- closure_spacing
|
||||
- colon
|
||||
- empty_enum_arguments
|
||||
- fatal_error_message
|
||||
- force_cast
|
||||
- force_try
|
||||
- force_unwrapping
|
||||
- implicitly_unwrapped_optional
|
||||
- legacy_cggeometry_functions
|
||||
- legacy_constant
|
||||
- legacy_constructor
|
||||
- legacy_nsgeometry_functions
|
||||
- operator_usage_whitespace
|
||||
- redundant_string_enum_value
|
||||
- redundant_void_return
|
||||
- return_arrow_whitespace
|
||||
- trailing_newline
|
||||
- type_name
|
||||
- unused_closure_parameter
|
||||
- unused_optional_binding
|
||||
- vertical_whitespace
|
||||
- void_return
|
||||
- custom_rules
|
||||
|
||||
excluded:
|
||||
- Carthage
|
||||
- Pods
|
||||
- ZcashLightClientKit/Service/ProtoBuf/compact_formats.pb.swift
|
||||
- ZcashLightClientKit/Service/ProtoBuf/service.grpc.swift
|
||||
- ZcashLightClientKit/Service/ProtoBuf/service.pb.swift
|
||||
- Example
|
||||
- ZcashLightClientKitTests
|
||||
|
||||
colon:
|
||||
apply_to_dictionaries: false
|
||||
|
||||
indentation: 2
|
||||
|
||||
custom_rules:
|
||||
no_objcMembers:
|
||||
name: "@objcMembers"
|
||||
regex: "@objcMembers"
|
||||
message: "Explicitly use @objc on each member you want to expose to Objective-C"
|
||||
severity: error
|
|
@ -43,6 +43,8 @@ The ```LIGHTWALLETD_ADDRESS``` environment variable can also be added to your sh
|
|||
|
||||
We advice setting this value as a secret variable on your CD/CI environment when possible
|
||||
|
||||
# Swiftlint
|
||||
We don't like reinveing the wheel, so be gently borrowed swift lint rules from AirBnB which we find pretty cool and reasonable.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
|
|
@ -401,6 +401,7 @@
|
|||
buildPhases = (
|
||||
103AFE80228312A30074BC98 /* Headers */,
|
||||
103AFE9F2283152F0074BC98 /* ShellScript */,
|
||||
0D3BA6B1235A420B00E0E0F4 /* ShellScript */,
|
||||
103AFE81228312A30074BC98 /* Sources */,
|
||||
103AFE82228312A30074BC98 /* Frameworks */,
|
||||
103AFE83228312A30074BC98 /* Resources */,
|
||||
|
@ -512,6 +513,23 @@
|
|||
shellPath = /bin/sh;
|
||||
shellScript = "/usr/local/bin/carthage copy-frameworks\n";
|
||||
};
|
||||
0D3BA6B1235A420B00E0E0F4 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if which swiftlint >/dev/null; then\n swiftlint lint --config .swiftlint.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
|
||||
};
|
||||
0DC64E65232848F10053EFAC /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
import Foundation
|
||||
import SQLite
|
||||
|
||||
|
||||
struct CompactBlockStorage: CompactBlockDAO {
|
||||
var db: Connection
|
||||
|
||||
|
@ -120,5 +119,4 @@ extension CompactBlockStorage: CompactBlockStoring {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ class SQLiteStorage: Storage {
|
|||
self.connection = connection
|
||||
}
|
||||
|
||||
|
||||
func open(at path: String) throws {
|
||||
do {
|
||||
connection = try Connection(path)
|
||||
|
@ -35,15 +34,13 @@ class SQLiteStorage: Storage {
|
|||
func closeDatabase() {}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Set schema version
|
||||
*/
|
||||
// TODO: define a better way to do this
|
||||
extension Connection {
|
||||
public var userVersion: Int32 {
|
||||
get { return Int32(try! scalar("PRAGMA user_version") as! Int64)}
|
||||
set { try! run("PRAGMA user_version = \(newValue)")}
|
||||
}
|
||||
}
|
||||
|
||||
//extension Connection {
|
||||
// public var userVersion: Int32 {
|
||||
// get { return Int32(try scalar("PRAGMA user_version") as Int64)}
|
||||
// set { try! run("PRAGMA user_version = \(newValue)")}
|
||||
// }
|
||||
//}
|
||||
|
|
|
@ -57,7 +57,6 @@ class CompactBlockDownloader {
|
|||
|
||||
extension CompactBlockDownloader: CompactBlockDownloading {
|
||||
|
||||
|
||||
/**
|
||||
Downloads and stores the given block range.
|
||||
Non-Blocking
|
||||
|
@ -89,7 +88,6 @@ extension CompactBlockDownloader: CompactBlockDownloading {
|
|||
try storage.write(blocks: blocks)
|
||||
}
|
||||
|
||||
|
||||
func rewind(to height: BlockHeight, completion: @escaping (Error?) -> Void){
|
||||
|
||||
storage.rewind(to: height) { (e) in
|
||||
|
@ -121,6 +119,4 @@ extension CompactBlockDownloader: CompactBlockDownloading {
|
|||
try self.storage.latestHeight()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class CompactBlockScanningOperation: ZcashOperation {
|
|||
|
||||
private var cacheDb: URL
|
||||
private var dataDb: URL
|
||||
init(rustWelding: ZcashRustBackendWelding.Type, cacheDb: URL, dataDb:URL) {
|
||||
init(rustWelding: ZcashRustBackendWelding.Type, cacheDb: URL, dataDb: URL) {
|
||||
rustBackend = rustWelding
|
||||
self.cacheDb = cacheDb
|
||||
self.dataDb = dataDb
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
|
||||
enum CompactBlockProcessorError: Error {
|
||||
case invalidConfiguration
|
||||
case missingDbPath(path: String)
|
||||
|
@ -16,16 +15,14 @@ enum CompactBlockProcessorError: Error {
|
|||
|
||||
extension Notification.Name {
|
||||
static let blockProcessorUpdated = Notification.Name(rawValue: "CompactBlockProcessorUpdated")
|
||||
static let blockProcessorStarted = Notification.Name(rawValue:"CompactBlockProcessorStarted")
|
||||
static let blockProcessorStopped = Notification.Name(rawValue:"CompactBlockProcessorStopped")
|
||||
static let blockProcessorFinished = Notification.Name(rawValue:"CompactBlockProcessorFinished")
|
||||
static let blockProcessorFailed = Notification.Name(rawValue:"CompactBlockProcessorFinished")
|
||||
static let blockProcessorStarted = Notification.Name(rawValue: "CompactBlockProcessorStarted")
|
||||
static let blockProcessorStopped = Notification.Name(rawValue: "CompactBlockProcessorStopped")
|
||||
static let blockProcessorFinished = Notification.Name(rawValue: "CompactBlockProcessorFinished")
|
||||
static let blockProcessorFailed = Notification.Name(rawValue: "CompactBlockProcessorFinished")
|
||||
}
|
||||
|
||||
|
||||
class CompactBlockProcessor {
|
||||
|
||||
|
||||
enum State {
|
||||
|
||||
/**
|
||||
|
@ -66,12 +63,10 @@ class CompactBlockProcessor {
|
|||
config.retries
|
||||
}
|
||||
|
||||
|
||||
private var batchSize: BlockHeight {
|
||||
BlockHeight(self.config.downloadBatchSize)
|
||||
}
|
||||
|
||||
|
||||
private var processingError: Error?
|
||||
|
||||
init(downloader: CompactBlockDownloading, backend: ZcashRustBackendWelding.Type, config: Configuration, service: LightWalletService) {
|
||||
|
@ -91,7 +86,6 @@ class CompactBlockProcessor {
|
|||
|
||||
}
|
||||
|
||||
|
||||
deinit {
|
||||
self.queue.suspend()
|
||||
self.unsuscribeToSystemNotifications()
|
||||
|
@ -180,14 +174,12 @@ class CompactBlockProcessor {
|
|||
self.processNewBlocks(latestHeight: latestBlockHeight, latestDownloadedHeight: latestDownloadedBlockHeight)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
func processNewBlocks(latestHeight: BlockHeight, latestDownloadedHeight: BlockHeight) {
|
||||
|
||||
let dispatchGroup = DispatchGroup()
|
||||
|
||||
|
||||
let validateBlocksTask = DispatchWorkItem {
|
||||
dispatchGroup.enter()
|
||||
self.state = .scanning
|
||||
|
@ -252,7 +244,6 @@ class CompactBlockProcessor {
|
|||
self.state = .stopped
|
||||
}
|
||||
|
||||
|
||||
func fail(_ error: Error) {
|
||||
// todo specify: failure
|
||||
print(error.localizedDescription)
|
||||
|
@ -264,7 +255,6 @@ class CompactBlockProcessor {
|
|||
|
||||
}
|
||||
|
||||
|
||||
extension CompactBlockProcessor.Configuration {
|
||||
static var standard: CompactBlockProcessor.Configuration {
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
|
||||
protocol BlockRepository {
|
||||
func lastScannedBlockHeight() -> BlockHeight
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ protocol CompactBlockStoring {
|
|||
/**
|
||||
Write the given blocks to this store, which may be anything from an in-memory cache to a DB.
|
||||
*/
|
||||
func write(blocks: [ZcashCompactBlock]) throws -> Void
|
||||
func write(blocks: [ZcashCompactBlock]) throws
|
||||
|
||||
/**
|
||||
Write the given blocks to this store, which may be anything from an in-memory cache to a DB.
|
||||
|
@ -49,7 +49,7 @@ protocol CompactBlockStoring {
|
|||
Meaning, if max height is 100 block and rewindTo(50) is called, then the highest block remaining will be 49.
|
||||
*/
|
||||
|
||||
func rewind(to height: BlockHeight) throws -> Void
|
||||
func rewind(to height: BlockHeight) throws
|
||||
|
||||
/**
|
||||
Remove every block above and including the given height.
|
||||
|
@ -60,4 +60,3 @@ protocol CompactBlockStoring {
|
|||
*/
|
||||
func rewind(to height: BlockHeight, completion: ((Error?) -> Void)?)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
|
||||
protocol Storage {
|
||||
|
||||
func createDatabase(at path: String) throws
|
||||
|
@ -24,5 +23,3 @@ enum StorageError: Error {
|
|||
case closeFailed
|
||||
case operationFailed
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,6 @@ public protocol ResourceProvider {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public struct DefaultResourceProvider: ResourceProvider {
|
||||
|
||||
public var dataDbPath: String {
|
||||
|
|
|
@ -24,7 +24,7 @@ class ZcashRustBackend: ZcashRustBackendWelding {
|
|||
let error = UnsafeMutablePointer<Int8>.allocate(capacity: Int(errorLen))
|
||||
zcashlc_error_message_utf8(error, errorLen)
|
||||
zcashlc_clear_last_error()
|
||||
return String(validatingUTF8: error)!
|
||||
return String(validatingUTF8: error)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
@ -45,9 +45,10 @@ class ZcashRustBackend: ZcashRustBackendWelding {
|
|||
return nil
|
||||
}
|
||||
|
||||
let extsks = UnsafeBufferPointer(start: extsksCStr, count: Int(accounts)).map {
|
||||
String(cString: $0!)
|
||||
}
|
||||
let extsks = UnsafeBufferPointer(start: extsksCStr, count: Int(accounts)).compactMap({ (cStr) -> String? in
|
||||
guard let str = cStr else { return nil }
|
||||
return String(cString: str)
|
||||
})
|
||||
zcashlc_vec_string_free(extsksCStr, UInt(accounts))
|
||||
return extsks
|
||||
}
|
||||
|
@ -60,12 +61,9 @@ class ZcashRustBackend: ZcashRustBackendWelding {
|
|||
static func getAddress(dbData: URL, account: Int32) -> String? {
|
||||
let dbData = dbData.osStr()
|
||||
|
||||
let addressCStr = zcashlc_get_address(dbData.0, dbData.1, account)
|
||||
if addressCStr == nil {
|
||||
return nil
|
||||
}
|
||||
guard let addressCStr = zcashlc_get_address(dbData.0, dbData.1, account) else { return nil }
|
||||
|
||||
let address = String(validatingUTF8: addressCStr!)
|
||||
let address = String(validatingUTF8: addressCStr)
|
||||
zcashlc_string_free(addressCStr)
|
||||
return address
|
||||
}
|
||||
|
@ -83,12 +81,9 @@ class ZcashRustBackend: ZcashRustBackendWelding {
|
|||
static func getReceivedMemoAsUTF8(dbData: URL, idNote: Int64) -> String? {
|
||||
let dbData = dbData.osStr()
|
||||
|
||||
let memoCStr = zcashlc_get_received_memo_as_utf8(dbData.0, dbData.1, idNote)
|
||||
if memoCStr == nil {
|
||||
return nil
|
||||
}
|
||||
guard let memoCStr = zcashlc_get_received_memo_as_utf8(dbData.0, dbData.1, idNote) else { return nil }
|
||||
|
||||
let memo = String(validatingUTF8: memoCStr!)
|
||||
let memo = String(validatingUTF8: memoCStr)
|
||||
zcashlc_string_free(memoCStr)
|
||||
return memo
|
||||
}
|
||||
|
@ -96,12 +91,9 @@ class ZcashRustBackend: ZcashRustBackendWelding {
|
|||
static func getSentMemoAsUTF8(dbData: URL, idNote: Int64) -> String? {
|
||||
let dbData = dbData.osStr()
|
||||
|
||||
let memoCStr = zcashlc_get_sent_memo_as_utf8(dbData.0, dbData.1, idNote)
|
||||
if memoCStr == nil {
|
||||
return nil
|
||||
}
|
||||
guard let memoCStr = zcashlc_get_sent_memo_as_utf8(dbData.0, dbData.1, idNote) else { return nil }
|
||||
|
||||
let memo = String(validatingUTF8: memoCStr!)
|
||||
let memo = String(validatingUTF8: memoCStr)
|
||||
zcashlc_string_free(memoCStr)
|
||||
return memo
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ class LightWalletGRPCService {
|
|||
compactTxStreamer = CompactTxStreamerServiceClient(channel: self.channel)
|
||||
}
|
||||
|
||||
func blockRange(startHeight: BlockHeight, endHeight: BlockHeight? = nil, result: @escaping (CallResult)->()) throws -> CompactTxStreamerGetBlockRangeCall {
|
||||
func blockRange(startHeight: BlockHeight, endHeight: BlockHeight? = nil, result: @escaping (CallResult) -> Void) throws -> CompactTxStreamerGetBlockRangeCall {
|
||||
try compactTxStreamer.getBlockRange(BlockRange(startHeight: startHeight, endHeight: endHeight)) { result($0) }
|
||||
}
|
||||
|
||||
|
@ -29,17 +29,16 @@ class LightWalletGRPCService {
|
|||
try compactTxStreamer.getLatestBlock(ChainSpec())
|
||||
}
|
||||
|
||||
func getTx(hash:String) throws -> RawTransaction {
|
||||
func getTx(hash: String) throws -> RawTransaction {
|
||||
var filter = TxFilter()
|
||||
filter.hash = Data(hash.utf8)
|
||||
return try compactTxStreamer.getTransaction(filter)
|
||||
}
|
||||
|
||||
func getAllBlocksSinceSaplingLaunch(_ result: @escaping (CallResult)->()) throws -> CompactTxStreamerGetBlockRangeCall {
|
||||
func getAllBlocksSinceSaplingLaunch(_ result: @escaping (CallResult) -> Void) throws -> CompactTxStreamerGetBlockRangeCall {
|
||||
try compactTxStreamer.getBlockRange(BlockRange.sinceSaplingActivation(), completion: result)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
extension LightWalletGRPCService: LightWalletService {
|
||||
|
@ -63,9 +62,9 @@ extension LightWalletGRPCService: LightWalletService {
|
|||
return blocks
|
||||
}
|
||||
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight, LightWalletServiceError>) -> ()) {
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight, LightWalletServiceError>) -> Void) {
|
||||
do {
|
||||
try compactTxStreamer.getLatestBlock(ChainSpec()) { (blockID, callResult) in
|
||||
try compactTxStreamer.getLatestBlock(ChainSpec()) { (blockID, _) in
|
||||
guard let rawHeight = blockID?.height, let blockHeight = Int(exactly: rawHeight) else {
|
||||
result(.failure(LightWalletServiceError.generalError))
|
||||
return
|
||||
|
@ -82,7 +81,6 @@ extension LightWalletGRPCService: LightWalletService {
|
|||
// TODO: Make cancellable
|
||||
func blockRange(_ range: CompactBlockRange, result: @escaping (Result<[ZcashCompactBlock], LightWalletServiceError>) -> Void) {
|
||||
|
||||
|
||||
queue.async {
|
||||
var blocks = [CompactBlock]()
|
||||
var isSyncing = true
|
||||
|
@ -101,7 +99,6 @@ extension LightWalletGRPCService: LightWalletService {
|
|||
result(.failure(LightWalletServiceError.failed(statusCode: code)))
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
result(.failure(LightWalletServiceError.generalError))
|
||||
return
|
||||
|
|
|
@ -51,8 +51,7 @@ public protocol LightWalletService {
|
|||
|
||||
- Parameter result: a result containing the height or an Error
|
||||
*/
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight,LightWalletServiceError>) -> ())
|
||||
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight,LightWalletServiceError>) -> Void)
|
||||
|
||||
/**
|
||||
Return the latest block height known to the service.
|
||||
|
@ -81,5 +80,3 @@ public protocol LightWalletService {
|
|||
func blockRange(_ range: CompactBlockRange) throws -> [ZcashCompactBlock]
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,8 +11,6 @@ import Foundation
|
|||
public typealias BlockHeight = Int
|
||||
public typealias CompactBlockRange = Range<BlockHeight>
|
||||
|
||||
|
||||
|
||||
enum ZcashCompactBlockError: Error {
|
||||
case unreadableBlock(compactBlock: CompactBlock)
|
||||
}
|
||||
|
@ -52,5 +50,3 @@ extension ZcashCompactBlock: Hashable {
|
|||
hasher.combine(data)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ extension CompactBlockRange {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
extension BlockID {
|
||||
|
||||
static let saplingActivationHeight: UInt64 = 280_000
|
||||
|
@ -59,7 +58,6 @@ extension BlockRange {
|
|||
|
||||
}
|
||||
|
||||
|
||||
extension Array where Element == CompactBlock {
|
||||
func asZcashCompactBlocks() throws -> [ZcashCompactBlock] {
|
||||
var result = [ZcashCompactBlock]()
|
||||
|
|
|
@ -12,7 +12,6 @@ import Foundation
|
|||
capabilities and the supporting data required to exercise those abilities.
|
||||
*/
|
||||
|
||||
|
||||
public enum WalletError: Error {
|
||||
case cacheDbInitFailed
|
||||
case dataDbInitFailed
|
||||
|
@ -29,7 +28,7 @@ public class Wallet {
|
|||
private var walletBirthday: WalletBirthday
|
||||
private var storage: Storage?
|
||||
|
||||
init(rustWelding: ZcashRustBackendWelding.Type, cacheDbURL:URL, dataDbURL: URL, paramDestination: URL, seedProvider: SeedProvider, walletBirthday: WalletBirthday, accountIDs: [Int] = [0]) {
|
||||
init(rustWelding: ZcashRustBackendWelding.Type, cacheDbURL: URL, dataDbURL: URL, paramDestination: URL, seedProvider: SeedProvider, walletBirthday: WalletBirthday, accountIDs: [Int] = [0]) {
|
||||
|
||||
self.rustBackend = rustWelding.self
|
||||
self.dataDbURL = dataDbURL
|
||||
|
@ -41,7 +40,6 @@ public class Wallet {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public func initalize(firstRunStartHeight: BlockHeight = SAPLING_ACTIVATION_HEIGHT) throws {
|
||||
|
||||
guard let storage = StorageBuilder.cacheDb(at: cacheDbURL) else {
|
||||
|
@ -54,7 +52,6 @@ public class Wallet {
|
|||
|
||||
self.storage = storage
|
||||
|
||||
|
||||
}
|
||||
|
||||
public func latestBlockHeight() -> Int? {
|
||||
|
@ -62,8 +59,6 @@ public class Wallet {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Represents the wallet's birthday which can be thought of as a checkpoint at the earliest moment in history where
|
||||
transactions related to this wallet could exist. Ideally, this would correspond to the latest block height at the
|
||||
|
|
|
@ -26,7 +26,6 @@ class BlockDownloaderTests: XCTestCase {
|
|||
downloader = nil
|
||||
}
|
||||
|
||||
|
||||
func testSmallDownloadAsync() {
|
||||
|
||||
let expect = XCTestExpectation(description: self.description)
|
||||
|
@ -55,17 +54,14 @@ class BlockDownloaderTests: XCTestCase {
|
|||
wait(for: [expect], timeout: 2)
|
||||
}
|
||||
|
||||
|
||||
func testSmallDownload() {
|
||||
|
||||
|
||||
let lowerRange: BlockHeight = SAPLING_ACTIVATION_HEIGHT
|
||||
let upperRange: BlockHeight = SAPLING_ACTIVATION_HEIGHT + 99
|
||||
|
||||
let range = CompactBlockRange(uncheckedBounds: (lowerRange,upperRange))
|
||||
var latest: BlockHeight = 0
|
||||
|
||||
|
||||
do {
|
||||
latest = try downloader.latestBlockHeight()
|
||||
} catch {
|
||||
|
@ -105,7 +101,6 @@ class BlockDownloaderTests: XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/// Helper functions
|
||||
|
||||
extension BlockDownloaderTests {
|
||||
|
|
|
@ -28,7 +28,7 @@ class BlockScanOperationTests: XCTestCase {
|
|||
operationQueue.cancelAllOperations()
|
||||
|
||||
// try! FileManager.default.removeItem(at: cacheDbURL)
|
||||
try! FileManager.default.removeItem(at: dataDbURL)
|
||||
try? FileManager.default.removeItem(at: dataDbURL)
|
||||
}
|
||||
|
||||
func testSingleDownloadAndScanOperation() {
|
||||
|
|
|
@ -20,8 +20,6 @@ class CompactBlockProcessorTests: XCTestCase {
|
|||
XCTAssertTrue(MockDbInit.emptyFile(at: processorConfig.cacheDbPath))
|
||||
XCTAssertTrue(MockDbInit.emptyFile(at: processorConfig.dataDbPath))
|
||||
|
||||
|
||||
|
||||
let service = LightWalletGRPCService(channel: ChannelProvider().channel())
|
||||
let storage = ZcashConsoleFakeStorage()
|
||||
let downloader = CompactBlockDownloader(service: service, storage: storage)
|
||||
|
@ -43,13 +41,10 @@ class CompactBlockProcessorTests: XCTestCase {
|
|||
|
||||
expect.unsuscribeFromNotifications()
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
func testStartNotifiesSuscriptors() {
|
||||
|
||||
|
||||
XCTAssertNotNil(processor)
|
||||
expect.suscribe(to: Notification.Name.blockProcessorStarted, object: processor)
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import XCTest
|
|||
@testable import ZcashLightClientKit
|
||||
class CompactBlockStorageTests: XCTestCase {
|
||||
|
||||
|
||||
var storage: Storage = try! TestDbBuilder.inMemory()
|
||||
|
||||
func testEmptyStorage() {
|
||||
|
@ -61,7 +60,6 @@ class CompactBlockStorageTests: XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
func testRewindTo() {
|
||||
|
||||
let startHeight = SAPLING_ACTIVATION_HEIGHT
|
||||
|
|
|
@ -13,7 +13,6 @@ class DownloadOperationTests: XCTestCase {
|
|||
|
||||
var operationQueue = OperationQueue()
|
||||
|
||||
|
||||
override func tearDown() {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
operationQueue.cancelAllOperations()
|
||||
|
|
|
@ -59,7 +59,6 @@ class LightWalletServiceTests: XCTestCase {
|
|||
wait(for: [expect], timeout: 5)
|
||||
}
|
||||
|
||||
|
||||
func testSyncBlockRange() {
|
||||
let lowerRange: BlockHeight = SAPLING_ACTIVATION_HEIGHT
|
||||
let upperRange: BlockHeight = SAPLING_ACTIVATION_HEIGHT + 99
|
||||
|
|
|
@ -63,7 +63,6 @@ class ZcashLightClientKitTests: XCTestCase {
|
|||
let expectedCount: BlockHeight = 99
|
||||
var count: BlockHeight = 0
|
||||
|
||||
|
||||
let startHeight = latestBlockHeight - expectedCount
|
||||
let endHeight = latestBlockHeight!
|
||||
|
||||
|
@ -76,7 +75,6 @@ class ZcashLightClientKitTests: XCTestCase {
|
|||
return
|
||||
}
|
||||
|
||||
|
||||
var blocks = [CompactBlock]()
|
||||
while true {
|
||||
guard let block = try? call.receive() else {
|
||||
|
|
|
@ -60,6 +60,5 @@ class ZcashRustBackendTests: XCTestCase {
|
|||
|
||||
XCTAssertTrue(ZcashRustBackend.scanBlocks(dbCache: cacheDb, dbData: dbData))
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@ class ZcashConsoleFakeStorage: CompactBlockStoring {
|
|||
fakeRewind(to: height)
|
||||
}
|
||||
|
||||
|
||||
var latestBlockHeight: BlockHeight = 0
|
||||
var delay = DispatchTimeInterval.milliseconds(300)
|
||||
|
||||
|
@ -62,6 +61,4 @@ class ZcashConsoleFakeStorage: CompactBlockStoring {
|
|||
self.latestBlockHeight = min(self.latestBlockHeight, height)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ class AwfulLightWalletService: LightWalletService {
|
|||
throw LightWalletServiceError.invalidBlock
|
||||
}
|
||||
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight, LightWalletServiceError>) -> ()) {
|
||||
func latestBlockHeight(result: @escaping (Result<BlockHeight, LightWalletServiceError>) -> Void) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
||||
result(.failure(LightWalletServiceError.generalError))
|
||||
}
|
||||
|
@ -31,5 +31,4 @@ class AwfulLightWalletService: LightWalletService {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -33,14 +33,13 @@ struct TestDbBuilder {
|
|||
return compactBlockDao
|
||||
}
|
||||
|
||||
static func diskCompactBlockStorage(at url:URL) throws -> CompactBlockStorage {
|
||||
static func diskCompactBlockStorage(at url: URL) throws -> CompactBlockStorage {
|
||||
let connection = try Connection(url.absoluteString)
|
||||
let compactBlockDao = CompactBlockStorage(connection: connection)
|
||||
try compactBlockDao.createTable()
|
||||
return compactBlockDao
|
||||
}
|
||||
|
||||
|
||||
static func seed(db: Storage, with blockRange: CompactBlockRange) throws {
|
||||
|
||||
guard let blocks = StubBlockCreator.createBlockRange(blockRange) else {
|
||||
|
|
|
@ -16,14 +16,11 @@ class ChannelProvider {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
struct MockDbInit {
|
||||
@discardableResult static func emptyFile(at path: String) -> Bool {
|
||||
|
||||
|
||||
FileManager.default.createFile(atPath: path, contents: Data("".utf8), attributes: nil)
|
||||
|
||||
|
||||
}
|
||||
|
||||
static func destroy(at path: String) throws {
|
||||
|
@ -46,7 +43,6 @@ extension XCTestExpectation {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
func __documentsDirectory() throws -> URL {
|
||||
try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
# options
|
||||
--self remove # redundantSelf
|
||||
--importgrouping testable-bottom # sortedImports
|
||||
--commas always # trailingCommas
|
||||
--trimwhitespace always # trailingSpace
|
||||
|
||||
# rules
|
||||
--rules redundantParens,redundantSelf,sortedImports,trailingCommas,trailingSpace
|
Loading…
Reference in New Issue