[PR #17604] test zapret.ps1: итоги прогона выводятся неверно #499

Open
opened 2026-09-21 11:18:12 +03:00 by mirror-bot · 0 comments

📋 Pull Request Information

Original PR: https://github.com/Flowseal/zapret-discord-youtube/pull/17604
Author: @klaymm
Created: 9/20/2026
Status: 🔄 Open

Base: main ← Head: fix/test-results


📝 Commits (2)

  • 156102a test zapret.ps1: итоги прогона выводятся неверно
  • 14a8e99 Исправление моей же ошибки.

📊 Changes

1 file changed (+25 additions, -8 deletions)

View changed files

📝 utils/test zapret.ps1 (+25 -8)

📄 Description

Три бага в выводе результатов.

1. Сводка ANALYTICS идёт в произвольном порядке

$analytics - обычная хэш-таблица, порядок её ключей не совпадает с порядком тестирования. На 22 конфигах сводка получается такой: ALT11, ALT3, FAKE TLS AUTO, ALT6, ALT5, ... - сопоставить строку с прогоном (Лично мне) тяжело.

Порядок при этом стабилен между запусками, так что баг не плавающий, он просто всегда неправильный.

$names = Get-ChildItem -Filter *.bat | Where-Object { $_.Name -notlike "service*" } |
         Sort-Object { [Regex]::Replace($_.Name,"(\d+)",{ $args[0].Value.PadLeft(8,"0") }) } |
         Select-Object -ExpandProperty Name
$h = @{}; foreach ($n in $names) { $h[$n] = 1 }
($names -join '|') -eq (($h.Keys) -join '|')   # False

Заменил на [ordered]@{}.

2. «Best config» называет конфиг, который ничего не прошёл

$maxScore = 0, $maxPing = -1. Если ни один конфиг не набрал ни одной успешной проверки, первая же итерация проходит по ветке $pingScore (0) -gt $maxPing (-1) и «лучшим» назначается первый ключ хэш-таблицы, то есть произвольный конфиг с OK: 0.

$analytics = @{}
foreach ($n in @("general (ALT).bat","general (ALT2).bat","general (ALT3).bat")) {
  $analytics[$n] = @{OK=0;ERROR=48;UNSUP=0;PingOK=0;PingFail=3}
}
$bestConfig=$null; $maxScore=0; $maxPing=-1
foreach ($c in $analytics.Keys) {
  $a=$analytics[$c]; $score=$a.OK; $pingScore=0
  if ($a.ContainsKey('PingOK')) { $pingScore=$a.PingOK }
  if ($score -gt $maxScore) { $maxScore=$score;$maxPing=$pingScore;$bestConfig=$c }
  elseif ($score -eq $maxScore) { if ($pingScore -gt $maxPing) { $maxPing=$pingScore;$bestConfig=$c } }
}
$bestConfig   # general (ALT3).bat, хотя OK=0 у всех трёх

Как можно воспроизвести вживую?: временно заменить utils/targets.txt на недостижимые цели(пример ниже) и прогнать несколько конфигов ( к примеру, три), которые изначально адекватно работают (= пингуются и работоспособны).

test1 = "https://127.0.0.1:9"
test2 = "https://127.0.0.1:19"

Отдельный случай - когда все конфиги пропущены (Strategy failed to start). Тогда $analytics пуст, цикл не выполняется и печатается просто Best config: без значения.

Теперь оба случая выводятся явно и красным:

Best config: n/a (no configs were tested)
Best config: n/a (no config passed a single check)

$bestConfig при этом обнуляется, чтобы значение не подхватил тот, кто будет читать его дальше. (Существует один из открытых PR, который предлагает поставить bestconfig, как активный сразу после того, как прошёл тест.)

3. Битая строка в файле результатов при падении runspace

Заглушка в Invoke-DpiSuite создаёт поля SizeBytes / SizeKB, а сохранение отчёта читает UpKB / DownKB / Time. В файл попадает:

    RUNSPACE: code=ERR  up= KB  down= KB  time=s  status=FAIL

Привёл поля в соответствие, заодно в результат кладётся реальный TargetId вместо UNKNOWN и пустой Country, которого не хватало при записи.

    RUNSPACE: code=ERR  up=0 KB  down=0 KB  time=-1s  status=FAIL

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Flowseal/zapret-discord-youtube/pull/17604 **Author:** [@klaymm](https://github.com/klaymm) **Created:** 9/20/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/test-results` --- ### 📝 Commits (2) - [`156102a`](https://github.com/Flowseal/zapret-discord-youtube/commit/156102a3f490f5cd8f0393f822ae696122ac630d) test zapret.ps1: итоги прогона выводятся неверно - [`14a8e99`](https://github.com/Flowseal/zapret-discord-youtube/commit/14a8e992c3342a1690d4cc052de93165ce36b3e3) Исправление моей же ошибки. ### 📊 Changes **1 file changed** (+25 additions, -8 deletions) <details> <summary>View changed files</summary> 📝 `utils/test zapret.ps1` (+25 -8) </details> ### 📄 Description # Три бага в выводе результатов. ### 1. Сводка ANALYTICS идёт в произвольном порядке `$analytics` - обычная хэш-таблица, порядок её ключей не совпадает с порядком тестирования. На 22 конфигах сводка получается такой: `ALT11, ALT3, FAKE TLS AUTO, ALT6, ALT5, ...` - сопоставить строку с прогоном (Лично мне) тяжело. Порядок при этом стабилен между запусками, так что баг не плавающий, он просто всегда неправильный. ```powershell $names = Get-ChildItem -Filter *.bat | Where-Object { $_.Name -notlike "service*" } | Sort-Object { [Regex]::Replace($_.Name,"(\d+)",{ $args[0].Value.PadLeft(8,"0") }) } | Select-Object -ExpandProperty Name $h = @{}; foreach ($n in $names) { $h[$n] = 1 } ($names -join '|') -eq (($h.Keys) -join '|') # False ``` Заменил на `[ordered]@{}`. ### 2. «Best config» называет конфиг, который ничего не прошёл `$maxScore = 0`, `$maxPing = -1`. Если ни один конфиг не набрал ни одной успешной проверки, первая же итерация проходит по ветке `$pingScore (0) -gt $maxPing (-1)` и «лучшим» назначается первый ключ хэш-таблицы, то есть произвольный конфиг с `OK: 0`. ```powershell $analytics = @{} foreach ($n in @("general (ALT).bat","general (ALT2).bat","general (ALT3).bat")) { $analytics[$n] = @{OK=0;ERROR=48;UNSUP=0;PingOK=0;PingFail=3} } $bestConfig=$null; $maxScore=0; $maxPing=-1 foreach ($c in $analytics.Keys) { $a=$analytics[$c]; $score=$a.OK; $pingScore=0 if ($a.ContainsKey('PingOK')) { $pingScore=$a.PingOK } if ($score -gt $maxScore) { $maxScore=$score;$maxPing=$pingScore;$bestConfig=$c } elseif ($score -eq $maxScore) { if ($pingScore -gt $maxPing) { $maxPing=$pingScore;$bestConfig=$c } } } $bestConfig # general (ALT3).bat, хотя OK=0 у всех трёх ``` Как можно воспроизвести вживую?: временно заменить `utils/targets.txt` на недостижимые цели(пример ниже) и прогнать несколько конфигов ( к примеру, три), которые изначально адекватно работают (= пингуются и работоспособны). ``` test1 = "https://127.0.0.1:9" test2 = "https://127.0.0.1:19" ``` Отдельный случай - когда все конфиги пропущены (`Strategy failed to start`). Тогда `$analytics` пуст, цикл не выполняется и печатается просто `Best config:` без значения. Теперь оба случая выводятся явно и красным: ``` Best config: n/a (no configs were tested) Best config: n/a (no config passed a single check) ``` `$bestConfig` при этом обнуляется, чтобы значение не подхватил тот, кто будет читать его дальше. (Существует один из открытых PR, который предлагает поставить bestconfig, как активный сразу после того, как прошёл тест.) ### 3. Битая строка в файле результатов при падении runspace Заглушка в `Invoke-DpiSuite` создаёт поля `SizeBytes` / `SizeKB`, а сохранение отчёта читает `UpKB` / `DownKB` / `Time`. В файл попадает: ``` RUNSPACE: code=ERR up= KB down= KB time=s status=FAIL ``` Привёл поля в соответствие, заодно в результат кладётся реальный `TargetId` вместо `UNKNOWN` и пустой `Country`, которого не хватало при записи. ``` RUNSPACE: code=ERR up=0 KB down=0 KB time=-1s status=FAIL ``` --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot added the pull-request label 2026-09-21 11:18:12 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Utilities/zapret-discord-youtube#499