1 use anyhow
::{bail, Error}
;
4 use std
::io
::{Read, Write, Seek, SeekFrom }
;
5 use lazy_static
::lazy_static
;
7 use proxmox_backup
::backup
::*;
10 static ref TEST_DATA
: Vec
<u8> = {
11 let mut data
= Vec
::new();
14 data
.push((i
%255) as u8);
20 static ref CRYPT_CONFIG
: Arc
<CryptConfig
> = {
22 Arc
::new(CryptConfig
::new(key
).unwrap())
26 fn verify_test_blob(mut cursor
: Cursor
<Vec
<u8>>) -> Result
<(), Error
> {
28 // run read tests with different buffer sizes
29 for size
in [1, 3, 64*1024].iter() {
31 println
!("Starting DataBlobReader test (size = {})", size
);
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
];
40 let count
= reader
.read(&mut buf
)?
;
41 if count
== 0 { break; }
42 buffer
.extend(&buf
[..count
]);
46 if buffer
!= *TEST_DATA
{
47 bail
!("blob data is wrong (read buffer size {})", size
);
51 let raw_data
= cursor
.into_inner();
53 let blob
= DataBlob
::from_raw(raw_data
)?
;
56 let data
= blob
.decode(Some(&CRYPT_CONFIG
))?
;
57 if data
!= *TEST_DATA
{
58 bail
!("blob data is wrong (decode)");
64 fn test_uncompressed_blob_writer() -> Result
<(), Error
> {
65 let tmp
= Cursor
::new(Vec
::<u8>::new());
66 let mut blob_writer
= DataBlobWriter
::new_uncompressed(tmp
)?
;
67 blob_writer
.write_all(&TEST_DATA
)?
;
69 verify_test_blob(blob_writer
.finish()?
)
73 fn test_compressed_blob_writer() -> Result
<(), Error
> {
74 let tmp
= Cursor
::new(Vec
::<u8>::new());
75 let mut blob_writer
= DataBlobWriter
::new_compressed(tmp
)?
;
76 blob_writer
.write_all(&TEST_DATA
)?
;
78 verify_test_blob(blob_writer
.finish()?
)
82 fn test_signed_blob_writer() -> Result
<(), Error
> {
83 let tmp
= Cursor
::new(Vec
::<u8>::new());
84 let mut blob_writer
= DataBlobWriter
::new_signed(tmp
, CRYPT_CONFIG
.clone())?
;
85 blob_writer
.write_all(&TEST_DATA
)?
;
87 verify_test_blob(blob_writer
.finish()?
)
91 fn test_signed_compressed_blob_writer() -> Result
<(), Error
> {
92 let tmp
= Cursor
::new(Vec
::<u8>::new());
93 let mut blob_writer
= DataBlobWriter
::new_signed_compressed(tmp
, CRYPT_CONFIG
.clone())?
;
94 blob_writer
.write_all(&TEST_DATA
)?
;
96 verify_test_blob(blob_writer
.finish()?
)
100 fn test_encrypted_blob_writer() -> Result
<(), Error
> {
101 let tmp
= Cursor
::new(Vec
::<u8>::new());
102 let mut blob_writer
= DataBlobWriter
::new_encrypted(tmp
, CRYPT_CONFIG
.clone())?
;
103 blob_writer
.write_all(&TEST_DATA
)?
;
105 verify_test_blob(blob_writer
.finish()?
)
109 fn test_encrypted_compressed_blob_writer() -> Result
<(), Error
> {
110 let tmp
= Cursor
::new(Vec
::<u8>::new());
111 let mut blob_writer
= DataBlobWriter
::new_encrypted_compressed(tmp
, CRYPT_CONFIG
.clone())?
;
112 blob_writer
.write_all(&TEST_DATA
)?
;
114 verify_test_blob(blob_writer
.finish()?
)