5 个版本 (3 个破坏性更新)
使用旧的 Rust 2015
0.4.1 | 2017年5月27日 |
---|---|
0.4.0 | 2017年5月27日 |
0.3.0 | 2017年5月26日 |
0.2.0 | 2017年5月26日 |
0.1.0 | 2017年4月17日 |
#632 在 测试
73 每月下载次数
用于 2 crates
215KB
3.5K SLoC
rsfs
此 crate 提供了一个具有磁盘和内存实现的泛型文件系统。
未来,将提供一个模块,允许在内存文件系统上的测试中注入错误。这曾经存在,但在提交 1ee34f6 中被移除。
此 crate 目前尤其有用,因为它提供了一个可靠的内存文件系统。未来,它将更适用于触发单元测试中的文件系统错误,以便测试您的代码如何处理文件系统错误。
请参阅 crate 的文档,了解更详细的说明和用法示例。
lib.rs
:
具有磁盘和内存实现的泛型文件系统。
存在的原因
std::fs
模块提供了操作文件系统的函数,这些函数很好。然而,如果您使用 std::fs
的代码,很难确保您的代码正确处理错误,因为通常您不是在已损坏的机器上进行测试。您可以尝试设置 FUSE,虽然可行,但相当复杂。
此 crate 提供了一个具有各种实现的泛型文件系统。目前,仅提供正常(不可注入)的磁盘和内存实现。未来,将为内存文件系统提供一个可注入错误的封装,以帮助在单元测试中触发文件系统错误。
此 crate 的目的是让您在代码中到处使用泛型 rsfs::GenFS
,而不是使用 std::fs
。您的 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在其repo中包含了Rust的MIT许可,以供进一步归属目的。
依赖
~1MB
~17K SLoC