use crate::crypto::secret::*;
#[test]
fn test_empty() {
crate::init().unwrap();
let mut sa = Secret::new();
assert_eq!(0, sa.len());
assert!(unsafe { sa.as_slice().is_empty() });
assert!(unsafe { sa.as_mut_slice().is_empty() });
let mut sb = Secret::with_len(0).unwrap();
assert_eq!(0, sb.len());
assert!(unsafe { sb.as_slice().is_empty() });
assert!(unsafe { sb.as_mut_slice().is_empty() });
}
#[test]
fn test_roundtrip() {
crate::init().unwrap();
let data = "foo bar baz this is a test";
let bytes = data.as_bytes();
let mut s = Secret::with_len(bytes.len()).unwrap();
assert_eq!(bytes.len(), s.len());
unsafe {
s.as_mut_slice().copy_from_slice(bytes);
}
let result = unsafe { std::str::from_utf8(s.as_slice()).unwrap() };
assert_eq!(result, data);
}
#[test]
fn test_resize() {
crate::init().unwrap();
let mut data = "foobar foobar foobar".as_bytes().to_vec();
let orig_len = data.len();
let mut s = Secret::with_len(data.len()).unwrap();
unsafe {
s.as_mut_slice().copy_from_slice(data.as_slice());
}
data.resize(orig_len * 2, 0);
s.resize(orig_len * 2).unwrap();
assert_eq!(orig_len * 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
data.truncate(orig_len / 2);
s.resize(orig_len / 2).unwrap();
assert_eq!(orig_len / 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
s.resize(0).unwrap();
assert_eq!(0, s.len());
assert!(unsafe { s.as_slice().is_empty() });
assert!(unsafe { s.as_mut_slice().is_empty() });
s.resize(orig_len / 2).unwrap();
unsafe {
s.as_mut_slice().copy_from_slice(data.as_slice());
}
assert_eq!(orig_len / 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
}
#[test]
fn test_default_secret() {
crate::init().unwrap();
let a = Secret::default();
assert_eq!(0, a.len());
assert!(unsafe { a.as_slice().is_empty() });
let b = Secret::new();
assert_eq!(0, b.len());
assert!(unsafe { b.as_slice().is_empty() });
}
#[test]
fn test_try_clone() {
crate::init().unwrap();
let src = "hello there friend".as_bytes();
let mut s = Secret::with_len(src.len()).unwrap();
unsafe { s.as_mut_slice() }.copy_from_slice(src);
let c = s.try_clone().unwrap();
assert_eq!(s.len(), c.len());
assert_eq!(unsafe { s.as_slice() }, unsafe { c.as_slice() });
let empty = Secret::with_len(0).unwrap();
let c = empty.try_clone().unwrap();
assert_eq!(0, c.len());
}