Wire NCP 0x23/0x04 AFP Get Entry ID From Name to the same conservative path-backed Entry ID lookup used by the existing AFP path-name probe. The WebSDK documents NCP 0x2222/35/04 as taking a volume number, an AFP base Entry ID, and an AFP path string that modifies that base, and returning the AFP Entry ID for the given path. The SDK headers expose the same call as NWAFPGetEntryIDFromName(). MARS-NWE does not yet maintain persistent CNID/base-ID lookup state, so support the verified SYS:-style path-backed subset first: require the optional libatalk backend, resolve the supplied path through the existing mars_nwe path machinery, and return the stored libatalk Entry ID when available or the existing stat-derived fallback Entry ID otherwise. Entry-ID-only lookup remains invalid path until persistent CNID/AppleDouble mapping is implemented. Extend the Linux AFP Entry ID smoke test with --from-name so the new endpoint can be exercised without an AppleTalk client while keeping the existing 0x0c test path unchanged. This adds the documented read-only Entry ID query path only; it does not add persistent AFP base-ID lookup or broader Mac namespace semantics.
Linux NCP smoke tests
This directory contains optional Linux-side integration tests for endpoints that are easier to exercise from a Unix host than from the DOS test utilities.
The tests use the ncpfs/libncp client library. They are not built by default because they require the host ncpfs development headers/library and a running NetWare-compatible server.
Build with:
cmake -DMARS_NWE_BUILD_LINUX_TESTS=ON ...
cmake --build . --target afp_entry_id_smoke
cmake --build . --target afp_file_info_smoke
cmake --build . --target afp_scan_info_smoke
AFP Entry ID smoke test
afp_entry_id_smoke sends the WebSDK-documented NetWare AFP request:
NCP 0x2222/35/12 AFP Get Entry ID From Path Name
It uses libncp's NWRequestSimple() path, so it goes through the same client
transport stack as other Linux ncpfs utilities.
Example:
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
The test accepts NetWare-style VOL:PATH arguments. By default it sends the
supplied SYS:-style path directly with directory handle 0, matching the
verified mars_nwe smoke-test path. --alloc-handle is available only for
follow-up debugging of the separate directory-handle allocation path, and
--dir-handle N expects a handle that is valid in the current connection.
Useful smoke cases for a standard MARS-NWE SYS volume are:
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:SYSTEM
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:BURST
A successful reply prints the request path, directory handle, and returned
32-bit AFP Entry ID. Server-side diagnostics currently mark stat-derived
temporary IDs with fallback; that means the endpoint is reachable, but
persistent CNID/AppleDouble entry-id storage is still future Mac-namespace
work.
If the server was built without the optional Netatalk/libatalk backend, the endpoint is expected to return invalid namespace. To treat that as a successful negative smoke test, use:
./tests/linux/afp_entry_id_smoke --allow-invalid-namespace -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
For path-resolution negative tests, use --allow-invalid-path to accept the
expected 0x9c Invalid Path completion.
AFP File Information smoke test
afp_file_info_smoke sends the WebSDK-documented NetWare AFP file
information requests:
NCP 0x2222/35/05 AFP Get File Information
NCP 0x2222/35/15 AFP 2.0 Get File Information
It uses the same libncp NWRequestSimple() transport path as the Entry ID
smoke test and sends raw SYS:-style path requests with directory handle 0.
The server replies with the read-only AFP file information record currently
implemented by mars_nwe: Entry ID, Parent ID, attributes, data/resource fork
lengths, offspring count, fixed long/short names, and access rights.
Useful smoke cases for a standard MARS-NWE SYS volume are:
./tests/linux/afp_file_info_smoke -S MARS -U SUPERVISOR -P secret SYS:
./tests/linux/afp_file_info_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
./tests/linux/afp_file_info_smoke -S MARS -U SUPERVISOR -P secret SYS:SYSTEM
./tests/linux/afp_file_info_smoke -S MARS -U SUPERVISOR -P secret SYS:BURST
# AFP 2.0 variant using the same path-backed read-only reply
./tests/linux/afp_file_info_smoke --afp20 -S MARS -U SUPERVISOR -P secret SYS:
./tests/linux/afp_file_info_smoke --afp20 -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
./tests/linux/afp_file_info_smoke --afp20 -S MARS -U SUPERVISOR -P secret SYS:SYSTEM
./tests/linux/afp_file_info_smoke --afp20 -S MARS -U SUPERVISOR -P secret SYS:BURST
The AFP 2.0 mode is selected with --afp20. It has been verified against
the same SYS:, SYS:PUBLIC, SYS:SYSTEM, and SYS:BURST paths and
currently exercises the same path-backed read-only reply as the older call.
The current implementation fills fields that can be derived from Unix stat(2) and the optional libatalk
helper wrappers. Server-side diagnostics mark
stat-derived temporary Entry IDs with fallback; Parent ID, persistent
CNID/AppleDouble IDs, and fuller Finder Info/resource-fork semantics remain
future Mac-namespace work.
If the server was built without the optional Netatalk/libatalk backend, use
--allow-invalid-namespace for the expected negative test. Use
--allow-invalid-path for path-resolution negative tests.
AFP Scan File Information smoke test
afp_scan_info_smoke sends the WebSDK-documented NetWare AFP scan request:
NCP 0x2222/35/17 AFP 2.0 Scan File Information
It scans one directory entry per request using the same read-only AFP file
information record as afp_file_info_smoke. The test sends raw SYS:-style
path requests with directory handle 0 and uses the returned next_last_seen AFP
Entry ID as the continuation token for the next call.
Useful smoke sequence for a standard MARS-NWE SYS:PUBLIC directory:
./tests/linux/afp_scan_info_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
./tests/linux/afp_scan_info_smoke -S MARS -U SUPERVISOR -P secret --last-seen 0x23c8787d SYS:PUBLIC
./tests/linux/afp_scan_info_smoke --allow-empty -S MARS -U SUPERVISOR -P secret --last-seen 0x260437f6 SYS:PUBLIC
The concrete Entry IDs vary by filesystem metadata and are currently marked as
fallback in server diagnostics when they are derived from stat(2) rather
than persistent CNID/AppleDouble metadata. The verified smoke path walks
multiple entries in SYS:PUBLIC by feeding each returned next_last_seen value
into the next request.
If the server was built without the optional Netatalk/libatalk backend, use
--allow-invalid-namespace for the expected negative test. Use
--allow-invalid-path for path-resolution negative tests, and --allow-empty
when a scan continuation is expected to reach the end of the directory.