Large/small file I/O test passed.

This commit is contained in:
Yifan Wu 2020-12-19 19:14:31 +08:00
parent 8713046a4a
commit 5787214ef6
6 changed files with 67 additions and 16 deletions

View file

@ -9,6 +9,7 @@ use std::fs::{File, OpenOptions};
use std::io::{Read, Write, Seek, SeekFrom};
use std::sync::Mutex;
use alloc::sync::Arc;
use rand;
const BLOCK_SZ: usize = 512;
@ -37,6 +38,11 @@ fn main() {
}
fn easy_fs_pack() -> std::io::Result<()> {
Ok(())
}
#[test]
fn efs_test() -> std::io::Result<()> {
let block_file = Arc::new(BlockFile(Mutex::new(
OpenOptions::new()
.read(true)
@ -55,16 +61,49 @@ fn easy_fs_pack() -> std::io::Result<()> {
for name in root_inode.ls() {
println!("{}", name);
}
{
let filea = root_inode.find("filea").unwrap();
println!("writing filea!");
filea.write_at(0, "Hello, world!".as_bytes());
}
{
let filea = root_inode.find("filea").unwrap();
let mut buffer = [0u8; 512];
let len = filea.read_at(0, &mut buffer);
println!("{}", core::str::from_utf8(&buffer[..len]).unwrap());
}
let filea = root_inode.find("filea").unwrap();
let greet_str = "Hello, world!";
filea.write_at(0, greet_str.as_bytes());
let mut buffer = [0u8; 512];
let len = filea.read_at(0, &mut buffer);
assert_eq!(
greet_str,
core::str::from_utf8(&buffer[..len]).unwrap(),
);
let mut random_str_test = |len: usize| {
filea.clear();
assert_eq!(
filea.read_at(0, &mut buffer),
0,
);
let mut str = String::new();
// random digit
for _ in 0..len {
str.push(char::from('0' as u8 + rand::random::<u8>() % 10));
}
filea.write_at(0, str.as_bytes());
let mut read_buffer = [0u8; 127];
let mut offset = 0usize;
let mut read_str = String::new();
loop {
let len = filea.read_at(offset, &mut read_buffer);
if len == 0 {
break;
}
offset += len;
read_str.push_str(
core::str::from_utf8(&read_buffer[..len]).unwrap()
);
}
assert_eq!(str, read_str);
};
random_str_test(4 * BLOCK_SZ);
random_str_test(8 * BLOCK_SZ + BLOCK_SZ / 2);
random_str_test(100 * BLOCK_SZ);
random_str_test(70 * BLOCK_SZ + BLOCK_SZ / 7);
random_str_test((12 + 128) * BLOCK_SZ);
Ok(())
}