2021-06-17 16:58:30 -07:00
|
|
|
//
|
|
|
|
// BlockBatchValidationTests.swift
|
|
|
|
// ZcashLightClientKit-Unit-Tests
|
|
|
|
//
|
|
|
|
// Created by Francisco Gindre on 6/17/21.
|
|
|
|
//
|
|
|
|
|
|
|
|
import XCTest
|
2022-02-28 09:03:20 -08:00
|
|
|
@testable import TestUtils
|
2021-06-17 16:58:30 -07:00
|
|
|
@testable import ZcashLightClientKit
|
|
|
|
|
2021-09-23 06:26:41 -07:00
|
|
|
// swiftlint:disable force_try type_body_length
|
2021-06-17 16:58:30 -07:00
|
|
|
class BlockBatchValidationTests: XCTestCase {
|
2022-09-01 05:58:41 -07:00
|
|
|
func testBranchIdFailure() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: 1210000,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: 1220000)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: 1210000,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = 130000
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "main"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db33f"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = Int32(0xd34d)
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
do {
|
|
|
|
try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
2021-06-17 16:58:30 -07:00
|
|
|
switch error {
|
|
|
|
case CompactBlockProcessorError.wrongConsensusBranchId:
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
XCTFail("Expected CompactBlockProcessorError.wrongConsensusBranchId but found \(error)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testBranchNetworkMismatchFailure() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: 1210000,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: 1220000)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: 1210000,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = 130000
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "test"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
do {
|
|
|
|
try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
2021-06-17 16:58:30 -07:00
|
|
|
switch error {
|
|
|
|
case CompactBlockProcessorError.networkMismatch(expected: .mainnet, found: .testnet):
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
XCTFail("Expected CompactBlockProcessorError.networkMismatch but found \(error)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testBranchNetworkTypeWrongFailure() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .testnet)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: 1210000,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: 1220000)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: 1210000,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = 130000
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "another"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
do {
|
|
|
|
try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
2021-06-17 16:58:30 -07:00
|
|
|
switch error {
|
|
|
|
case CompactBlockProcessorError.generalError:
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
XCTFail("Expected CompactBlockProcessorError.generalError but found \(error)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testSaplingActivationHeightMismatch() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: 1210000,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: 1220000)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: 1210000,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = 130000
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "main"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
|
|
|
info.saplingActivationHeight = UInt64(3434343)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
do {
|
|
|
|
try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
2021-06-17 16:58:30 -07:00
|
|
|
switch error {
|
2021-09-23 06:26:41 -07:00
|
|
|
case CompactBlockProcessorError.saplingActivationMismatch(
|
|
|
|
expected: network.constants.saplingActivationHeight,
|
|
|
|
found: BlockHeight(info.saplingActivationHeight)
|
|
|
|
):
|
2021-06-17 16:58:30 -07:00
|
|
|
break
|
|
|
|
default:
|
|
|
|
XCTFail("Expected CompactBlockProcessorError.saplingActivationMismatch but found \(error)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testResultIsWait() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedLatestHeight = BlockHeight(1210000)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: expectedLatestHeight,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedStoreLatestHeight = BlockHeight(1220000)
|
2022-09-01 05:58:41 -07:00
|
|
|
let expectedResult = CompactBlockProcessor.NextState.wait(
|
2021-09-23 06:26:41 -07:00
|
|
|
latestHeight: expectedLatestHeight,
|
|
|
|
latestDownloadHeight: expectedLatestHeight
|
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: expectedStoreLatestHeight)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: 1210000,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = UInt64(expectedLatestHeight)
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "main"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
var nextBatch: CompactBlockProcessor.NextState?
|
|
|
|
do {
|
|
|
|
nextBatch = try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
2021-07-28 09:59:10 -07:00
|
|
|
XCTFail("this shouldn't happen: \(error)")
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
guard let _ = nextBatch else {
|
2021-06-17 16:58:30 -07:00
|
|
|
XCTFail("result should not be nil")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-09-23 06:26:41 -07:00
|
|
|
XCTAssertTrue(
|
|
|
|
{
|
2022-09-01 05:58:41 -07:00
|
|
|
switch nextBatch {
|
2021-09-23 06:26:41 -07:00
|
|
|
case .wait(latestHeight: expectedLatestHeight, latestDownloadHeight: expectedLatestHeight):
|
|
|
|
return true
|
|
|
|
default:
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}(),
|
2022-09-01 05:58:41 -07:00
|
|
|
"Expected \(expectedResult) got: \(String(describing: nextBatch))"
|
2021-09-23 06:26:41 -07:00
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testResultProcessNew() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedLatestHeight = BlockHeight(1230000)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: expectedLatestHeight,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedStoreLatestHeight = BlockHeight(1220000)
|
|
|
|
let walletBirthday = BlockHeight(1210000)
|
2022-09-01 05:58:41 -07:00
|
|
|
let expectedResult = CompactBlockProcessor.NextState.processNewBlocks(
|
2021-09-23 06:26:41 -07:00
|
|
|
range: CompactBlockProcessor.nextBatchBlockRange(
|
|
|
|
latestHeight: expectedLatestHeight,
|
|
|
|
latestDownloadedHeight: expectedStoreLatestHeight,
|
|
|
|
walletBirthday: walletBirthday
|
2022-11-09 13:01:43 -08:00
|
|
|
),
|
|
|
|
latestBlockHeight: expectedLatestHeight
|
2021-09-23 06:26:41 -07:00
|
|
|
)
|
2022-09-01 05:58:41 -07:00
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: expectedStoreLatestHeight)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: walletBirthday,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = UInt64(expectedLatestHeight)
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "main"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
var nextBatch: CompactBlockProcessor.NextState?
|
|
|
|
do {
|
|
|
|
nextBatch = try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
|
|
|
XCTFail("this shouldn't happen: \(error)")
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
guard let _ = nextBatch else {
|
2021-06-17 16:58:30 -07:00
|
|
|
XCTFail("result should not be nil")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-09-23 06:26:41 -07:00
|
|
|
XCTAssertTrue(
|
|
|
|
{
|
2022-09-01 05:58:41 -07:00
|
|
|
switch nextBatch {
|
2022-11-09 13:01:43 -08:00
|
|
|
case .processNewBlocks(range: CompactBlockRange(uncheckedBounds: (expectedStoreLatestHeight + 1, expectedLatestHeight)), latestBlockHeight: expectedLatestHeight):
|
2021-09-23 06:26:41 -07:00
|
|
|
return true
|
|
|
|
default:
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}(),
|
2022-09-01 05:58:41 -07:00
|
|
|
"Expected \(expectedResult) got: \(String(describing: nextBatch))"
|
2021-09-23 06:26:41 -07:00
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
func testResultProcessorFinished() async throws {
|
2021-07-28 09:59:10 -07:00
|
|
|
let network = ZcashNetworkBuilder.network(for: .mainnet)
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedLatestHeight = BlockHeight(1230000)
|
2021-09-23 06:26:41 -07:00
|
|
|
let service = MockLightWalletService(
|
|
|
|
latestBlockHeight: expectedLatestHeight,
|
|
|
|
service: LightWalletGRPCService(endpoint: LightWalletEndpointBuilder.default)
|
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
let expectedStoreLatestHeight = BlockHeight(1230000)
|
|
|
|
let walletBirthday = BlockHeight(1210000)
|
2022-09-01 05:58:41 -07:00
|
|
|
let expectedResult = CompactBlockProcessor.NextState.finishProcessing(height: expectedStoreLatestHeight)
|
|
|
|
let storage = try! TestDbBuilder.inMemoryCompactBlockStorage()
|
2021-06-17 16:58:30 -07:00
|
|
|
let repository = ZcashConsoleFakeStorage(latestBlockHeight: expectedStoreLatestHeight)
|
|
|
|
let downloader = CompactBlockDownloader(service: service, storage: repository)
|
2021-09-23 06:26:41 -07:00
|
|
|
let config = CompactBlockProcessor.Configuration(
|
|
|
|
cacheDb: try! __cacheDbURL(),
|
|
|
|
dataDb: try! __dataDbURL(),
|
|
|
|
downloadBatchSize: 100,
|
|
|
|
retries: 5,
|
|
|
|
maxBackoffInterval: 10,
|
|
|
|
rewindDistance: 100,
|
|
|
|
walletBirthday: walletBirthday,
|
|
|
|
saplingActivation: network.constants.saplingActivationHeight,
|
|
|
|
network: network
|
|
|
|
)
|
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
var info = LightdInfo()
|
|
|
|
info.blockHeight = UInt64(expectedLatestHeight)
|
|
|
|
info.branch = "d34db33f"
|
|
|
|
info.chainName = "main"
|
|
|
|
info.buildUser = "test user"
|
|
|
|
info.consensusBranchID = "d34db4d"
|
2021-09-15 05:21:29 -07:00
|
|
|
info.saplingActivationHeight = UInt64(network.constants.saplingActivationHeight)
|
2021-09-23 06:26:41 -07:00
|
|
|
|
2021-06-17 16:58:30 -07:00
|
|
|
service.mockLightDInfo = info
|
|
|
|
|
|
|
|
let mockRust = MockRustBackend.self
|
|
|
|
mockRust.consensusBranchID = 0xd34db4d
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
let compactBlockProcessor = CompactBlockProcessor(
|
|
|
|
service: service,
|
|
|
|
storage: storage,
|
|
|
|
backend: mockRust,
|
|
|
|
config: config
|
|
|
|
)
|
|
|
|
|
|
|
|
var nextBatch: CompactBlockProcessor.NextState?
|
|
|
|
do {
|
|
|
|
nextBatch = try await compactBlockProcessor.figureNextBatch(downloader: downloader)
|
|
|
|
XCTAssertFalse(Task.isCancelled)
|
|
|
|
} catch {
|
|
|
|
XCTFail("this shouldn't happen: \(error)")
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
|
2022-09-01 05:58:41 -07:00
|
|
|
guard let _ = nextBatch else {
|
2021-06-17 16:58:30 -07:00
|
|
|
XCTFail("result should not be nil")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-09-23 06:26:41 -07:00
|
|
|
XCTAssertTrue(
|
|
|
|
{
|
2022-09-01 05:58:41 -07:00
|
|
|
|
|
|
|
switch nextBatch {
|
2021-09-23 06:26:41 -07:00
|
|
|
case .finishProcessing(height: expectedLatestHeight):
|
|
|
|
return true
|
|
|
|
default:
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}(),
|
2022-09-01 05:58:41 -07:00
|
|
|
"Expected \(expectedResult) got: \(String(describing: nextBatch))"
|
2021-09-23 06:26:41 -07:00
|
|
|
)
|
2021-06-17 16:58:30 -07:00
|
|
|
}
|
|
|
|
}
|