Пређи на главни садржај

Stress тестирање

Stress пакет. Чеканни app делова чија неуспеха коста корисници новца — главни copy трговање — са враћа, рандомизована, fault-injected радног оптерећења. Потврди систем остаје исправна. Живи у tests/StressTests, покрена у нормално dotnet test зелена врата.

Приступ — Детерминистички Симулација Тестирање (DST)​

Најбољи начин stress дистрибуирана финансијска систем = детерминистички симулација тестирање, per TigerBeetle, FoundationDB, Antithesis: покренута прави логика против симулирана света, вози са сеедована рандомна радно оптерећење + injected грешка, потврди инваријанти на умирити. Све сеедована + детерминистички → било грешка репродукције тачна од сеед. Комбиновано са:

  • Chaos-engineering fault injection (Netflix Chaos Monkey стил) — веза капи, налог одбитке, token ротација, node смрт.
  • Property-based инваријанти — не потврди тачна позива секвенце; потврди својства која мора задржи без обзира на како догађаји interleave (конвергенција, без сирот, at-most-one lease власник).

App већ дослова доставља савршена DST света модел: FakeTradingSession, cTrader-верна in-memory Open API сесија. Stress пакет поновна користи то (повезана, једна извор истине) не mock, тако симулирана брокер понашање као прави.

Шта то покрива​

Copy трговање (примарни фокус)​

Вождена via CopyDstWorld (tests/StressTests/CopyTrading/), покрена live CopyEngineHost против fake сесија, издаје членство-конзистентна source радно оптерећење:

СценариоСтреси
Mass_fan_out…1 source → 80 одредишта, 150 отвора затим затворе; пуна fan-out + цедач
High_frequency_open_close…300 брзо interleaved отварање/затварање; не пропушта позиције
Partial_close_and_scale_in_storm…partial-close + scale-in трн; етикета-скуп стабилност
Connection_flap_storm…поновљена socket раскид/поновна веза + mid-flight desync; resync конвергенција
Order_rejection_cascade…a подмножи одбија сваки налог; здрав одредишта неутицај, затим self-heal via resync
Token_rotation_storm…брзо in-place token размени током налог буја
Randomized_chaos_workload… (10 семена)the DST core — сваки событај тип + сваки грешка interleaved непредсказиво
CopyLeaseReclaimStressTestsnode смрт + lease reclaim кроз скалирана кластер (чиста домена, FakeTimeProvider)

Конвергенција инваријанта. На mirno, сваки здрав одредишта огледала тачна скуп од јако-отварање source позиције — без сирот, ничегов недостаје. Потврди на етикета скуп (scale-in законито отварање други одредишта позицију под исто source етикета, тако дупла етикета очекивано). Одредишта тренутно одбијање налози дозвољено да lag, умирити једном здрав.

Lease инваријанта. У кластеру где node смрт + оживе на сеедована распоред, at most једна node икад держи важећа lease на профилу; мртав node-а lease lapses тачна при истеку, добија reclaim; здрав кластер нагоди са сваким профилом держи тачна један node. Огледала CopyEngineSupervisor-а захтев предикат против CopyProfile домена lease методи.

Thread-безбедност од harness​

FakeTradingSession једна-threaded; stress радно оптерећење мутира то од тест нит док host чита/пишет од њеног петље. SyncTradingSession обвија то, чини сваки сесија операција атомски на једна врата (без держања врата кроз reconnect callback — би инвертована lock ред против host-а _stateGate и deadlock). Симулатор сам себе лево неприкоснута.

Грешке пронађена​

  • Стартап resync трка у CopyEngineHost. OnReconnected електрична пре почетна reference-load + прва resync, која трчала без _stateGate. Socket флап током стартап трча други resync конкурентно, коруптна host-а non-concurrent стање речници (_symbolDetails, _sourceVolumes). Исправљено: покренута стартап load + прва resync под врата. Производља трка, не тест артефакт — DST chaos радно оптерећење површина то.

Покренута​

dotnet test tests/StressTests/StressTests.csproj

Пакет серијализована ([assembly: CollectionBehavior(DisableTestParallelization = true)]): сваки тест врта live host фон петље, вози до умирити под wall часовник, тако паралелно покренута морина host задаци и чини конвергенција timeouts колебљив. Радно оптерећење великости до завршити у секундама тако пакет остаје у подразумевано зелена врата. Неуспех штампе њеног сеед; re-run ту сеед да репродукције тачна interleaving.

Проширење​

  • Нови copy понашање → додајте source опу CopyDstWorld (задржи source књига членство конзистентна са событај ток) + пондериш случај у CopyChaosDstTests. Ако то може створити или пензионирати одредишта позицију, убедите конвергенција инваријанта јако држи.
  • Нови грешка → додајте injector CopyDstWorld (делегат FakeTradingSession-а контролна површина via SyncTradingSession) + вежбе у названа сценарио плус chaos микс.
  • Задржи симулатор cTrader-верна (видите корен CLAUDE.md мандат); никад ослаби то да прохода stress тест.