# Стратегия тестирования 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 воспроизводит исправленный дефект.