143 lines
4.6 KiB
Swift
143 lines
4.6 KiB
Swift
//
|
|
// TransactionRepositoryTests.swift
|
|
// ZcashLightClientKit-Unit-Tests
|
|
//
|
|
// Created by Francisco Gindre on 11/16/19.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import ZcashLightClientKit
|
|
class TransactionRepositoryTests: XCTestCase {
|
|
|
|
var transactionRepository: TransactionRepository!
|
|
|
|
override func setUp() {
|
|
transactionRepository = TestDbBuilder.transactionRepository()
|
|
}
|
|
|
|
override func tearDown() {
|
|
transactionRepository = nil
|
|
}
|
|
|
|
func testCount() {
|
|
var count: Int?
|
|
XCTAssertNoThrow(try { count = try self.transactionRepository.countAll()}())
|
|
XCTAssertNotNil(count)
|
|
XCTAssertEqual(count, 27)
|
|
|
|
}
|
|
|
|
func testCountUnmined() {
|
|
var count: Int?
|
|
XCTAssertNoThrow(try { count = try self.transactionRepository.countUnmined()}())
|
|
XCTAssertNotNil(count)
|
|
XCTAssertEqual(count, 0)
|
|
}
|
|
|
|
func testFindById() {
|
|
var tx: TransactionEntity?
|
|
XCTAssertNoThrow(try { tx = try self.transactionRepository.findBy(id: 10)}())
|
|
guard let transaction = tx else {
|
|
XCTFail("transaction is nil")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(transaction.id, 10)
|
|
XCTAssertEqual(transaction.minedHeight, 652812)
|
|
XCTAssertEqual(transaction.transactionIndex, 5)
|
|
|
|
}
|
|
|
|
func testFindByTxId() {
|
|
var tx: TransactionEntity?
|
|
|
|
let id = "0BAFC5B83F5B39A5270144ECD98DBC65115055927EDDA8FF20F081FFF13E4780".hexDecodedData()
|
|
|
|
XCTAssertNoThrow(try { tx = try self.transactionRepository.findBy(rawId: id)}())
|
|
guard let transaction = tx else {
|
|
XCTFail("transaction is nil")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(transaction.id, 10)
|
|
XCTAssertEqual(transaction.minedHeight, 652812)
|
|
XCTAssertEqual(transaction.transactionIndex, 5)
|
|
}
|
|
|
|
func testFindAllSentTransactions() {
|
|
var transactions: [ConfirmedTransactionEntity]?
|
|
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAllSentTransactions(limit: Int.max) }())
|
|
guard let txs = transactions else {
|
|
XCTFail("find all sent transactions returned no transactions")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txs.count, 0)
|
|
}
|
|
|
|
func testFindAllReceivedTransactions() {
|
|
var transactions: [ConfirmedTransactionEntity]?
|
|
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAllReceivedTransactions(limit: Int.max) }())
|
|
guard let txs = transactions else {
|
|
XCTFail("find all received transactions returned no transactions")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txs.count, 27)
|
|
}
|
|
|
|
func testFindAllTransactions() {
|
|
var transactions: [ConfirmedTransactionEntity]?
|
|
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAll(limit: Int.max) }())
|
|
guard let txs = transactions else {
|
|
XCTFail("find all transactions returned no transactions")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txs.count, 27)
|
|
}
|
|
|
|
func testFindAllPerformance() {
|
|
// This is an example of a performance test case.
|
|
self.measure {
|
|
// Put the code you want to measure the time of here.
|
|
|
|
do {
|
|
_ = try self.transactionRepository.findAll(limit: Int.max)
|
|
} catch {
|
|
XCTFail("find all failed")
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension String {
|
|
/// A data representation of the hexadecimal bytes in this string.
|
|
func hexDecodedData() -> Data {
|
|
// Get the UTF8 characters of this string
|
|
let chars = Array(utf8)
|
|
|
|
// Keep the bytes in an UInt8 array and later convert it to Data
|
|
var bytes = [UInt8]()
|
|
bytes.reserveCapacity(count / 2)
|
|
|
|
// It is a lot faster to use a lookup map instead of strtoul
|
|
let map: [UInt8] = [
|
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 01234567
|
|
0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89:;<=>?
|
|
0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, // @ABCDEFG
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // HIJKLMNO
|
|
]
|
|
|
|
// Grab two characters at a time, map them and turn it into a byte
|
|
for i in stride(from: 0, to: count, by: 2) {
|
|
let index1 = Int(chars[i] & 0x1F ^ 0x10)
|
|
let index2 = Int(chars[i + 1] & 0x1F ^ 0x10)
|
|
bytes.append(map[index1] << 4 | map[index2])
|
|
}
|
|
|
|
return Data(bytes)
|
|
}
|
|
}
|