1
1
use crate :: {
2
2
sha256, FromBase32 , PayeePubKey , PaymentSecret , PositiveTimestamp , RawDataPart , Sha256 ,
3
3
} ;
4
- use bech32:: { Base32Len , ToBase32 } ;
4
+ use bech32:: { u5 , Base32Len , ToBase32 } ;
5
5
6
6
use core:: fmt:: Debug ;
7
7
use std:: str:: FromStr ;
@@ -14,11 +14,11 @@ where
14
14
{
15
15
let serialized_32 = o. to_base32 ( ) ;
16
16
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 ) ;
18
18
19
19
// deserialize back
20
20
let o2 = T :: from_base32 ( & serialized_32) . unwrap ( ) ;
21
- assert_eq ! ( o, o2) ;
21
+ assert_eq ! ( o, o2, "Mismatch for {}" , serialized_str ) ;
22
22
}
23
23
24
24
/// Test base32 encode and decode, and also length hint
27
27
T : ToBase32 + FromBase32 + Base32Len + Eq + Debug ,
28
28
T :: Err : Debug ,
29
29
{
30
- assert_eq ! ( o. base32_len( ) , expected_str. len( ) ) ;
30
+ assert_eq ! ( o. base32_len( ) , expected_str. len( ) , "Mismatch for {} {:?}" , expected_str , o ) ;
31
31
32
32
ser_de_test ( o, expected_str)
33
33
}
@@ -67,8 +67,66 @@ fn positive_timestamp() {
67
67
fn bolt11_invoice_features ( ) {
68
68
use crate :: Bolt11InvoiceFeatures ;
69
69
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
+ ) ;
72
130
}
73
131
74
132
#[ test]
0 commit comments