1 个不稳定版本
0.5.0 | 2023年5月16日 |
---|
#473 在 测试
206 每月下载
在 6 个工具包中使用(通过 floppy-disk)
245KB
4.5K SLoC
rsfs
此工具包提供了一个具有磁盘和内存实现的通用文件系统。
将来,将提供一个模块,允许在内存文件系统上的测试中注入错误。这曾经存在,但在提交 1ee34f6 中被移除。
此工具包目前尤其有用,因为它提供了一个可靠的内存文件系统。将来,它将在单元测试中触发文件系统错误方面更有用,以使您能够测试代码如何处理文件系统错误。
有关用法和用法示例的更多信息,请参阅工具包 文档。
lib.rs
:
一个具有磁盘和内存实现的通用文件系统。
存在的理由
std::fs
模块提供了操作文件系统的函数,这些函数很好。但是,如果您有使用 std::fs
的代码,则很难确保您的代码正确处理错误,因为通常您不是在已损坏的机器上测试。您可以尝试设置 FUSE,虽然可行,但很复杂。
此工具包提供了一个具有各种实现的通用文件系统。目前,仅提供普通(不可注入)的磁盘和内存实现。将来,将提供一个围绕内存文件系统的错误注入封装,以帮助在单元测试中触发文件系统错误。
这个crate的目的是让你在代码中使用std::fs
的地方使用通用的rsfs::GenFS
。你的main.rs
可以使用rsfs::disk::FS
来获得默认的磁盘行为,而你的测试使用rsfs::mem::test::FS
(一旦存在)来获取一个可以注入错误的内存文件系统。
内存文件系统
在我编写这个crate的时候,还没有完整的内存文件系统;rsfs::mem
中的实现应该能满足大多数需求。
rsfs::mem
是一个平台特定的模块,根据构建器的平台使用适当的模块。为了获得一个平台无关的模块,你需要使用你想要的内存平台。因此,如果你使用rsfs::mem::unix
,你将得到一个遵循Unix语法的内存系统。如果你使用rsfs::mem::windows
,你将得到一个遵循Windows语法的内存系统(然而,你必须首先编写该模块)。
这意味着rsfs::mem
旨在基本上是std::fs
的内存替代品,并强迫你以跨平台的方式编写代码。rsfs::mem::unix
旨在成为一个特定于Unix的替代品,在所有平台上为你提供Unix语义。
注意事项
当前的内存文件系统仅实现了Unix。这意味着唯一的跨平台内存文件系统是特定的rsfs::mem::unix
。Windows用户可以通过实现Windows的内存类似物来提供帮助。
内存文件系统使用了一些不安全的代码。在通过Arc
/RwLock
与文件系统中的递归数据结构一起工作很长时间后,我认为这是必要的。代码经过了相当充分的测试;应该没有问题。在我看来,不安全的用法使得代码更加清晰,但这确实需要在某些函数中特别小心。
文档致谢
这个crate复制了目前存在于std::fs
中的许多文档和示例。这不仅使得人们更容易直接迁移到这个crate,而且使这个crate更容易理解。这个crate在其仓库中包含了Rust的MIT许可证,以供进一步的归因目的。
依赖关系
~4–11MB
~112K SLoC