Test `Route` serialization round-trip 2024-02-fix-route-ser
authorMatt Corallo <git@bluematt.me>
Fri, 16 Feb 2024 19:26:32 +0000 (19:26 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 16 Feb 2024 19:26:32 +0000 (19:26 +0000)
This adds testing for the previous two commits by testing that all
routes generated in testing are able to survive a serialization
round-trip.

lightning/src/util/test_utils.rs

index 8fc5a8197a78c38e13740ea663e678582676515f..15cc07466d603b4f049d00fc52df7bb546765107 100644 (file)
@@ -143,7 +143,9 @@ impl<'a> Router for TestRouter<'a> {
                &self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
                inflight_htlcs: InFlightHtlcs
        ) -> Result<Route, msgs::LightningError> {
-               if let Some((find_route_query, find_route_res)) = self.next_routes.lock().unwrap().pop_front() {
+               let route_res;
+               let next_route_opt = self.next_routes.lock().unwrap().pop_front();
+               if let Some((find_route_query, find_route_res)) = next_route_opt {
                        assert_eq!(find_route_query, *params);
                        if let Ok(ref route) = find_route_res {
                                assert_eq!(route.route_params, Some(find_route_query));
@@ -201,10 +203,18 @@ impl<'a> Router for TestRouter<'a> {
                                        }
                                }
                        }
-                       return find_route_res;
-               }
+                       route_res = find_route_res;
+               } else {
+                       route_res = self.router.find_route(payer, params, first_hops, inflight_htlcs);
+               };
 
-               self.router.find_route(payer, params, first_hops, inflight_htlcs)
+               if let Ok(route) = &route_res {
+                       // Previously, `Route`s failed to round-trip through serialization due to a write/read
+                       // mismatch. Thus, here we test all test-generated routes round-trip:
+                       let ser = route.encode();
+                       assert_eq!(Route::read(&mut &ser[..]).unwrap(), *route);
+               }
+               route_res
        }
 
        fn create_blinded_payment_paths<