/ fedimint-client / src / backup / tests.rs
tests.rs
 1  use std::io::Cursor;
 2  
 3  use anyhow::Result;
 4  use fedimint_core::encoding::{Decodable, Encodable};
 5  use fedimint_derive_secret::DerivableSecret;
 6  
 7  use crate::backup::{ClientBackup, Metadata};
 8  use crate::Client;
 9  
10  #[test]
11  fn sanity_ecash_backup_align() {
12      assert_eq!(
13          ClientBackup::get_alignment_size(1),
14          ClientBackup::PADDING_ALIGNMENT
15      );
16      assert_eq!(
17          ClientBackup::get_alignment_size(ClientBackup::PADDING_ALIGNMENT),
18          ClientBackup::PADDING_ALIGNMENT
19      );
20      assert_eq!(
21          ClientBackup::get_alignment_size(ClientBackup::PADDING_ALIGNMENT + 1),
22          ClientBackup::PADDING_ALIGNMENT * 2
23      );
24  }
25  
26  #[test]
27  fn sanity_ecash_backup_decode_encode() -> Result<()> {
28      let orig = ClientBackup {
29          session_count: 0,
30          metadata: Metadata::from_raw(vec![1, 2, 3]),
31          modules: Default::default(),
32      };
33  
34      let encoded = orig.consensus_encode_to_vec();
35      assert_eq!(encoded.len(), ClientBackup::PADDING_ALIGNMENT);
36      assert_eq!(
37          orig,
38          ClientBackup::consensus_decode(&mut Cursor::new(encoded), &Default::default())?
39      );
40  
41      Ok(())
42  }
43  
44  #[test]
45  fn sanity_ecash_backup_encrypt_decrypt() -> Result<()> {
46      let orig = ClientBackup {
47          modules: Default::default(),
48          session_count: 1,
49          metadata: Metadata::from_raw(vec![1, 2, 3]),
50      };
51  
52      let secret = DerivableSecret::new_root(&[1; 32], &[1, 32]);
53      let key = Client::get_derived_backup_encryption_key_static(&secret);
54  
55      let encrypted = orig.encrypt_to(&key)?;
56  
57      let decrypted = encrypted.decrypt_with(&key, &Default::default())?;
58  
59      assert_eq!(orig, decrypted);
60  
61      Ok(())
62  }