mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-25 02:13:24 +00:00
Refactor project structure
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
bd878dd1c9
commit
e3c227ae06
81
kernel/libs/cpio-decoder/src/test.rs
Normal file
81
kernel/libs/cpio-decoder/src/test.rs
Normal file
@ -0,0 +1,81 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use lending_iterator::LendingIterator;
|
||||
|
||||
use super::{error::*, CpioDecoder, FileType};
|
||||
|
||||
#[test]
|
||||
fn test_decoder() {
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
let manifest_path = std::env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||
let manifest_path = std::path::Path::new(manifest_path.as_str());
|
||||
|
||||
// Prepare the cpio buffer
|
||||
let buffer = {
|
||||
let mut find_process = Command::new("find")
|
||||
.arg(manifest_path.as_os_str())
|
||||
.stdout(Stdio::piped())
|
||||
.spawn()
|
||||
.expect("find command is not started");
|
||||
let ecode = find_process.wait().expect("failed to execute find");
|
||||
assert!(ecode.success());
|
||||
let find_stdout = find_process.stdout.take().unwrap();
|
||||
let output = Command::new("cpio")
|
||||
.stdin(find_stdout)
|
||||
.args(["-o", "-H", "newc"])
|
||||
.output()
|
||||
.expect("failed to execute cpio");
|
||||
assert!(output.status.success());
|
||||
output.stdout
|
||||
};
|
||||
|
||||
let mut decoder = CpioDecoder::new(buffer.as_slice());
|
||||
// 1st entry must be the root entry
|
||||
let entry = {
|
||||
let entry_result = decoder.next().unwrap();
|
||||
entry_result.unwrap()
|
||||
};
|
||||
assert_eq!(entry.name(), manifest_path.as_os_str());
|
||||
assert!(entry.metadata().file_type() == FileType::Dir);
|
||||
assert!(entry.metadata().ino() > 0);
|
||||
|
||||
// Other entries
|
||||
while let Some(decode_result) = decoder.next() {
|
||||
let mut entry = decode_result.unwrap();
|
||||
assert!(entry.metadata().ino() > 0);
|
||||
if entry.name() == manifest_path.join("src").as_os_str() {
|
||||
assert!(entry.metadata().file_type() == FileType::Dir);
|
||||
assert!(entry.metadata().ino() > 0);
|
||||
} else if entry.name() == manifest_path.join("src").join("lib.rs").as_os_str()
|
||||
|| entry.name() == manifest_path.join("src").join("test.rs").as_os_str()
|
||||
|| entry.name() == manifest_path.join("src").join("error.rs").as_os_str()
|
||||
|| entry.name() == manifest_path.join("Cargo.toml").as_os_str()
|
||||
{
|
||||
assert!(entry.metadata().file_type() == FileType::File);
|
||||
assert!(entry.metadata().size() > 0);
|
||||
let mut buffer: Vec<u8> = Vec::new();
|
||||
assert!(entry.read_all(&mut buffer).is_ok());
|
||||
} else {
|
||||
panic!("unexpected entry: {:?}", entry.name());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_short_buffer() {
|
||||
let short_buffer: Vec<u8> = Vec::new();
|
||||
let mut decoder = CpioDecoder::new(short_buffer.as_slice());
|
||||
let entry_result = decoder.next().unwrap();
|
||||
assert!(entry_result.is_err());
|
||||
assert!(entry_result.err() == Some(Error::BufferShortError));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_invalid_buffer() {
|
||||
let buffer: &[u8] = b"invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic.invalidmagic";
|
||||
let mut decoder = CpioDecoder::new(buffer);
|
||||
let entry_result = decoder.next().unwrap();
|
||||
assert!(entry_result.is_err());
|
||||
assert!(entry_result.err() == Some(Error::MagicError));
|
||||
}
|
Reference in New Issue
Block a user