Large/small file I/O test passed.
This commit is contained in:
parent
8713046a4a
commit
5787214ef6
6 changed files with 67 additions and 16 deletions
|
@ -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(())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue