136 lines
6.4 KiB
Markdown
136 lines
6.4 KiB
Markdown
# mars_nwe test layout
|
|
|
|
The test tree contains small smoke helpers for protocol areas that are easier to
|
|
exercise outside the normal install flow.
|
|
|
|
CTest names use dotted library/protocol prefixes so the output groups tests by
|
|
owner: `nwcore.ini`, `nwcore.log`, `nwcore.unicode`, `nwtui.smoke`,
|
|
`nwfs.dirquota`, `nwflaim.api.create-query-encrypt`, and so on. Keep new test
|
|
names in that shape instead of adding flat underscore-style names.
|
|
|
|
|
|
## Core and TUI library unit tests
|
|
|
|
`tests/core` contains normal CTest unit tests for `libnwcore` facilities.
|
|
Keep them grouped by core subsystem: `tests/core/ini` covers the shared
|
|
`nw_ini_*` reader/writer facade, `tests/core/log` covers the `nwlog_*`
|
|
level-mask facade, and imported NSS low-level helpers are covered by sibling
|
|
subdirectories such as `tests/core/bit`, `tests/core/bitmap`,
|
|
`tests/core/crc`, `tests/core/xctype`, `tests/core/xstring`,
|
|
`tests/core/utf8`, `tests/core/codepage`, `tests/core/utc`,
|
|
`tests/core/guid`, `tests/core/id`, `tests/core/zalloc`, and
|
|
`tests/core/unicode`. Future Unicode/codepage/byte coverage should keep using
|
|
new focused sibling
|
|
subdirectories instead of being added as a flat list.
|
|
|
|
`tests/tui` contains non-interactive `libnwtui` smoke tests. These tests must
|
|
not require a real terminal or compare full-screen terminal output; test widget
|
|
and style logic outside the termbox2 runtime, and keep true terminal smokes
|
|
optional if they are added later.
|
|
|
|
## NWFS lib/CTest coverage
|
|
|
|
`nwfs.dirquota` runs `tests/nwfs/nwfs_dirquota_test` as a normal CTest/libnwfs plausibility test for
|
|
the NetWare-3.x directory quota helpers. It verifies 4K rounding, NCP-to-NSS
|
|
metadata conversion, unlimited handling, available-space arithmetic, and
|
|
over-limit decisions without requiring a running NCP server. The test is quiet
|
|
on success for CTest; run the built `nwfs_dirquota_test -h` executable for usage
|
|
or `nwfs_dirquota_test -v` for a short success line. Use `ldd`, not `ld`, to
|
|
inspect the executable's shared-library dependencies.
|
|
|
|
## NWFS/NCPFS quota and metadata smokes
|
|
|
|
`tests/nwfs` contains manual NCPFS-based smoke helpers for the NetWare filesystem
|
|
metadata and quota paths. They are not generic unit tests: they expect a running
|
|
MARS_NWE server, mounted NCPFS volumes, and the helper programs configured by
|
|
CMake when `ncpfs`/`libncp` are available.
|
|
|
|
The main quota regression entry point is
|
|
`nwfs_ncpfs_userquota_dual_smoke.sh`. It runs the same NetWare-style
|
|
deny-before-data userquota fill test against two volumes:
|
|
|
|
- a Linuxquota-backed volume, such as `QUOTA`, where enforcement comes from the
|
|
host quota path;
|
|
- a metadata/NWQUOTA-backed volume, such as `SYS`, where the server stores the NSS-shaped user restriction mirror in the
|
|
volume-root `netware.userquota.0` xattr and derives live usage by scanning
|
|
the host tree.
|
|
|
|
The expected result is that both volumes allow 11 one-block files after setting a
|
|
12-block headroom limit, then deny the next 4K file before data is written. For
|
|
a SYS/NWQUOTA run with a pre-existing baseline, the smoke rebases the limit to
|
|
`baseline + 12x4K` and expects the final used count to be `baseline + 11x4K`.
|
|
|
|
The helper writes per-volume logs under `/tmp/nwfs-quota-dual.*` and makes them
|
|
world-readable so they can be collected after root-run tests.
|
|
|
|
## AFP
|
|
|
|
`tests/afp` contains the current AFP endpoint smoke suite and its single AFP
|
|
README. AFP deleted-file endpoint `0x13` is implemented as a thin adapter over
|
|
the shared salvage backend and is covered by the AFP smoke suite.
|
|
|
|
## Salvage
|
|
|
|
`tests/salvage` contains the shared NetWare salvage coverage. These tests are
|
|
kept outside `tests/afp` because AFP `0x13` must become a thin adapter over the
|
|
same backend that serves the NetWare NCP salvage calls.
|
|
|
|
The current salvage tests cover:
|
|
|
|
- local layout contract for `.recycle` payloads and `.salvage` JSON metadata,
|
|
- NCP create/delete capture through the normal server delete path,
|
|
- Samba-compatible, non-localized history naming with `Copy #1 of NAME`,
|
|
- NCP `87/16` scan, `87/17` recover, and `87/18` purge through the official
|
|
`ncpfs` helper API,
|
|
- stale `.salvage` sidecars are ignored and cleaned when their `.recycle`
|
|
payload is externally removed,
|
|
- report-file generation with `--out FILE`.
|
|
|
|
`tests/salvage/salvage_smoke_suite.sh` is the single NCP integration entry
|
|
point. It creates multiple versions of the same file through NCP, deletes them
|
|
through NCP, scans salvageable entries, recovers the oldest sequence, and checks
|
|
the restored payload through NCP read. The scan check expects duplicate
|
|
sequence entries for the original deleted name; backend history paths stay
|
|
hidden behind the salvage endpoints.
|
|
|
|
The NCP smoke suite is intended to run as the same Unix user that normally runs
|
|
the test client, not necessarily as root. Pre-clean of old `.recycle` or
|
|
`.salvage` artifacts is therefore best-effort: permission failures are reported
|
|
as warnings and do not by themselves fail the smoke. The actual pass/fail check
|
|
is based on artifacts created by the NCP delete path.
|
|
|
|
## NCP path visibility
|
|
|
|
Normal mars_nwe NCP path resolution does not expose Unix dot directories as
|
|
ordinary user-visible NetWare paths. In the classic path resolver, leading-dot
|
|
components are handled as special `.`/`..` syntax, so names such as `.recycle`
|
|
or `.salvage` return invalid path (`0x899c`) through normal file open/read
|
|
requests. Directory scans also skip names beginning with `.`.
|
|
|
|
Tests must therefore not validate salvage payloads by opening
|
|
`SYS:.recycle/...` or `SYS:.salvage/...` through normal NCP file calls. Use the
|
|
salvage scan/recover/purge endpoints for repository state and verify payload
|
|
content by reading the restored live file through NCP.
|
|
|
|
|
|
## NCPFS directory-quota smoke
|
|
|
|
`tests/nwfs/nwfs_ncpfs_dirquota_smoke.sh` is the live smoke for the
|
|
MARS-NWE 3.x directory quota endpoints. It uses the `nwfs_ncpfs_dirquota`
|
|
helper to call the documented decimal NCPs `22/36` and `22/35` directly
|
|
through libncp (`NCPC_SFN(22, 36)` and `NCPC_SFN(22, 35)`; wire/code bytes
|
|
`0x24` and `0x23`). The smoke sets a finite directory limit, reads it back,
|
|
checks `netware.metadata` with `nwfs_xattr_dump`, clears the limit, and
|
|
verifies that `22/35` reports no entries again.
|
|
The host dump clear check matches the trailing status word, so
|
|
`dirQuotaLimit=9223372036854775807 inactive` is accepted as cleared.
|
|
|
|
Example:
|
|
|
|
```sh
|
|
./nwfs_ncpfs_dirquota_smoke.sh MARS SUPERVISOR secret \
|
|
/var/mars_nwe/SYS /mnt/nw-sys NWFSTEST SYS
|
|
```
|
|
|
|
Use `NWFS_NCPFS_DIR_QUOTA_4K=VALUE` to choose the tested limit.
|