mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-06 11:40:20 +03:00
feat(web-test): управление пулом контекстов/лицензий в раннере
Раннер регресса теперь держит пул 1С-сеансов сам, вместо накопления контекстов
между тестами и ручного закрытия в хуках. Три необязательных поля webtest.config.mjs
(без них поведение прежнее):
- maxContexts — потолок одновременно живых сеансов (null = без лимита);
- contextPolicy — 'reuse' (держать открытыми в пределах лимита) | 'strict'
(закрывать non-pinned контексты теста сразу после него);
- pinnedContexts — не вытесняются LRU (default = [defaultContext]; [] делает
default вытесняемым на тесном стенде).
Перед setup каждого теста LRU-вытеснение освобождает слот под нужды теста;
уже открытые нужные контексты переиспользуются. Default больше не вечно-pinned.
Исчерпание пула даёт внятную ошибку вместо маскирующего «Browser not connected».
- new: cli/test-runner/context-pool.mjs — чистый планировщик planEviction + LRU.
- cli/commands/test.mjs (v1.4): парсинг/валидация полей, вытеснение с фолбэк-парковкой
на нужный контекст (нельзя закрыть единственный активный), strict-закрытие, LRU-трекинг.
- Доки: regression-spec (§7/§8/глоссарий), regression-guide (рецепт), regress.md.
- Регресс дай-фудит фичу: 14-multi-context-routing роутит в 3-й контекст c,
15-multi-context-handover проверяет вытеснение c на границе; конфиг maxContexts:2.
Юнит-краёв планировщика — в debug/ (gitignored). Live-регресс: 25/25 зелёных.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
9e1341b80b
commit
3f1168b975
@@ -7,6 +7,19 @@ export default async function({ a, b, assert, step, log }) {
|
||||
|
||||
const unique = 'MultiCtx-' + Date.now();
|
||||
|
||||
await step('пул: c вытеснен под maxContexts=2 (a,b — ровно два сеанса)', async () => {
|
||||
// 14-multi-context-routing оставил контекст `c` открытым. Этот тест объявляет [a,b];
|
||||
// раннер под maxContexts:2 вытесняет LRU-контекст `c`, чтобы открыть `b`. Без пула `c`
|
||||
// копился бы (открыто было бы a,b,c). Проверяем, что лимит удержан и c закрыт.
|
||||
// (При запуске 15 в одиночку `c` и не открывался — length===2 всё равно верно.)
|
||||
const open = await a.listContexts();
|
||||
log(`пул после setup: [${open.join(',')}]`);
|
||||
assert.ok(!open.includes('c'), `c должен быть вытеснен под лимитом, открыто: [${open.join(',')}]`);
|
||||
assert.equal(open.length, 2, `в пуле ровно 2 сеанса, получено ${open.length}: [${open.join(',')}]`);
|
||||
assert.includes(open, 'a', 'a должен быть открыт');
|
||||
assert.includes(open, 'b', 'b должен быть открыт');
|
||||
});
|
||||
|
||||
await step('a: открыть Контрагенты, создать новую запись', async () => {
|
||||
await a.navigateSection('Склад');
|
||||
await a.openCommand('Контрагенты');
|
||||
|
||||
Reference in New Issue
Block a user