11use crate :: {
22 sha256, FromBase32 , PayeePubKey , PaymentSecret , PositiveTimestamp , RawDataPart , Sha256 ,
33} ;
4- use bech32:: { Base32Len , ToBase32 } ;
4+ use bech32:: { u5 , Base32Len , ToBase32 } ;
55
66use core:: fmt:: Debug ;
77use std:: str:: FromStr ;
@@ -14,11 +14,11 @@ where
1414{
1515 let serialized_32 = o. to_base32 ( ) ;
1616 let serialized_str = serialized_32. iter ( ) . map ( |f| f. to_char ( ) ) . collect :: < String > ( ) ;
17- assert_eq ! ( serialized_str, expected_str) ;
17+ assert_eq ! ( serialized_str, expected_str, "Mismatch for {:?}" , o ) ;
1818
1919 // deserialize back
2020 let o2 = T :: from_base32 ( & serialized_32) . unwrap ( ) ;
21- assert_eq ! ( o, o2) ;
21+ assert_eq ! ( o, o2, "Mismatch for {}" , serialized_str ) ;
2222}
2323
2424/// Test base32 encode and decode, and also length hint
2727 T : ToBase32 + FromBase32 + Base32Len + Eq + Debug ,
2828 T :: Err : Debug ,
2929{
30- assert_eq ! ( o. base32_len( ) , expected_str. len( ) ) ;
30+ assert_eq ! ( o. base32_len( ) , expected_str. len( ) , "Mismatch for {} {:?}" , expected_str , o ) ;
3131
3232 ser_de_test ( o, expected_str)
3333}
@@ -67,8 +67,66 @@ fn positive_timestamp() {
6767fn bolt11_invoice_features ( ) {
6868 use crate :: Bolt11InvoiceFeatures ;
6969
70- let features = Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 , 3 , 4 , 5 , 42 , 100 , 101 ] ) ;
71- ser_de_test_len ( features, "x2ep2q5zqxqsp" ) ;
70+ // Test few values, lengths, and paddings
71+ ser_de_test_len (
72+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 , 3 , 4 , 5 , 42 , 100 , 101 ] ) ,
73+ "x2ep2q5zqxqsp" ,
74+ ) ;
75+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ ] ) , "" ) ;
76+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 ] ) , "" ) ;
77+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ] ) , "p" ) ;
78+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 31 ] ) , "l" ) ;
79+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 ] ) , "ry" ) ;
80+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ] ) , "8l" ) ;
81+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ] ) , "p" ) ;
82+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 ] ) , "sp" ) ;
83+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 , 3 ] ) , "xqsp" ) ;
84+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 , 3 , 4 ] ) , "zqxqsp" ) ;
85+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 , 2 , 3 , 4 , 5 ] ) , "5zqxqsp" ) ;
86+ ser_de_test_len (
87+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 , 254 , 253 , 252 , 251 ] ) ,
88+ "l070mlhl" ,
89+ ) ;
90+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 , 0 ] ) , "ry" ) ;
91+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 , 0 , 0 , 0 ] ) , "ry" ) ;
92+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 , 100 ] ) , "eqq" ) ;
93+ ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 , 0 , 0 , 100 ] ) , "pjqqqqq" ) ;
94+ ser_de_test_len (
95+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ] ) ,
96+ "rllllllllllllll" ,
97+ ) ;
98+ ser_de_test_len (
99+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 254 ] ) ,
100+ "rl0llllllllllll" ,
101+ ) ;
102+ ser_de_test_len (
103+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 127 ] ) ,
104+ "pllllllllllllll" ,
105+ ) ;
106+ ser_de_test_len (
107+ Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 63 ] ) ,
108+ "llllllllllllll" ,
109+ ) ;
110+
111+ // To test skipping 0's in deserialization, we have to start with deserialization
112+ assert_eq ! (
113+ Bolt11InvoiceFeatures :: from_base32(
114+ & vec![ 0 , 0 , 0 , 0 , 0 , 3 , 4 ]
115+ . iter( ) . copied( ) . map( |f| u5:: try_from_u8( f) . unwrap( ) ) . collect:: <Vec <_>>( ) [ ..]
116+ )
117+ . unwrap( )
118+ . le_flags( ) ,
119+ vec![ 100 ]
120+ ) ;
121+ assert_eq ! (
122+ Bolt11InvoiceFeatures :: from_base32(
123+ & vec![ 3 , 4 ]
124+ . iter( ) . copied( ) . map( |f| u5:: try_from_u8( f) . unwrap( ) ) . collect:: <Vec <_>>( ) [ ..]
125+ )
126+ . unwrap( )
127+ . le_flags( ) ,
128+ vec![ 100 ]
129+ ) ;
72130}
73131
74132#[ test]
0 commit comments