| use super::alloc::User; |
| use super::alloc::{copy_from_userspace, copy_to_userspace}; |
| |
| #[test] |
| fn test_copy_to_userspace_function() { |
| let mut src = [0u8; 100]; |
| let mut dst = User::<[u8]>::uninitialized(100); |
| |
| for i in 0..src.len() { |
| src[i] = i as _; |
| } |
| |
| for size in 0..48 { |
| // For all possible alignment |
| for offset in 0..8 { |
| // overwrite complete dst |
| dst.copy_from_enclave(&[0u8; 100]); |
| |
| // Copy src[0..size] to dst + offset |
| unsafe { copy_to_userspace(src.as_ptr(), dst.as_mut_ptr().add(offset), size) }; |
| |
| // Verify copy |
| for byte in 0..size { |
| unsafe { |
| assert_eq!(*dst.as_ptr().add(offset + byte), src[byte as usize]); |
| } |
| } |
| } |
| } |
| } |
| |
| #[test] |
| fn test_copy_from_userspace_function() { |
| let mut dst = [0u8; 100]; |
| let mut src = User::<[u8]>::uninitialized(100); |
| |
| src.copy_from_enclave(&[0u8; 100]); |
| |
| for size in 0..48 { |
| // For all possible alignment |
| for offset in 0..8 { |
| // overwrite complete dst |
| dst = [0u8; 100]; |
| |
| // Copy src[0..size] to dst + offset |
| unsafe { copy_from_userspace(src.as_ptr().offset(offset), dst.as_mut_ptr(), size) }; |
| |
| // Verify copy |
| for byte in 0..size { |
| unsafe { |
| assert_eq!(dst[byte as usize], *src.as_ptr().offset(offset + byte as isize)); |
| } |
| } |
| } |
| } |
| } |