Skip to content

Commit f82414b

Browse files
committed
replicate EXC_BAD_ACCESS that occurs with invoice payer
1 parent e8b5476 commit f82414b

File tree

5 files changed

+399
-114
lines changed

5 files changed

+399
-114
lines changed

xcode/DirectBindingsApp/DirectBindingsAppTests/DirectBindingsAppTests.swift

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class DirectBindingsAppTests: XCTestCase {
3131
func testVersionSanity() throws {
3232
check_get_ldk_version()
3333
check_get_ldk_bindings_version()
34-
check_platform()
34+
// check_platform()
3535
}
3636

3737
private func incrementalMemoryLeakTest() throws {
@@ -44,6 +44,14 @@ class DirectBindingsAppTests: XCTestCase {
4444
let filterOption = Option_FilterZ(value: filter)
4545
let chainMonitor = ChainMonitor(chain_source: filterOption, broadcaster: broadcaster, logger: logger, feeest: feeEstimator, persister: persister)
4646

47+
48+
var keyData = Data(count: 32)
49+
keyData.withUnsafeMutableBytes {
50+
// returns 0 on success
51+
let didCopySucceed = SecRandomCopyBytes(kSecRandomDefault, 32, $0.baseAddress!)
52+
assert(didCopySucceed == 0)
53+
}
54+
4755
let seed: [UInt8] = [UInt8](Data(base64Encoded: "//////////////////////////////////////////8=")!)
4856
let timestamp_seconds = UInt64(NSDate().timeIntervalSince1970)
4957
let timestamp_nanos = UInt32(truncating: NSNumber(value: timestamp_seconds * 1000 * 1000))
@@ -59,14 +67,15 @@ class DirectBindingsAppTests: XCTestCase {
5967

6068
var monitors: [LDKChannelMonitor] = []
6169

70+
let graph = NetworkGraph(genesis_hash: [UInt8](repeating: 0, count: 32))
6271
let channel_manager_constructor = try ChannelManagerConstructor(
6372
channel_manager_serialized: serialized_channel_manager,
6473
channel_monitors_serialized: serializedChannelMonitors,
6574
keys_interface: keysInterface,
6675
fee_estimator: feeEstimator,
6776
chain_monitor: chainMonitor,
6877
filter: filter,
69-
net_graph: nil,
78+
net_graph: graph,
7079
tx_broadcaster: broadcaster,
7180
logger: logger
7281
)
@@ -82,7 +91,25 @@ class DirectBindingsAppTests: XCTestCase {
8291
channel_manager.as_Confirm().transactions_confirmed(header: header, txdata: txdata, height: 525)
8392

8493

85-
channel_manager_constructor.chain_sync_completed(persister: cmPersister, scorer: nil)
94+
95+
let scorer = MultiThreadedLockableScore(score: Scorer().as_Score())
96+
channel_manager_constructor.chain_sync_completed(persister: cmPersister, scorer: scorer)
97+
98+
let payer = channel_manager_constructor.payer!
99+
let parsedInvoice = Invoice.from_str(s: "lnbc30n1p3ry9kvpp5xxr7s4hj808x0z0zsqr3pdsgdynffz5fax804jfh52h4r2sm996qdzygf5hgun9ve5kcmpqg3jhqmmnd96zqd3jxverzdnrvvcrgc3hvserqvp58yck2e34xyuqcqzpgxqyz5vqsp5e969dx5ux24rsfnvth98y2l65kzp0rx6f3kqakktrh6nygudyp5s9qyyssq4m8watzx5hqpayadjt9m53jy2mzgmwuxpd2pzmjq3x0aqmck68dzrzgr0lhm8ud3z06zz3w3350f24hdew4rq6cq0qfy8gwss9y93zgqvajpek")
100+
101+
assert(parsedInvoice.isOk())
102+
let parsedInvoiceValue = parsedInvoice.getValue()!
103+
104+
let amtSat: NSNumber = 2
105+
let sendRes = payer.pay_invoice(invoice: parsedInvoiceValue)
106+
if amtSat != 0 {
107+
let sendRes = payer.pay_zero_value_invoice(invoice: parsedInvoiceValue, amount_msats: UInt64(truncating: amtSat) * 1000)
108+
assert(sendRes.isOk())
109+
} else {
110+
let sendRes = payer.pay_invoice(invoice: parsedInvoiceValue)
111+
assert(sendRes.isOk())
112+
}
86113

87114
channel_manager_constructor.interrupt()
88115

@@ -124,11 +151,11 @@ class DirectBindingsAppTests: XCTestCase {
124151
path.append(extraHop)
125152
}
126153

127-
let payee = Payee(pubkey: Self.hexStringToBytes(hexString: destPubkeyHex)!)
128-
let route = Route(paths_arg: [path], payee_arg: payee)
154+
let paymentParams = PaymentParameters(payee_pubkey: Self.hexStringToBytes(hexString: destPubkeyHex)!)
155+
let route = Route(paths_arg: [path], payment_params_arg: paymentParams)
129156
}
130157

131-
func testExtendedActivity() throws {
158+
func testExtendedActivity() async throws {
132159
// for i in 0...(1 << 7) {
133160
for i in 0..<1 { // only do one test run initially
134161
let nice_close = (i & (1 << 0)) != 0;
@@ -150,24 +177,24 @@ class DirectBindingsAppTests: XCTestCase {
150177
}
151178

152179
print("Running test with flags \(i)");
153-
try SimulationRunner.do_test(nice_close: nice_close, use_km_wrapper: use_km_wrapper, use_manual_watch: use_manual_watch, reload_peers: reload_peers, break_cross_peer_refs: break_cross_refs, nio_peer_handler: nio_peer_handler, use_chan_manager_constructor: use_chan_manager_constructor)
180+
try await SimulationRunner.do_test(nice_close: nice_close, use_km_wrapper: use_km_wrapper, use_manual_watch: use_manual_watch, reload_peers: reload_peers, break_cross_peer_refs: break_cross_refs, nio_peer_handler: nio_peer_handler, use_chan_manager_constructor: use_chan_manager_constructor)
154181
}
155182

156183
}
157184

158185
fileprivate class SimulationRunner {
159186

160-
class func do_test(nice_close: Bool, use_km_wrapper: Bool, use_manual_watch: Bool, reload_peers: Bool, break_cross_peer_refs: Bool, nio_peer_handler: Bool, use_chan_manager_constructor: Bool) throws {
187+
class func do_test(nice_close: Bool, use_km_wrapper: Bool, use_manual_watch: Bool, reload_peers: Bool, break_cross_peer_refs: Bool, nio_peer_handler: Bool, use_chan_manager_constructor: Bool) async throws {
161188

162-
let instance = do_test_run(nice_close: nice_close, use_km_wrapper: use_km_wrapper, use_manual_watch: use_manual_watch, reload_peers: reload_peers, break_cross_peer_refs: break_cross_peer_refs, nio_peer_handler: nio_peer_handler, use_chan_manager_constructor: use_chan_manager_constructor)
189+
let instance = await do_test_run(nice_close: nice_close, use_km_wrapper: use_km_wrapper, use_manual_watch: use_manual_watch, reload_peers: reload_peers, break_cross_peer_refs: break_cross_peer_refs, nio_peer_handler: nio_peer_handler, use_chan_manager_constructor: use_chan_manager_constructor)
163190

164191
}
165192

166-
class func do_test_run(nice_close: Bool, use_km_wrapper: Bool, use_manual_watch: Bool, reload_peers: Bool, break_cross_peer_refs: Bool, nio_peer_handler: Bool, use_chan_manager_constructor: Bool) -> HumanObjectPeerTestInstance {
193+
class func do_test_run(nice_close: Bool, use_km_wrapper: Bool, use_manual_watch: Bool, reload_peers: Bool, break_cross_peer_refs: Bool, nio_peer_handler: Bool, use_chan_manager_constructor: Bool) async -> HumanObjectPeerTestInstance {
167194

168195
let instance = HumanObjectPeerTestInstance(nice_close: nice_close, use_km_wrapper: use_km_wrapper, use_manual_watch: use_manual_watch, reload_peers: reload_peers, break_cross_peer_refs: break_cross_peer_refs, use_nio_peer_handler: nio_peer_handler, use_filter: !nio_peer_handler, use_chan_manager_constructor: use_chan_manager_constructor)
169196

170-
instance.do_test_message_handler()
197+
await instance.do_test_message_handler()
171198
return instance
172199
}
173200

0 commit comments

Comments
 (0)