Skip to content

Commit 5fd405f

Browse files
committed
Update tests and batteries for new 0.0.104 API, fix Java 18 build
As of this commit, leaks in the full test suite are: 20 allocations remained for 1115206 bytes.
1 parent 51a98f3 commit 5fd405f

File tree

4 files changed

+41
-26
lines changed

4 files changed

+41
-26
lines changed

src/main/java/org/ldk/batteries/ChannelManagerConstructor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public interface EventHandler {
184184
* This also spawns a background thread which will call the appropriate methods on the provided
185185
* EventHandler as required.
186186
*/
187-
public void chain_sync_completed(EventHandler event_handler, @Nullable LockableScore scorer) {
187+
public void chain_sync_completed(EventHandler event_handler, @Nullable MultiThreadedLockableScore scorer) {
188188
if (background_processor != null) { return; }
189189
for (TwoTuple_BlockHashChannelMonitorZ monitor: channel_monitors) {
190190
this.chain_monitor.as_Watch().watch_channel(monitor.get_b().get_funding_txo().get_a(), monitor.get_b());

src/test/java/org/ldk/HumanObjectPeerTest.java

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ public Result_SignDecodeErrorZ read_chan_signer(byte[] reader) {
123123
public Result_RecoverableSignatureNoneZ sign_invoice(byte[] invoice_preimage) {
124124
return underlying_if.sign_invoice(invoice_preimage);
125125
}
126+
127+
@Override
128+
public byte[] get_inbound_payment_key_material() {
129+
return underlying_if.get_inbound_payment_key_material();
130+
}
126131
});
127132
}
128133

@@ -139,8 +144,8 @@ public Result_NoneChannelMonitorUpdateErrZ update_channel(OutPoint funding_txo,
139144
synchronized (monitors) {
140145
String txid = Arrays.toString(funding_txo.get_txid());
141146
assert monitors.containsKey(txid);
142-
Result_NoneMonitorUpdateErrorZ update_res = monitors.get(txid).update_monitor(update, tx_broadcaster, fee_estimator, logger);
143-
assert update_res instanceof Result_NoneMonitorUpdateErrorZ.Result_NoneMonitorUpdateErrorZ_OK;
147+
Result_NoneNoneZ update_res = monitors.get(txid).update_monitor(update, tx_broadcaster, fee_estimator, logger);
148+
assert update_res instanceof Result_NoneNoneZ.Result_NoneNoneZ_OK;
144149
}
145150
return Result_NoneChannelMonitorUpdateErrZ.ok();
146151
}
@@ -206,7 +211,7 @@ private ChannelMonitor test_mon_roundtrip(OutPoint expected_id, byte[] data) {
206211
}
207212

208213
private Peer(Object _dummy, byte seed) {
209-
logger = Logger.new_impl((Record arg)->{
214+
logger = Logger.new_impl((org.ldk.structs.Record arg)->{
210215
if (arg.get_level() == Level.LDKLevel_Error)
211216
System.err.println(seed + ": " + arg.get_module_path() + " - " + arg.get_args());
212217
else
@@ -353,8 +358,8 @@ private void bind_nio() {
353358
this.constructor = new ChannelManagerConstructor(Network.LDKNetwork_Bitcoin, UserConfig.with_default(), new byte[32], 0,
354359
this.keys_interface, this.fee_estimator, this.chain_monitor, this.router, this.tx_broadcaster, this.logger);
355360
}
356-
LockableScore scorer = null;
357-
if (use_invoice_payer) { scorer = LockableScore.of(Scorer.with_default().as_Score()); }
361+
MultiThreadedLockableScore scorer = null;
362+
if (use_invoice_payer) { scorer = MultiThreadedLockableScore.of(Scorer.with_default().as_Score()); }
358363
constructor.chain_sync_completed(new ChannelManagerConstructor.EventHandler() {
359364
@Override public void handle_event(Event event) {
360365
synchronized (pending_manager_events) {
@@ -376,12 +381,13 @@ private void bind_nio() {
376381
if (use_invoice_payer) {
377382
this.payer = InvoicePayer.of(this.chan_manager.as_Payer(), Router.new_impl(new Router.RouterInterface() {
378383
@Override
379-
public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, ChannelDetails[] first_hops, Score scorer) {
384+
public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, byte[] payment_hash, ChannelDetails[] first_hops, Score scorer) {
380385
return UtilMethods.find_route(payer, params, router, first_hops, logger, scorer);
381386
}
382-
}), LockableScore.of(Score.new_impl(new Score.ScoreInterface() {
387+
}), MultiThreadedLockableScore.of(Score.new_impl(new Score.ScoreInterface() {
383388
@Override public void payment_path_failed(RouteHop[] path, long scid) {}
384-
@Override public long channel_penalty_msat(long scid, NodeId src, NodeId dst) { return 0; }
389+
@Override public long channel_penalty_msat(long short_channel_id, long send_amt_msat, Option_u64Z channel_capacity_msat, NodeId source, NodeId target) { return 0; }
390+
@Override public void payment_path_successful(RouteHop[] path) {}
385391
@Override public byte[] write() { assert false; return null; }
386392
})), logger, EventHandler.new_impl(new EventHandler.EventHandlerInterface() {
387393
@Override public void handle_event(Event event) {
@@ -430,8 +436,8 @@ public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters para
430436
assert false;
431437
} catch (ChannelManagerConstructor.InvalidSerializedDataException e) {}
432438
}
433-
LockableScore scorer = null;
434-
if (use_invoice_payer) { scorer = LockableScore.of(Scorer.with_default().as_Score()); }
439+
MultiThreadedLockableScore scorer = null;
440+
if (use_invoice_payer) { scorer = MultiThreadedLockableScore.of(Scorer.with_default().as_Score()); }
435441
constructor.chain_sync_completed(new ChannelManagerConstructor.EventHandler() {
436442
@Override public void handle_event(Event event) {
437443
synchronized (pending_manager_events) {
@@ -484,12 +490,13 @@ public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters para
484490
if (use_invoice_payer) {
485491
this.payer = InvoicePayer.of(this.chan_manager.as_Payer(), Router.new_impl(new Router.RouterInterface() {
486492
@Override
487-
public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, ChannelDetails[] first_hops, Score scorer) {
493+
public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, byte[] _payment_hash, ChannelDetails[] first_hops, Score scorer) {
488494
return UtilMethods.find_route(payer, params, router, first_hops, logger, scorer);
489495
}
490-
}), LockableScore.of(Score.new_impl(new Score.ScoreInterface() {
496+
}), MultiThreadedLockableScore.of(Score.new_impl(new Score.ScoreInterface() {
497+
@Override public long channel_penalty_msat(long short_channel_id, long send_amt_msat, Option_u64Z channel_capacity_msat, NodeId source, NodeId target) { return 0; }
491498
@Override public void payment_path_failed(RouteHop[] path, long scid) {}
492-
@Override public long channel_penalty_msat(long scid, NodeId src, NodeId dst) { return 0; }
499+
@Override public void payment_path_successful(RouteHop[] path) {}
493500
@Override public byte[] write() { assert false; return null; }
494501
})), logger, EventHandler.new_impl(new EventHandler.EventHandlerInterface() {
495502
@Override public void handle_event(Event event) {
@@ -593,9 +600,11 @@ Event[] get_manager_events(int expected_len, Peer peer1, Peer peer2) {
593600
if (use_chan_manager_constructor) {
594601
while (res.length < expected_len) {
595602
synchronized (this.pending_manager_events) {
596-
res = this.pending_manager_events.toArray(res);
597-
assert res.length == expected_len || res.length == 0; // We don't handle partial results
598-
this.pending_manager_events.clear();
603+
if (this.pending_manager_events.size() >= expected_len) {
604+
res = this.pending_manager_events.toArray(res);
605+
assert res.length == expected_len;
606+
this.pending_manager_events.clear();
607+
}
599608
if (res.length < expected_len) {
600609
try { this.pending_manager_events.wait(); } catch (InterruptedException e) { assert false; }
601610
}
@@ -610,7 +619,6 @@ Event[] get_manager_events(int expected_len, Peer peer1, Peer peer2) {
610619
peer2.nio_peer_handler.check_events();
611620
}
612621
chan_manager.as_EventsProvider().process_pending_events(EventHandler.new_impl(l::add));
613-
assert l.size() == expected_len || l.size() == 0; // We don't handle partial results
614622
}
615623
return l.toArray(new Event[0]);
616624
}
@@ -900,9 +908,11 @@ void do_test_message_handler_b(TestState state) throws InterruptedException {
900908
assert !Arrays.equals(payment_preimage, new byte[32]);
901909
state.peer2.chan_manager.claim_funds(payment_preimage);
902910

903-
events = state.peer1.get_manager_events(1, state.peer1, state.peer2);
911+
events = state.peer1.get_manager_events(2, state.peer1, state.peer2);
904912
assert events[0] instanceof Event.PaymentSent;
905913
assert Arrays.equals(((Event.PaymentSent) events[0]).payment_preimage, payment_preimage);
914+
assert events[1] instanceof Event.PaymentPathSuccessful;
915+
assert Arrays.equals(((Event.PaymentPathSuccessful) events[1]).payment_hash, ((Event.PaymentSent) events[0]).payment_hash);
906916

907917
if (use_nio_peer_handler) {
908918
// We receive PaymentSent immediately upon receipt of the payment preimage, but we expect to not have an

src/test/java/org/ldk/ManualMsgHandlingPeerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public long handle_query_short_channel_ids(byte[] their_node_id, long msg) {
165165
bindings.IgnoringMessageHandler_as_CustomMessageHandler(ignoring_message_handler));
166166

167167
// Test Level_max() since its the only place we create a java object from a Rust-returned enum.
168-
assert bindings.Level_max() == Level.LDKLevel_Trace;
168+
assert bindings.Level_max() == Level.LDKLevel_Gossip;
169169

170170
// Note that we can't rely on finalizer order, so don't bother trying to rely on it here
171171
bindings.Logger_free(logger);

src/test/java/org/ldk/PeerTest.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public long update_channel(long funding_txo, long update) {
6565
String txid = Arrays.toString(bindings.OutPoint_get_txid(funding_txo));
6666
assert monitors.containsKey(txid);
6767
long update_res = bindings.ChannelMonitor_update_monitor(monitors.get(txid), update, tx_broadcaster, fee_estimator, logger);
68-
assert bindings.CResult_NoneMonitorUpdateErrorZ_is_ok(update_res);
69-
bindings.CResult_NoneMonitorUpdateErrorZ_free(update_res);
68+
assert bindings.CResult_NoneNoneZ_is_ok(update_res);
69+
bindings.CResult_NoneNoneZ_free(update_res);
7070
}
7171
bindings.OutPoint_free(funding_txo);
7272
bindings.ChannelMonitorUpdate_free(update);
@@ -274,7 +274,9 @@ public long send_data(byte[] data, boolean resume_read) {
274274
for (long chan : peer2_chans) bindings.ChannelDetails_free(chan);
275275

276276
long no_min_val = bindings.COption_u64Z_none();
277-
long inbound_payment = bindings.ChannelManager_create_inbound_payment(peer2.chan_manager, no_min_val, 7200, 42);
277+
long inbound_payment = bindings.ChannelManager_create_inbound_payment(peer2.chan_manager, no_min_val, 7200);
278+
assert bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(inbound_payment);
279+
long payment_tuple = bindings.LDKCResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_get_ok(inbound_payment);
278280
bindings.COption_u64Z_free(no_min_val);
279281
long scorer = bindings.Scorer_default();
280282
long scorer_interface = bindings.Scorer_as_Score(scorer);
@@ -295,9 +297,9 @@ public long send_data(byte[] data, boolean resume_read) {
295297
for (long chan : peer1_chans) bindings.ChannelDetails_free(chan);
296298
assert bindings.CResult_RouteLightningErrorZ_is_ok(route);
297299
long payment_res = bindings.ChannelManager_send_payment(peer1.chan_manager, bindings.LDKCResult_RouteLightningErrorZ_get_ok(route),
298-
bindings.C2Tuple_PaymentHashPaymentSecretZ_get_a(inbound_payment), bindings.C2Tuple_PaymentHashPaymentSecretZ_get_b(inbound_payment));
300+
bindings.C2Tuple_PaymentHashPaymentSecretZ_get_a(payment_tuple), bindings.C2Tuple_PaymentHashPaymentSecretZ_get_b(payment_tuple));
299301
bindings.CResult_RouteLightningErrorZ_free(route);
300-
bindings.C2Tuple_PaymentHashPaymentSecretZ_free(inbound_payment);
302+
bindings.CResult_C2Tuple_PaymentHashPaymentSecretZNoneZ_is_ok(inbound_payment);
301303
assert bindings.CResult_NonePaymentSendFailureZ_is_ok(payment_res);
302304
bindings.CResult_NonePaymentSendFailureZ_free(payment_res);
303305

@@ -322,10 +324,13 @@ public long send_data(byte[] data, boolean resume_read) {
322324
deliver_peer_messages(list, peer1.peer_manager, peer2.peer_manager);
323325

324326
bindings.EventsProvider_process_pending_events(peer1.chan_manager_events, handler);
325-
assert events.size() == 1;
327+
assert events.size() == 2;
326328
bindings.LDKEvent sent = bindings.LDKEvent_ref_from_ptr(events.get(0));
327329
assert sent instanceof bindings.LDKEvent.PaymentSent;
328330
bindings.Event_free(events.remove(0));
331+
bindings.LDKEvent sent_path = bindings.LDKEvent_ref_from_ptr(events.get(0));
332+
assert sent_path instanceof bindings.LDKEvent.PaymentPathSuccessful;
333+
bindings.Event_free(events.remove(0));
329334

330335
bindings.EventHandler_free(handler);
331336

0 commit comments

Comments
 (0)