tests: record AFP delete smoke success

This commit is contained in:
Test
2026-05-30 20:01:58 +00:00
committed by Mario Fetka
parent 3368c8561c
commit cd4ca7c4d9
2 changed files with 62 additions and 31 deletions

32
TODO.md
View File

@@ -332,15 +332,18 @@ Current status:
NetWare volume, not transport-level AFP proxy calls to `afpd`.
- AFP Get DOS Name From Entry ID (0x12) is implemented as a conservative
read-only reverse lookup that first uses the existing mars_nwe
`map_directory_number_to_path()` namespace/basehandle path. The old
`nwatalk_get_entry_id()` volume scan remains only as a legacy fallback for
cached AFP IDs. The latest smoke run confirmed `entry_id=0x00000004`
resolving to `PUBLIC/PMDFLTS.INI`.
`map_directory_number_to_path()` namespace/basehandle path for directory
objects. Regular file Entry IDs stay on the cached AFP/fallback path until a
reliable file-object reverse mapper is available. The legacy
`nwatalk_get_entry_id()` volume scan remains as the fallback for cached AFP
file IDs.
Follow-up:
- Implement the NetWare AFP NCP calls locally, using libatalk helpers rather
than proxying requests to `afpd`.
than proxying requests to `afpd`. Create Directory, Create File, and AFP
Delete are now implemented through existing mars_nwe create/remove helpers
and covered by Linux smoke tests.
- Candidate libatalk pieces include the new AppleDouble/Finder Info/resource
fork helper wrappers, plus future CNID/directory-id helpers, attribute
mapping, and filename conversion.
@@ -352,15 +355,18 @@ Follow-up:
future libatalk/CNID backend may still provide Apple-native identity, but AFP
must not grow a second mars_nwe object-id resolver in parallel to the existing
namespace machinery.
- The full smoke suite verifies namespace-derived identity end to end:
- The full smoke suite verifies path-backed file identity end to end:
Entry ID From Path Name, Entry ID From NetWare Handle, Get File Information,
Scan File Information, Set File Information verification, and Get DOS Name
From Entry ID all returned or consumed `entry_id=0x00000004` for the sample
`SYS:PUBLIC/pmdflts.ini` path, with `failures=0`. AFP directory-scan
continuation remains directory iteration based: `last_seen` skips past the
previously returned object, but the next returned Entry ID is not required to
be numerically greater than the continuation token. FinderInfo plus the
Finder Hidden/System/Archive AFP attributes now have
Set File Information verification, and Get DOS Name From Entry ID all returned
or consumed a cached AFP/fallback file ID for the sample
`SYS:PUBLIC/pmdflts.ini` path, while directory-scan entries continue to use
the existing namespace/basehandle identity. AFP directory-scan continuation
remains directory iteration based: `last_seen` skips past the previously
returned object, but the next returned Entry ID is not required to be
numerically greater than the continuation token. The latest full smoke run
also verified AFP Delete cleanup for Create Directory and Create File and
ended with `failures=0`. FinderInfo plus the Finder Hidden/System/Archive
AFP attributes now have
deliberately narrow write paths through AFP Set File Information `0x09` and
AFP 2.0 Set File Information `0x10`; CNID
allocation and broader AFP metadata writes still need a deliberate write-safe

View File

@@ -215,12 +215,11 @@ Example:
```
The full smoke suite creates temporary directories under the tested parent using
fresh short DOS-compatible leaf names by default. Local removal is best-effort:
AFP Delete is not implemented yet, and the script often runs as an unprivileged
Unix user while the server created the directory under its own identity. Use
`--create-dir-name NAME` to override the default temporary leaf name, knowing
that rerunning with the same explicit name may fail if a previous directory still
exists.
fresh short DOS-compatible leaf names by default. It now uses the AFP Delete
endpoint for both pre-test cleanup and post-create cleanup, so the smoke no
longer depends on local Unix `rmdir` permissions when the server created the
directory under its own identity. Use `--create-dir-name NAME` to override the
default temporary leaf name.
## AFP Create File smoke test
@@ -247,19 +246,45 @@ Example:
```
The full smoke suite creates temporary files under the tested parent with fresh
short DOS-compatible leaf names by default. Local removal is best-effort, just
like the create-directory smoke, because the suite usually runs as an
unprivileged Unix user while mars_nwe creates the file as the server-side
identity. Use `--create-file-name NAME` to override the default leaf name;
rerunning with the same explicit name may fail if a previous file still exists.
short DOS-compatible leaf names by default. It now uses AFP Delete for both
pre-test cleanup and post-create cleanup, avoiding local Unix `rm` permission
assumptions when mars_nwe creates the file as the server-side identity. Use
`--create-file-name NAME` to override the default leaf name.
Runtime status: the build-server smoke run verified both create-file variants.
Legacy AFP Create File (`0x02`) created `SYS:PUBLIC/atst0` and returned
`0x333bee1c`; AFP 2.0 Create File (`0x0e`) created `SYS:PUBLIC/atst02` and
returned `0x4e329102`. Both IDs were re-read through AFP Entry ID From Path
Name. The overall run still reported `failures=2`, but those failures were the
pre-existing create-directory names `AFPTST0` and `AFPTST02`; the create-file
checks themselves succeeded.
Runtime status: the build-server smoke run verified both create-file variants
with AFP Delete cleanup enabled. Legacy AFP Create File (`0x02`) created
`SYS:PUBLIC/atst0` and returned `0x77ba6113`; AFP 2.0 Create File (`0x0e`)
created `SYS:PUBLIC/atst02` and returned `0x3cd55515`. Both IDs were re-read
through AFP Entry ID From Path Name and then removed through AFP Delete.
## AFP Delete smoke test
`afp_delete_smoke` sends the WebSDK/nwafp.h AFP Delete request through
libncp:
```text
NCP 0x2222/35/03 AFP Delete
```
The helper derives the parent Entry ID with AFP Entry ID From Path Name, sends
only the leaf name to AFP Delete, and verifies that a follow-up Entry ID lookup
for the deleted path no longer succeeds. The server implementation routes
directory removal through the existing mars_nwe directory remove path and file
removal through the existing NetWare delete-file path; it does not use local
Unix `unlink`/`rmdir` calls from the test process.
Example:
```sh
./tests/linux/afp_delete_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC/afpfile
```
Runtime status: the smoke suite now uses AFP Delete for pre-test cleanup and
post-create cleanup around both Create Directory variants and both Create File
variants. The verified run deleted stale `afptst0`, `afptst02`, `atst0`, and
`atst02` paths, recreated the directory and file pairs, deleted all four
created objects again through AFP Delete, and ended with `failures=0`.
## AFP Entry ID smoke test