# 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:

```sh
cmake -DMARS_NWE_BUILD_LINUX_TESTS=ON ...
cmake --build . --target afp_entry_id_smoke
```

## AFP Entry ID smoke test

`afp_entry_id_smoke` sends the WebSDK-documented NetWare AFP request:

```text
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:

```sh
./tests/linux/afp_entry_id_smoke -S MARS -U SUPERVISOR -P secret SYS:PUBLIC
```

The test accepts NetWare-style `VOL:PATH` arguments.  It logs in through
libncp, allocates a temporary directory handle for the volume root, and sends
only the relative path to `AFP Get Entry ID From Path Name`, matching the
WebSDK request layout of `DirectoryHandle + Path String`.

Useful smoke cases for a standard MARS-NWE `SYS` volume are:

```sh
./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 temporary directory handle, the relative request
path, and the 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:

```sh
./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.
