Skip to content

Стенд: механизм captive portal без телефона (K1a-K1d) - #464

Merged
dontsovcmc merged 1 commit into
devfrom
captive_portal_stand
Sep 22, 2026
Merged

dontsovcmc merged 1 commit into
devfrom
captive_portal_stand

Conversation

@dontsovcmc

Copy link
Copy Markdown
Owner

Зачем

Captive portal целиком числился в ручных проверках (K1, 04_not-tested.md §7): «нужен телефон». Но окно на телефоне всплывает от трёх звеньев прошивки (active_point.cpp), и все три AT-плата проверяет так же, как телефон.

Что проверяется

Тест Что
K1a DNS точки отвечает 192.168.4.1 на любое имя (AT+CIPDOMAIN). При провале в сообщении — какой DNS плата спрашивает (AT+CIPDNS?): ESP-AT до выдачи DNS по DHCP ходит на 208.67.222.222
K1b Проверочные адреса Android, Apple, Windows, Firefox → 302 на портал; connecttest.txtlogout.net; wpad.dat → 404. Запрос по имени, через DNS портала, с тем же Host
K1c / отдаёт посадочную страницу по состоянию. Признак «вход не настроен» берётся из /api/main_status (плашки 2/3 бывают только при factor1 == AUTO), а не из лога прошивки
K1d В W2: после неверного пароля / отдаёт captive_portal_error.html (если вход не настроен)
test_strings.js Посадочные страницы captive_portal*.html без <script>

Код редиректа 302 — из AsyncWebServerRequest::redirect закреплённого форка waterius/ESPAsyncWebServer#20230926.

Находка

captive_portal_error.html подключает strings.js и пишет причину ошибки через fill_tr_id (исправление X1 в 2.0.50). По комментарию в active_point.cpp мини-браузер айфона скрипты не выполняет — в окне captive portal на айфоне причины ошибки не будет. В тесте это записано известным исключением; решать, подставлять ли причину на сервере, — отдельно.

Проверка

  • python3 -m pytest Utils/hil/selftest -q — 71 passed (новый selftest/test_captive.py: разбор +CIPDOMAIN, узнавание страницы по образу с подстановкой, признак настройки)
  • node ESP8266/scripts/test_strings.js — 26 passed
  • На железе не гонялось: стенд выключен. Нужно: pytest Utils/hil/test_captive.py --stand -v и pytest Utils/hil/test_wizard.py -k W2 --stand -v

🤖 Generated with Claude Code

https://claude.ai/code/session_01DQy577C8CwJr3uGxQsXyXG

Окно портала на телефоне всплывает от цепочки из трёх звеньев прошивки,
и ни одно из них до сих пор ничем не проверялось:

- K1a: DNS точки отвечает её адресом на любое имя (AT+CIPDOMAIN);
- K1b: проверочные адреса Android, Apple, Windows и Firefox отвечают
  редиректом 302 на портал, wpad.dat - 404;
- K1c: `/` отдаёт посадочную страницу по состоянию; признак настройки
  берётся из /api/main_status, а не из лога прошивки;
- K1d (в W2): после неверного пароля `/` отдаёт страницу ошибки.

test_strings.js: посадочные страницы без <script>. Известное исключение -
captive_portal_error.html: причину ошибки она пишет скриптом, и в окне
айфона, где JavaScript выключен, причины не будет.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DQy577C8CwJr3uGxQsXyXG
@dontsovcmc
dontsovcmc merged commit 3dc73ae into dev Sep 22, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant