#fs #filesystem #memory #test

rsfs

具有磁盘和内存实现的泛型文件系统

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测试

Download history 55/week @ 2024-04-01 20/week @ 2024-04-08 25/week @ 2024-04-15 29/week @ 2024-04-22 17/week @ 2024-04-29 15/week @ 2024-05-06 30/week @ 2024-05-13 14/week @ 2024-05-20 29/week @ 2024-05-27 15/week @ 2024-06-03 15/week @ 2024-06-10 20/week @ 2024-06-17 20/week @ 2024-06-24 16/week @ 2024-07-01 11/week @ 2024-07-08 23/week @ 2024-07-15

73 每月下载次数
用于 2 crates

MIT 许可证

215KB
3.5K SLoC

rsfs

Build Status Crates.io Documentation

此 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