You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 5c4b3fe
Browse filesBrowse the repository at this point in the historyBrowse files
|**loopback**|`test/drivers.test.ts` — the driver behind `createLoopback`, no transport | 251 passed, 29 skipped (4 targets: memory; node-fs; unstorage; node:fs/promises (raw)) |
12
-
|**FUSE**|`test/fuse/conformance-mount.test.ts` — a real kernel mount, `node:fs` as the client | 130 passed, 10 skipped (2 targets: memory driver, through a FUSE mount; node-fs driver, through a FUSE mount) |
13
-
|**9P**|`test/9p/conformance.test.ts` — 9P2000.L through the codecs, the JS client from `test/9p/client.ts`|192 passed, 18 skipped (3 targets: memory driver, over 9P; memory driver with no handles, over 9P; node-fs oracle, over 9P) |
14
-
|**NFSv3**|`test/nfs/v3/conformance.test.ts` — NFSv3 over a TCP socket, the JS client from `test/nfs/v3/client.ts`| 124 passed, 16 skipped (2 targets: memory driver, over NFS; node-fs driver, over NFS) |
15
-
|**NFSv4.1**|`test/nfs/v4/conformance.test.ts` — NFSv4.1 over a TCP socket, the JS client from `test/nfs/v4/client.ts` and the driver over it in `test/nfs/v4/driver.ts`| 124 passed, 16 skipped (2 targets: memory driver, over NFSv4.1; node-fs driver, over NFSv4.1) |
16
-
|**S3**|`test/s3/conformance.test.ts` — an S3 gateway in process, the JS client from `test/s3/client.ts`| 48 passed, 22 skipped (1 target: memory driver, over S3) |
|**loopback**|`test/drivers.test.ts` — the driver behind `createLoopback`, no transport | 251 passed, 29 skipped (4 targets: memory; node-fs; unstorage; node:fs/promises (raw)) |
12
+
|**FUSE**|`test/fuse/conformance-mount.test.ts` — a real kernel mount, `node:fs` as the client | 130 passed, 10 skipped (2 targets: memory driver, through a FUSE mount; node-fs driver, through a FUSE mount) |
13
+
|**9P**|`test/9p/conformance.test.ts` — 9P2000.L through the codecs, the JS client from `test/9p/client.ts`|202 passed, 8 skipped (3 targets: memory driver, over 9P; memory driver with no handles, over 9P; node-fs oracle, over 9P) |
14
+
|**NFSv3**|`test/nfs/v3/conformance.test.ts` — NFSv3 over a TCP socket, the JS client from `test/nfs/v3/client.ts`| 124 passed, 16 skipped (2 targets: memory driver, over NFS; node-fs driver, over NFS) |
15
+
|**NFSv4.1**|`test/nfs/v4/conformance.test.ts` — NFSv4.1 over a TCP socket, the JS client from `test/nfs/v4/client.ts` and the driver over it in `test/nfs/v4/driver.ts`| 124 passed, 16 skipped (2 targets: memory driver, over NFSv4.1; node-fs driver, over NFSv4.1) |
16
+
|**S3**|`test/s3/conformance.test.ts` — an S3 gateway in process, the JS client from `test/s3/client.ts`| 48 passed, 22 skipped (1 target: memory driver, over S3) |
17
17
18
18
## Capability loss
19
19
20
-
Derived from the run, not declared here: a requirement counts as unmet in a column when no case that names it passed there. `root` is an environment fact rather than a transport one — it gates the one case that hands a file away, which only root may do — so it is reported in its own column, and _recorded_ there rather than derived: a column can skip that case for want of `symlinks` long before privilege is reached, so the absence of a pass is not evidence about the run's uid. Every column is run with root when root is reachable, including the five that do not need it. A `mountx.*` requirement is left out of this table entirely: the suite calls an extension by name through `fs.mountx`, which only the loopback column has, so a skip everywhere else is a fact about how the case is written and not about what the transport carries (all four sessions do carry `mknod` — see the per-case rows below, and the FUSE column's own `mkfifo`/`mknod`/`bind` case over a real mount).
20
+
Derived from the run, not declared here: a requirement counts as unmet in a column when no case that names it passed there. `root` is an environment fact rather than a transport one — it gates the one case that hands a file away, which only root may do — so it is reported in its own column, and _recorded_ there rather than derived: a column can skip that case for want of `symlinks` long before privilege is reached, so the absence of a pass is not evidence about the run's uid. Every column is run with root when root is reachable, including the five that do not need it. A `mountx.*` requirement is left out of this table entirely: the suite calls an extension by name through `fs.mountx`, so a skip is a fact about whether that column's client offers the name, not about what the transport carries. Two columns do offer it — the loopback one directly, and the 9P one because `Tmknod` carries the whole `mode` and `p9Driver` can hand it over unchanged. The rest skip for reasons of their own: FUSE drives a real mount with `node:fs` as the client, and `node:fs` cannot `mknod(2)`; NFSv3 and NFSv4.1 carry the file type in `ftype3`/`nfs_ftype4` rather than in the mode, so a client there could not offer the whole extension without deciding part of it itself; S3 has no way to name a FIFO at all. All four sessions do carry `mknod` — see the per-case rows below, and the FUSE column's own `mkfifo`/`mknod`/`bind` case over a real mount.
21
21
22
22
**What this direction of derivation cannot check.** A column declares its own capabilities (`THROUGH_FUSE`, `THROUGH_9P`/`THROUGH_9P_REOPENED`, `THROUGH_NFS`, `THROUGH_NFS4`, `THROUGH_S3`), and declaring one `false` skips every case that needs it — which is exactly what a real loss looks like from here. So a capability the transport _does_ carry, wrongly declared lost, is reported as a loss with nothing to contradict it; the evidence only ever runs the other way, from a passing case to a capability that must be present. Every entry below is therefore a claim the transport's own test file makes and the run did not refute, and the comment at each declaration is where the reasoning for it lives.
23
23
@@ -131,13 +131,13 @@ Derived from the run, not declared here: a requirement counts as unmet in a colu
| creates a FIFO and a socket that stat and readdir both name |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod | skip: mountx.mknod| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
137
-
| carries the device number of a character and a block device |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod | skip: mountx.mknod| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
138
-
| creates a regular file from a mode naming one, or naming no type |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod | skip: mountx.mknod| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
139
-
| is an ordinary name once it exists: rename, unlink, stat again |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod | skip: mountx.mknod| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
140
-
| refuses an existing name, a missing directory and a type with its own call |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod | skip: mountx.mknod| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
| creates a FIFO and a socket that stat and readdir both name |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod |pass (memory driver, over 9P), pass (memory driver with no handles, over 9P), skip (node-fs oracle, over 9P)| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
137
+
| carries the device number of a character and a block device |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod |pass (memory driver, over 9P), pass (memory driver with no handles, over 9P), skip (node-fs oracle, over 9P)| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
138
+
| creates a regular file from a mode naming one, or naming no type |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod |pass (memory driver, over 9P), pass (memory driver with no handles, over 9P), skip (node-fs oracle, over 9P)| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
139
+
| is an ordinary name once it exists: rename, unlink, stat again |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod |pass (memory driver, over 9P), pass (memory driver with no handles, over 9P), skip (node-fs oracle, over 9P)| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
140
+
| refuses an existing name, a missing directory and a type with its own call |`mountx.mknod`| pass (memory), skip (node-fs), skip (unstorage), skip (node:fs/promises (raw)) | skip: mountx.mknod |pass (memory driver, over 9P), pass (memory driver with no handles, over 9P), skip (node-fs oracle, over 9P)| skip: mountx.mknod | skip: mountx.mknod | skip: mountx.mknod |
0 commit comments