Add syscall test framwork from gvisor

This commit is contained in:
LI Qing
2023-05-29 13:29:53 +08:00
committed by Tate, Hongliang Tian
parent 8e199f46ef
commit e2f3932cb8
18 changed files with 256 additions and 43 deletions

View File

@ -108,6 +108,23 @@ impl FileTable {
entry.map(|e| e.file)
}
pub fn close_all(&mut self) -> Vec<Arc<dyn FileLike>> {
let mut closed_files = Vec::new();
let closed_fds: Vec<FileDescripter> = self
.table
.idxes_and_items()
.map(|(idx, _)| idx as FileDescripter)
.collect();
for fd in closed_fds {
let entry = self.table.remove(fd as usize).unwrap();
let events = FdEvents::Close(fd);
self.notify_fd_events(&events);
entry.notify_fd_events(&events);
closed_files.push(entry.file);
}
closed_files
}
pub fn get_file(&self, fd: FileDescripter) -> Result<&Arc<dyn FileLike>> {
self.table
.get(fd as usize)

View File

@ -2,7 +2,9 @@ use crate::events::Observer;
use crate::prelude::*;
use super::file_handle::FileLike;
use super::utils::{AccessMode, Consumer, IoEvents, Poller, Producer, StatusFlags};
use super::utils::{
AccessMode, Consumer, InodeMode, InodeType, IoEvents, Metadata, Poller, Producer, StatusFlags,
};
pub struct PipeReader {
consumer: Consumer<u8>,
@ -55,6 +57,25 @@ impl FileLike for PipeReader {
AccessMode::O_RDONLY
}
fn metadata(&self) -> Metadata {
Metadata {
dev: 0,
ino: 0,
size: 0,
blk_size: 0,
blocks: 0,
atime: Default::default(),
mtime: Default::default(),
ctime: Default::default(),
type_: InodeType::NamedPipe,
mode: InodeMode::from_bits_truncate(0o400),
nlinks: 1,
uid: 0,
gid: 0,
rdev: 0,
}
}
fn register_observer(
&self,
observer: Weak<dyn Observer<IoEvents>>,
@ -122,6 +143,25 @@ impl FileLike for PipeWriter {
AccessMode::O_WRONLY
}
fn metadata(&self) -> Metadata {
Metadata {
dev: 0,
ino: 0,
size: 0,
blk_size: 0,
blocks: 0,
atime: Default::default(),
mtime: Default::default(),
ctime: Default::default(),
type_: InodeType::NamedPipe,
mode: InodeMode::from_bits_truncate(0o200),
nlinks: 1,
uid: 0,
gid: 0,
rdev: 0,
}
}
fn register_observer(
&self,
observer: Weak<dyn Observer<IoEvents>>,