Files
upl/TESTS.md
T
ddidderr 858f4d949c chore: add nginx deployment smoke test
Add the nginx deployment artifact from PLAN.md. The example config keeps upl
behind nginx, sets client_max_body_size to 64 MiB, disables request buffering for
chunk uploads, forwards standard proxy headers, and leaves explicit placeholders
for TLS certificates and access control before public exposure.

Add just nginx-smoke as a reusable Docker-based verification. The script starts
upl with a temporary data directory, runs nginx as a reverse proxy, uploads a
17 MiB file through nginx, restarts the Rust backend mid-upload, confirms server
progress survives the restart through the proxy, uploads the remaining chunk,
completes the upload, and compares SHA-256 hashes.

Document the production nginx shape, the local Docker smoke-test caveat, and the
manual deployment retest scenario in TESTS.md.

Test Plan:
- bash -n scripts/nginx-smoke.sh
- just check
- just nginx-smoke

Refs: PLAN.md milestone 9
2026-05-30 17:22:26 +02:00

2.2 KiB

Test Scenarios

Keep this file as the reusable verification checklist while implementing PLAN.md.

Automated

  • just check
    • Runs formatting, all Rust tests, and clippy.
    • Current coverage:
      • GET / serves the static browser page.
      • GET /healthz reports ok.
      • POST /api/uploads creates meta.json and chunk directories.
      • POST /api/uploads rejects an empty file name.
      • PUT /api/uploads/:id/chunks/:index stores validated chunk files.
      • PUT /api/uploads/:id/chunks/:index rejects wrong-size chunks.
      • PUT /api/uploads/:id/chunks/:index accepts duplicate chunks.
      • GET /api/uploads/:id reports completed chunks from disk.
      • POST /api/uploads/:id/complete assembles verified chunks.
      • POST /api/uploads/:id/complete rejects incomplete uploads.
      • static/app.js passes node --check.
  • just nginx-smoke
    • Runs upl behind nginx in Docker.
    • Uploads a 17 MiB file through nginx.
    • Restarts the Rust backend mid-upload, resumes through nginx, completes, and compares SHA-256 hashes.

Manual

These scenarios come from PLAN.md and should be retested as the matching features land.

  • Upload a small file in one pass.
  • Upload a file larger than one chunk.
  • Kill the browser tab mid-upload and resume.
  • Restart the Rust server mid-upload and resume.
  • Interrupt the network and resume.
  • Pause from the browser controls and resume.
  • Reload the page and resume from the pending upload list.
  • In a browser with the File System Access API, resume without reselecting the file after granting read permission.
  • In a browser without the File System Access API, resume after reselecting the same file.
  • Retry a duplicate chunk and confirm it is accepted idempotently.
  • Attempt an invalid chunk index and confirm it is rejected.
  • Attempt a wrong-size non-final chunk and confirm it is rejected.
  • Complete an upload and compare the final file with the source file:
  • Install deploy/nginx/upl.conf.example on the deployment host, add the real TLS certificate and access-control settings, and repeat the resume scenarios through the public nginx URL.
sha256sum source-file data/complete/uploaded-file