]> git.proxmox.com Git - proxmox-backup.git/blob - tests/blob_writer.rs
src/backup/data_blob.rs: new load_from_reader(), which verifies the CRC
[proxmox-backup.git] / tests / blob_writer.rs
1 use anyhow::{bail, Error};
2 use std::sync::Arc;
3 use std::io::Cursor;
4 use std::io::{Read, Write, Seek, SeekFrom };
5 use lazy_static::lazy_static;
6
7 use proxmox_backup::backup::*;
8
9 lazy_static! {
10 static ref TEST_DATA: Vec<u8> = {
11 let mut data = Vec::new();
12
13 for i in 0..100_000 {
14 data.push((i%255) as u8);
15 }
16
17 data
18 };
19
20 static ref CRYPT_CONFIG: Arc<CryptConfig> = {
21 let key = [1u8; 32];
22 Arc::new(CryptConfig::new(key).unwrap())
23 };
24 }
25
26 fn verify_test_blob(mut cursor: Cursor<Vec<u8>>) -> Result<(), Error> {
27
28 // run read tests with different buffer sizes
29 for size in [1, 3, 64*1024].iter() {
30
31 println!("Starting DataBlobReader test (size = {})", size);
32
33 cursor.seek(SeekFrom::Start(0))?;
34 let mut reader = DataBlobReader::new(&mut cursor, Some(CRYPT_CONFIG.clone()))?;
35 let mut buffer = Vec::<u8>::new();
36 // read the whole file
37 //reader.read_to_end(&mut buffer)?;
38 let mut buf = vec![0u8; *size];
39 loop {
40 let count = reader.read(&mut buf)?;
41 if count == 0 { break; }
42 buffer.extend(&buf[..count]);
43 }
44
45 reader.finish()?;
46 if buffer != *TEST_DATA {
47 bail!("blob data is wrong (read buffer size {})", size);
48 }
49 }
50
51 let raw_data = cursor.into_inner();
52
53 let blob = DataBlob::load_from_reader(&mut &raw_data[..])?;
54
55 let data = blob.decode(Some(&CRYPT_CONFIG))?;
56 if data != *TEST_DATA {
57 bail!("blob data is wrong (decode)");
58 }
59 Ok(())
60 }
61
62 #[test]
63 fn test_uncompressed_blob_writer() -> Result<(), Error> {
64 let tmp = Cursor::new(Vec::<u8>::new());
65 let mut blob_writer = DataBlobWriter::new_uncompressed(tmp)?;
66 blob_writer.write_all(&TEST_DATA)?;
67
68 verify_test_blob(blob_writer.finish()?)
69 }
70
71 #[test]
72 fn test_compressed_blob_writer() -> Result<(), Error> {
73 let tmp = Cursor::new(Vec::<u8>::new());
74 let mut blob_writer = DataBlobWriter::new_compressed(tmp)?;
75 blob_writer.write_all(&TEST_DATA)?;
76
77 verify_test_blob(blob_writer.finish()?)
78 }
79
80 #[test]
81 fn test_encrypted_blob_writer() -> Result<(), Error> {
82 let tmp = Cursor::new(Vec::<u8>::new());
83 let mut blob_writer = DataBlobWriter::new_encrypted(tmp, CRYPT_CONFIG.clone())?;
84 blob_writer.write_all(&TEST_DATA)?;
85
86 verify_test_blob(blob_writer.finish()?)
87 }
88
89 #[test]
90 fn test_encrypted_compressed_blob_writer() -> Result<(), Error> {
91 let tmp = Cursor::new(Vec::<u8>::new());
92 let mut blob_writer = DataBlobWriter::new_encrypted_compressed(tmp, CRYPT_CONFIG.clone())?;
93 blob_writer.write_all(&TEST_DATA)?;
94
95 verify_test_blob(blob_writer.finish()?)
96 }