[AZ-585] [AZ-586] ResLim+Perf NFT tests; close test cycle 1

Batch 4 of test implementation cycle 1 (existing-code Step 6, final batch).

- AZ-585 SteadyStateLoadTests + ColdStartRssTests: NFT-RES-LIM-01..04.
  SteadyStateLoadFixture runs one 5-min sustained-load window and samples
  RSS (docker stats), Npgsql conns (pg_stat_activity), and FDs
  (/proc/1/fd) every 5s; three test methods assert independently. All
  SkippableFact-gated on docker primitives.
- AZ-586 PerformanceTests: NFT-PERF-01..04. Sequential single-client,
  5 warm-ups + N measured calls, P50+P95 via LatencyPercentiles, recorded
  to PERF_RESULTS_FILE. Tagged Category=Perf so default gate excludes them.

Infrastructure:
- entrypoint.sh now applies --filter "${TEST_FILTER:-Category!=Perf}"
  per AZ-586 (default CI gate excludes performance).
- MetricCsvRecorder: idempotent CSV appender keyed on env var, used by
  both Perf and ResLim categories.

Step 6 (Implement Tests) is complete. Final report at
_docs/03_implementation/implementation_report_tests.md handoffs the
full-suite gate to test-run/SKILL.md (Step 7).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-15 09:11:53 +03:00
parent 26126e6216
commit 001e80fe96
14 changed files with 1181 additions and 52 deletions
@@ -14,9 +14,16 @@ set -eu
mkdir -p "$RESULTS_DIR"
set +e
## Performance scenarios (Category=Perf) are excluded from the default gate
## per AZ-586. They are invoked from scripts/run-performance-tests.sh which
## passes its own --filter Category=Perf. ResLim tests (Category=ResLim) stay
## in the default gate because their docker-CLI gate causes them to skip
## with an explicit reason when COMPOSE_RESTART_ENABLED is not set.
TEST_FILTER="${TEST_FILTER:-Category!=Perf}"
dotnet test /src/Azaion.Missions.E2E.Tests.csproj \
--no-build \
--configuration Release \
--filter "$TEST_FILTER" \
--logger "trx;LogFileName=results.trx" \
--logger "console;verbosity=normal" \
--results-directory "$RESULTS_DIR"