From 82ac2c6a311c2b54333b90ecd672792c44442a7f Mon Sep 17 00:00:00 2001 From: optout <13562139+optout21@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:44:43 +0200 Subject: [PATCH] Add [u8; N] impl, more tests --- lightning-invoice/src/de.rs | 8 ++++++++ lightning-invoice/src/test_ser_de.rs | 29 ++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/lightning-invoice/src/de.rs b/lightning-invoice/src/de.rs index 3330e490d20..d5ff0cc93a4 100644 --- a/lightning-invoice/src/de.rs +++ b/lightning-invoice/src/de.rs @@ -46,6 +46,14 @@ impl FromBase32 for Vec { } } +impl FromBase32 for [u8; N] { + type Err = CheckedHrpstringError; + + fn from_base32(data: &[Fe32]) -> Result { + Ok(data.iter().copied().fes_to_bytes().collect::>().try_into().unwrap()) + } +} + impl FromBase32 for PaymentSecret { type Err = CheckedHrpstringError; diff --git a/lightning-invoice/src/test_ser_de.rs b/lightning-invoice/src/test_ser_de.rs index dac9b1495f9..643ad89b78d 100644 --- a/lightning-invoice/src/test_ser_de.rs +++ b/lightning-invoice/src/test_ser_de.rs @@ -48,6 +48,15 @@ fn vec_u8() { ser_de_test_len(vec![255, 254, 253, 252, 251, 250, 249, 248, 247, 246], "lll0ml8mltul3alk"); } +#[test] +fn array_u8() { + ser_de_test_len([0], "qq"); + ser_de_test_len([255], "lu"); + ser_de_test_len([0, 1], "qqqs"); + ser_de_test_len([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "qqqsyqcyq5rqwzqf"); + ser_de_test_len([255, 254, 253, 252, 251, 250, 249, 248, 247, 246], "lll0ml8mltul3alk"); +} + #[test] fn payment_secret() { let payment_secret = PaymentSecret([7; 32]); @@ -66,8 +75,24 @@ fn positive_timestamp() { fn bolt11_invoice_features() { use crate::Bolt11InvoiceFeatures; - let features = Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5, 42, 100, 101]); - ser_de_test_len(features, "x2ep2q5zqxqsp"); + // Test few values, lengths, and paddings + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5, 42, 100, 101]), "x2ep2q5zqxqsp"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![]), ""); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0]), ""); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1]), "p"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![31]), "l"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100]), "ry"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![255]), "8l"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1]), "p"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2]), "sp"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3]), "xqsp"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4]), "zqxqsp"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5]), "5zqxqsp"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![255, 254, 253, 252, 251]), "l070mlhl"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100, 0]), "ry"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100, 0, 0, 0]), "ry"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0, 100]), "eqq"); + ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0, 0, 0, 100]), "pjqqqqq"); } #[test]