Files
open-wc/docs/TESTING.md
T

8.8 KiB
Raw Blame History

Стратегия тестирования OpenWC

Принцип

Тесты являются частью функционала платформы: Godot Editor должен запускать проверки, показывать diagnostics, открывать проблемную сущность и формировать воспроизводимый playtest bundle. Один ручной запуск сцены не является достаточным доказательством.

Пирамида тестов

Unit

  • parsers, codecs, bit/byte boundaries и malformed input;
  • coordinate transforms и math;
  • domain reducers, state machines, formulas и validators;
  • schema migrations, ID allocation и semantic diff;
  • quest/encounter graph rules;
  • material mapping helpers без GPU там, где возможно.

Contract

  • packet fixtures для build 12340;
  • golden update fields и packed GUID;
  • TrinityCore/AzerothCore schema fingerprints;
  • adapter round-trip canonical → SQL → snapshot → canonical;
  • Content Project compatibility и migration fixtures;
  • renderer/editor public API contracts.
  • recast-rs navigation fixtures: geometry/profile → region/poly/detail counts и path queries.
  • Lua VM contract: общий WoW-specific corpus выполняется на rilua, PUC-Rio 5.1.1 и, где возможно, оригинальном клиенте 3.3.5a.
  • Wowser используется как дополнительный независимый источник auth/world packet cases; fixtures принимаются только после проверки build 12340 semantics и удаления credentials/proprietary payload data.

Integration

  • auth/realm/world session с disposable test core;
  • character enum/login/update object/movement;
  • asset import → cache → render attach;
  • content build → SQL apply → server query;
  • Godot Editor command → undo/redo → save/reload.

End-to-end

  • login → character → enter world;
  • movement и server reconciliation;
  • combat/cast/aura/death;
  • quest accept/progress/complete/reward;
  • loot/inventory/vendor;
  • party/dungeon flow;
  • editor NPC + quest → deploy → playtest.

Visual и performance

  • deterministic screenshot checkpoints по картам, времени и погоде;
  • perceptual diff с approved baseline и tolerance;
  • frame time, hitch percentiles, draw calls, memory, descriptor count и streaming queues;
  • long traversal через ADT boundaries;
  • dense WMO/M2, water, character equipment и UI scale matrices.
  • navmesh overlay checkpoints и bake/query budgets для больших tiles/dungeons.

Navigation compatibility

  • Golden synthetic meshes проверяют slope, climb, radius erosion, holes, tiled seams и off-mesh connections.
  • WoW fixtures проверяют canonical coordinates и ADT/WMO collision composition.
  • recast-rs version и bake profile закрепляются в manifest; обновление требует baseline diff.
  • OpenWC navigation cache сравнивается с C++ Recast reference на выбранных fixtures.
  • Заявление о server mmap support требует отдельного сравнения с TrinityCore/AzerothCore generator: параметры, tile bounds, polygon queries и фактическое движение существ на disposable core.
  • Editor reachability diagnostics должны различать Reachable, Unreachable, Unknown и Not run.

Lua и addon compatibility

  • Official Lua 5.1.1 suite запускается на pinned VM revision.
  • Oracle tests сравнивают results, errors, byte strings, number formatting, coroutines, metatables, GC-visible behavior и bytecode expectations.
  • WoW corpus проверяет restricted stdlib, global aliases, bit, BOM, GC defaults и запрещённые filesystem/native-module операции.
  • TOC/load order, FrameXML inheritance, events, SavedVariables и addon errors проверяются отдельно от VM.
  • Secure actions, combat lockdown и taint propagation имеют обязательные negative tests; без них addon compatibility не получает статус Verified.
  • Performance suite измеряет OnUpdate, event fan-out, table churn, allocation и incremental GC frame budget.

Exploratory и game design

  • quest clarity и travel time;
  • encounter readability и recovery;
  • economy/reward impact;
  • accessibility, localization и atypical input;
  • latency/loss/reconnect behavior;
  • authoring usability и error recovery.

Test fixtures

Fixtures должны быть минимальными, обезличенными и легально распространяемыми. Не коммитятся credentials, proprietary bulk assets, account data или production dumps.

Типы fixtures:

  • synthetic binary chunks;
  • короткие redacted packet captures;
  • schema-only/disposable DB seed;
  • tiny custom content packs;
  • known coordinate points;
  • corrupt/truncated input corpus;
  • screenshot metadata без обязательного включения proprietary textures.

Test matrix

Минимальные оси:

  • Godot/OS/rendering backend;
  • TrinityCore и AzerothCore supported revisions;
  • locale;
  • quality preset;
  • offline/online;
  • clean cache/warm cache;
  • latency, jitter, packet loss и reconnect;
  • content schema current/previous version.

Полная матрица запускается периодически; pull request использует risk-based subset.

Godot Editor Test Center

Editor dock должен предоставлять:

  • Validate Selection, Map, Package и Project;
  • список severity/code/location/fix suggestion;
  • переход к объекту, полю или viewport position;
  • фильтр и baseline известных diagnostics;
  • запуск headless test suites;
  • playtest checklist и запись результата;
  • экспорт machine-readable report для CI.

Quick Fix допускается только как undoable command с preview diff.

Network verification

  • Каждый codec проверяет exact bytes и round-trip.
  • Parser никогда не читает за packet boundary.
  • Unknown opcode логируется rate-limited и не разрушает session без policy.
  • Replay отделён от transport и детерминирован.
  • Fuzz/property tests покрывают lengths, masks, packed values, compression и fragmentation.
  • Secrets/session keys не появляются в обычных логах.

Server data verification

Перед apply обязательны schema capability check, foreign references, ID collisions, dry-run и backup/checkpoint. После apply выполняются targeted queries и optional core startup smoke. Rollback тестируется на disposable DB.

Content validation levels

  • Error: сборка или применение запрещены.
  • Warning: допустимо после осознанного подтверждения.
  • Info: рекомендация или стоимость.

Примеры errors: broken reference, incompatible schema, duplicate allocation, invalid coordinate, unreachable mandatory quest step. Warnings: отсутствующий optional locale, высокая spawn density, превышение render budget.

Observability

Логи структурированы по subsystem/category/correlation ID. Метрики включают network queues, entity counts, reconciliation errors, asset cache hit rate, editor job durations и validation counts. Пользовательские тексты, credentials и packet payload не логируются по умолчанию.

CI gates

Изменение не сливается, если не проходят:

  • headless project load;
  • unit/contract tests затронутых модулей;
  • content schema validation;
  • deterministic generated artifact check;
  • renderer material smoke при изменении renderer;
  • adapter dry-run при изменении server mapping;
  • documentation link check.

Nightly дополнительно запускает core integration, packet replay corpus, visual checkpoints, traversal performance и migration matrix.

Definition of Done функции

  • acceptance criteria наблюдаемы;
  • happy path и минимум один failure/recovery path автоматизированы;
  • boundary и malformed cases проверены для parser/network/data;
  • diagnostics ведут к проблемному объекту;
  • performance budget указан для frame-critical функции;
  • manual playtest имеет сценарий и ожидаемый результат;
  • regression test воспроизводит исправленный дефект.