Skip to content

Commit b19f071

Browse files
committed
Add some bech32 serial/deserial tests
1 parent 57a1dda commit b19f071

File tree

1 file changed

+52
-5
lines changed

1 file changed

+52
-5
lines changed

lightning-invoice/tests/ser_de.rs

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -475,16 +475,63 @@ fn invoice_features_encoding() {
475475
assert_eq!(features, features_deserialized);
476476
}
477477

478+
use core::fmt::Debug;
479+
480+
/// Test base32 encode and decode
481+
fn ser_de_test<T>(o: T, expected_str: &str) where T: ToBase32 + FromBase32 + Eq + Debug, T::Err: Debug {
482+
let serialized_32 = o.to_base32();
483+
assert_eq!(serialized_32.len(), expected_str.len());
484+
485+
let serialized_str = serialized_32.iter().map(|f| f.to_char()).collect::<String>();
486+
assert_eq!(serialized_str, expected_str);
487+
488+
// deserialize back
489+
let o2 = T::from_base32(&serialized_32).unwrap();
490+
assert_eq!(o, o2);
491+
}
492+
493+
/// Test base32 encode and decode, and also length hint
494+
fn ser_de_test_len<T>(o: T, expected_str: &str, opt_expected_len_hint: Option<usize>) where T: ToBase32 + FromBase32 + Base32Len + Eq + Debug, T::Err: Debug {
495+
let expected_len_hint = opt_expected_len_hint.unwrap_or(expected_str.len());
496+
assert_eq!(o.base32_len(), expected_len_hint);
497+
498+
ser_de_test(o, expected_str)
499+
}
500+
501+
#[test]
502+
fn vec_u8() {
503+
let v = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
504+
ser_de_test_len(v, "qqqsyqcyq5rqwzqf", Some(17)); // 16 or 17 ?
505+
}
506+
507+
#[test]
508+
fn payment_secret() {
509+
let payment_secret = PaymentSecret([7; 32]);
510+
ser_de_test_len(payment_secret, "qurswpc8qurswpc8qurswpc8qurswpc8qurswpc8qurswpc8qurs", None);
511+
}
512+
513+
#[test]
514+
fn raw_data_part() {
515+
use crate::TaggedField::PaymentHash;
516+
517+
let raw_data_part = RawDataPart {
518+
timestamp: PositiveTimestamp::from_unix_timestamp(10000).unwrap(),
519+
tagged_fields: vec ! [
520+
PaymentHash(Sha256(sha256::Hash::from_str(
521+
"0001020304050607080900010203040506070809000102030405060708090102"
522+
).unwrap())).into(),
523+
],
524+
};
525+
ser_de_test(raw_data_part, "qqqqfcspp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypq");
526+
}
527+
478528
#[test]
479-
fn payeepubkey_ser_de() {
529+
fn payeepubkey() {
480530
use bitcoin::key::Secp256k1;
481531
use bitcoin::secp256k1::{PublicKey, SecretKey};
482532

483533
let secp = Secp256k1::new();
484534
let dummy_secret_key = SecretKey::from_slice(&[1; 32]).unwrap();
485535
let payee_pub_key = PayeePubKey(PublicKey::from_secret_key(&secp, &dummy_secret_key));
486-
let serialized32 = payee_pub_key.to_base32();
487-
assert_eq!(serialized32.len(), 53);
488-
let payee_pub_key2 = PayeePubKey::from_base32(&serialized32).unwrap();
489-
assert_eq!(payee_pub_key, payee_pub_key2);
536+
ser_de_test_len(payee_pub_key, "qvdcf32k0vfxgsyet5ldt246q4jaw8scx3sysx0lnstlt6w4m5rc7", None);
490537
}

0 commit comments

Comments
 (0)