#include "vfs.hpp"
#include <gtest/gtest.h>
#include "file_descriptor.hpp"
#include "filesystem.hpp"
#include "mount.hpp"
#include "test_environment_state.hpp"
Go to the source code of this file.
|
| | TEST_F (MountTableTest, MountAndUnmount) |
| |
| | TEST_F (MountTableTest, LookupMountPoint) |
| |
| | TEST_F (FdTableTest, AllocAndFree) |
| |
| | TEST_F (FdTableTest, InvalidFd) |
| |
| | TEST_F (FdTableTest, DupFd) |
| |
| | TEST_F (FdTableTest, SetupStandardFiles) |
| |
| | TEST_F (VfsTest, LookupRoot) |
| |
| | TEST_F (VfsTest, LookupInvalidPaths) |
| |
| | TEST_F (VfsInitTest, DoubleInit) |
| |
| | TEST (FileStructTest, FileOperations) |
| |
| | TEST (InodeStructTest, InodeDefaults) |
| |
| | TEST (DentryStructTest, DentryDefaults) |
| |
| | TEST (OpenFlagsTest, FlagValues) |
| |
| | TEST (SeekWhenceTest, EnumValues) |
| |
◆ TEST() [1/5]
| TEST |
( |
DentryStructTest |
, |
|
|
DentryDefaults |
|
|
) |
| |
Definition at line 301 of file vfs_test.cpp.
301 {
309}
Dentry — 目录项缓存(路径名 ↔ Inode 的映射)
void * fs_private
文件系统私有数据
Dentry * next_sibling
兄弟目录项(同一父目录下)
#define EXPECT_EQ(val1, val2, msg)
◆ TEST() [2/5]
| TEST |
( |
FileStructTest |
, |
|
|
FileOperations |
|
|
) |
| |
Definition at line 278 of file vfs_test.cpp.
278 {
285}
File — 打开的文件实例(每次 open 产生一个)
OpenFlags flags
打开标志 (OpenFlags)
Dentry * dentry
关联的 dentry
◆ TEST() [3/5]
| TEST |
( |
InodeStructTest |
, |
|
|
InodeDefaults |
|
|
) |
| |
Definition at line 288 of file vfs_test.cpp.
288 {
298}
uint32_t permissions
权限位(简化版)
uint64_t ino
inode 编号(文件系统内唯一)
void * fs_private
文件系统私有数据指针
◆ TEST() [4/5]
| TEST |
( |
OpenFlagsTest |
, |
|
|
FlagValues |
|
|
) |
| |
Definition at line 312 of file vfs_test.cpp.
312 {
313 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOReadOnly), 0x0000u);
314 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOWriteOnly), 0x0001u);
315 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOReadWrite), 0x0002u);
316 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOCreate), 0x0040u);
317 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOTruncate), 0x0200u);
318 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kOAppend), 0x0400u);
319 EXPECT_EQ(
static_cast<uint32_t
>(OpenFlags::kODirectory), 0x010000u);
320}
◆ TEST() [5/5]
| TEST |
( |
SeekWhenceTest |
, |
|
|
EnumValues |
|
|
) |
| |
Definition at line 323 of file vfs_test.cpp.
323 {
324 EXPECT_EQ(
static_cast<int>(SeekWhence::kSet), 0);
325 EXPECT_EQ(
static_cast<int>(SeekWhence::kCur), 1);
326 EXPECT_EQ(
static_cast<int>(SeekWhence::kEnd), 2);
327}
◆ TEST_F() [1/9]
Definition at line 168 of file vfs_test.cpp.
168 {
169
171
172
173 auto alloc_result = fd_table_->Alloc(&mock_file);
175 int fd = alloc_result.value();
177
178
179 File* file = fd_table_->Get(fd);
181
182
183 auto free_result = fd_table_->Free(fd);
185
186
187 file = fd_table_->Get(fd);
189}
#define EXPECT_TRUE(cond, msg)
#define EXPECT_GE(val1, val2, msg)
◆ TEST_F() [2/9]
Definition at line 204 of file vfs_test.cpp.
204 {
206
207
208 auto alloc_result = fd_table_->Alloc(&mock_file);
210 int fd1 = alloc_result.value();
211
212
213 auto dup_result = fd_table_->Dup(fd1);
215 int fd2 = dup_result.value();
216
217
218 EXPECT_EQ(fd_table_->Get(fd1), fd_table_->Get(fd2));
219
220
221 (void)fd_table_->Free(fd1);
222 (void)fd_table_->Free(fd2);
223}
◆ TEST_F() [3/9]
Definition at line 191 of file vfs_test.cpp.
191 {
192
193 File* file = fd_table_->Get(-1);
195
196 file = fd_table_->Get(999);
198
199
200 auto free_result = fd_table_->Free(-1);
202}
#define EXPECT_FALSE(cond, msg)
◆ TEST_F() [4/9]
Definition at line 225 of file vfs_test.cpp.
225 {
229
230 auto setup_result =
231 fd_table_->SetupStandardFiles(&stdin_file, &stdout_file, &stderr_file);
233
234
235 EXPECT_EQ(fd_table_->Get(0), &stdin_file);
236 EXPECT_EQ(fd_table_->Get(1), &stdout_file);
237 EXPECT_EQ(fd_table_->Get(2), &stderr_file);
238}
◆ TEST_F() [5/9]
Definition at line 135 of file vfs_test.cpp.
135 {
138
139 auto mount_result = mount_table.
Mount(
"/", &mock_fs,
nullptr);
141
142
143 auto* mp = mount_table.
Lookup(
"/file.txt");
145
146
147 mp = mount_table.
Lookup(
"/mnt/nonexistent/file");
149 (void)mount_table.
Unmount(
"/");
150}
auto Unmount(const char *path) -> Expected< void >
卸载指定路径的文件系统
auto Mount(const char *path, FileSystem *fs, BlockDevice *device) -> Expected< void >
挂载文件系统到指定路径
auto Lookup(const char *path) -> MountPoint *
根据路径查找对应的挂载点
#define EXPECT_NE(val1, val2, msg)
◆ TEST_F() [6/9]
Definition at line 111 of file vfs_test.cpp.
111 {
114
115
116 auto mount_result = mount_table.
Mount(
"/", &mock_fs,
nullptr);
119
120
121 mount_result = mount_table.
Mount(
"/", &mock_fs,
nullptr);
123
124
125 auto unmount_result = mount_table.
Unmount(
"/");
126 (void)unmount_result;
129
130
131 unmount_result = mount_table.
Unmount(
"/mnt");
133}
◆ TEST_F() [7/9]
Definition at line 267 of file vfs_test.cpp.
267 {
268
271
272
275}
auto Init() -> Expected< void >
VFS 全局初始化
◆ TEST_F() [8/9]
| TEST_F |
( |
VfsTest |
, |
|
|
LookupInvalidPaths |
|
|
) |
| |
Definition at line 255 of file vfs_test.cpp.
255 {
256
259
260
263}
auto Lookup(const char *path) -> Expected< Dentry * >
路径解析,查找 dentry
◆ TEST_F() [9/9]
Definition at line 241 of file vfs_test.cpp.
241 {
242
245
246 auto mount_result = mount_table.Mount("/", &mock_fs, nullptr);
248
249
252 EXPECT_NE(lookup_result.value(),
nullptr);
253}
auto GetMountTable() -> MountTable &
获取全局挂载表实例