+ bindings.PeerManager_process_events(peer1.peer_manager);
+ while (!list.isEmpty()) { list.poll().join(); }
+ bindings.PeerManager_process_events(peer2.peer_manager);
+ while (!list.isEmpty()) { list.poll().join(); }
+ bindings.PeerManager_process_events(peer1.peer_manager);
+ while (!list.isEmpty()) { list.poll().join(); }
+
+ bindings.EventsProvider_process_pending_events(peer2.chan_manager_events, handler);
+ assert events.size() == 1;
+ bindings.LDKEvent forwardable = bindings.LDKEvent_ref_from_ptr(events.get(0));
+ assert forwardable instanceof bindings.LDKEvent.PendingHTLCsForwardable;
+ bindings.Event_free(events.remove(0));
+ bindings.ChannelManager_process_pending_htlc_forwards(peer2.chan_manager);
+
+ bindings.EventsProvider_process_pending_events(peer2.chan_manager_events, handler);
+ assert events.size() == 1;
+ bindings.LDKEvent payment_recvd = bindings.LDKEvent_ref_from_ptr(events.get(0));
+ assert payment_recvd instanceof bindings.LDKEvent.PaymentReceived;
+ assert bindings.ChannelManager_claim_funds(peer2.chan_manager, ((bindings.LDKEvent.PaymentReceived) payment_recvd).payment_preimage);
+ bindings.Event_free(events.remove(0));
+
+ bindings.PeerManager_process_events(peer2.peer_manager);
+ while (!list.isEmpty()) { list.poll().join(); }
+ bindings.PeerManager_process_events(peer1.peer_manager);
+ while (!list.isEmpty()) { list.poll().join(); }
+
+ bindings.EventsProvider_process_pending_events(peer1.chan_manager_events, handler);
+ assert events.size() == 1;
+ bindings.LDKEvent sent = bindings.LDKEvent_ref_from_ptr(events.get(0));
+ assert sent instanceof bindings.LDKEvent.PaymentSent;
+ bindings.Event_free(events.remove(0));
+
+ bindings.EventHandler_free(handler);
+