- 4 экрана по макету sketches/phone-ui: Каталог (табы Фильмы/Сериалы/Папки, поиск, бейджи зеркала), Детали (озвучки, статус конвертации, чипы скачивания), Очки (пульт, статус), Чат-заглушка - S3 SigV4 presign (S3Presigner): mirror-client read-only креды; watch() и DownloadManager подписывают URL (бакет приватный) - DownloadManager: реальное скачивание video+audio с прогрессом, readTimeout=0 (длинные файлы) - PhoneActions.watch: параметр presign (app-host работает без изменений) - TESTING.md: блок телефонных кейсов TP-1..6
14 KiB
TESTING.md — view-mate, app-glasses (очки RayNeo X2)
Тест-план для стенда (88.19): AVD glasses35 (emulator-5554, 1280×480), app-host на :8080
(консоль FIFO /tmp/host.in, лог /tmp/host.log), http.server :8081 с test-video.mp4,
APK pw.binom.viewmate.glasses установлен.
Кейсы написаны человеческим языком, без координат. Координаты/точные значения агент
добывает сам (скрины, logcat, uiautomator). «Консоль хоста» = FIFO /tmp/host.in
(команды: play <url>, mode <MODE>, cmd <CMD> [ms], catalog, watch, mirror).
Общие предусловия
- Стенд поднят: app-host слушает :8080, http.server :8081, AVD загружен
- Приложение очков установлено (последняя сборка) и запущено
- Logcat очищен перед кейсом (
adb logcat -c)
TC-01 Подключение очков к серверу
Предусловия: app-host запущен и слушает :8080.
Шаги:
- Запусти приложение очков (launch
pw.binom.viewmate.glasses/.MainActivity) - Подожди 5–10 секунд
- Посмотри на экран очков (скрин)
- Загляни в лог приложения (logcat) и в лог хоста
Ожидаемо:
- На экране статус «подключено к телефону» (ConnectionScreen, без системных панелей)
- В logcat: «соединение установлено», «Welcome: режим MOVIE...»
- В
/tmp/host.logприходят периодическиеglasses статус: батарея 80%... - Крашей и ошибок нет
TC-02 Воспроизведение тестового видео (play по прямому URL)
Предусловия: TC-01 пройден.
Шаги:
- Через консоль хоста пошли:
play http://10.0.2.2:8081/test-video.mp4 - Подожди 5–10 секунд
- Сними скрин экрана очков
- Проверь logcat и лог хоста
Ожидаемо:
- В обеих половинах экрана (левой и правой) — одинаковое видеоизображение (движущийся тестовый паттерн: цветные полосы, сетка)
- В logcat: «получено видео», «SimpleExoPlayer создан», «EglVideoRenderer: GL-стэйт создан»
- Крашей нет; процесс жив
TC-03 Воспроизведение видео из живого Jellyfin
Предусловия: TC-01 пройден. Живой стрим-URL (например, фильм «Акира»:
https://jellyfin.binom.pw/Videos/a3ca9fbf926fe9f60448f591ea945ac8/stream?static=true&MediaSourceId=a3ca9fbf926fe9f60448f591ea945ac8&api_key=59e6380a96a94364ae25d2b7cf9f1359).
Шаги:
- Через консоль хоста пошли:
play <jellyfin-url> - Подожди 10–15 секунд (стрим с сетевой задержкой)
- Сними скрин экрана очков
- Проверь logcat: ошибок загрузки быть не должно (если была ошибка — проверь, что приложение не упало)
Ожидаемо:
- На экране кадр фильма (не чёрный экран), одинаковый в обеих половинах
- Приложение живо, крашей нет
- В логе хоста позиция растёт
TC-04 Полноэкранный режим (без системных панелей)
Предусловия: приложение запущено (любой экран: статус или кино).
Шаги:
- Посмотри на экран очков (скрин) — и на статус-экране, и во время кино
- Убедись, что сверху нет системной панели (часы, зарядка, иконки)
- Убедись, что снизу нет навигационной панели
Ожидаемо:
- Системные панели скрыты: приложение занимает весь экран 1280×480
- Даже после паузы/воспроизведения панели не появляются сами
- ⚠️ При первом входе в иммерсивный режим система может показать разовый оверлей «Viewing full screen / To exit, swipe down... [Got it]» — это НЕ баг приложения, это системная подсказка. Нажми «Got it» (или свайпни) и проверь, что панели скрыты.
TC-05 Пауза и продолжение (media PAUSE / PLAY)
Предусловия: TC-02 пройден (видео играет).
Шаги:
- Через консоль хоста пошли:
cmd PAUSE - Подожди 3–5 секунд
- Проверь лог хоста (позиция) и сними скрин
- Через консоль пошли:
cmd PLAY - Подожди 3–5 секунд, снова проверь лог хоста
Ожидаемо:
- После PAUSE: в логе хоста
позиция: N мс, пауза(playing=false), позиция не растёт - После PLAY: позиция снова растёт (playing=true)
- Кадр на экране не меняется на паузе (стоп-кадр)
TC-06 Перемотка вперёд (media SEEK_FWD)
Предусловия: TC-02 пройден.
Шаги:
- Запомни текущую позицию из лога хоста
- Через консоль пошли:
cmd SEEK_FORWARD 10000 - Подожди 3–5 секунд
- Проверь позицию в логе хоста
Ожидаемо:
- Позиция выросла примерно на 10 секунд относительно запомненной
- Видео продолжает играть, крашей нет
TC-07 Закрытие фильма (media CLOSE)
Предусловия: TC-02 пройден.
Шаги:
- Через консоль пошли:
cmd CLOSE - Подожди 3–5 секунд
- Посмотри на экран очков (скрин)
- Проверь лог хоста (позиция)
Ожидаемо:
- Экран вернулся на статус-экран (ConnectionScreen)
- Позиция сброшена (0 мс / нет плеера)
- В logcat: «CLOSE: плеер остановлен и освобождён» (или эквивалент)
- Приложение живо
TC-08 Ошибка загрузки (битый URL) — приложение не падает
Предусловия: TC-01 пройден.
Шаги:
- Через консоль хоста пошли:
play http://10.0.2.2:8081/nonexistent.mp4 - Подожди 10–15 секунд
- Проверь logcat и живость процесса
- Сними скрин
Ожидаемо:
- В logcat ошибка загрузки (ExoPlaybackException / 404), НО:
- Приложение живо (pid существует), краша нет
- Экран не «завис» — можно вернуться в рабочее состояние командой
play <валидный url>
TC-09 Реконнект при обрыве связи
Предусловия: TC-01 пройден.
Шаги:
- Останови app-host (убить процесс) — очки потеряют сервер
- Подожди 10–15 секунд
- Проверь logcat (сообщение о разрыве/реконнекте)
- Запусти app-host заново
- Подожди 10–15 секунд
- Проверь logcat и экран
Ожидаемо:
- При обрыве: в logcat сообщение о потере соединения, приложение живо
- После подъёма хоста: «соединение установлено» снова, Welcome получен
- Повторный
playработает
TC-10 Статус очков уходит на хост
Предусловия: TC-01 пройден, видео играет.
Шаги:
- Подожди 10–15 секунд
- Загляни в
/tmp/host.log
Ожидаемо:
- В логе периодически (раз в ~5 секунд):
glasses статус: батарея 80%, память 10.5/32.0 ГБ - И
glasses позиция: NNN мс, играет/паузас реально растущей позицией во время воспроизведения
TC-11 Конвертация зеркала (media-mirror конвейер)
Предусловия: TC-01 пройден. Стенд достаёт mirror.binom.pw (проверено 19.08: отвечает 404 на корне = жив).
Шаги:
- Через консоль хоста пошли:
open a3ca9fbf926fe9f60448f591ea945ac8(фильм «Акира») — посмотри текущий статус зеркала - Через консоль пошли:
mirror a3ca9fbf926fe9f60448f591ea945ac8 - Подожди 30–60 секунд
- Через консоль пошли:
mirror-status a3ca9fbf926fe9f60448f591ea945ac8 - Повторяй шаг 4 раз в 30–60 секунд, пока статус не станет
done(может занять до 10–15 минут — это NVENC-транскодинг на сервере)
Ожидаемо:
mirrorвернул id джоба и статус (created/queued/processing)mirror-statusпоказывает прогресс: queued → processing → done- По завершении: статус
doneи ссылка на готовое зеркало (480p H.264)
TC-12 Скачивание на устройство (эмуляция) и удаление
Предусловия: TC-01 пройден.
Шаги:
- Через консоль хоста пошли:
dl a3ca9fbf926fe9f60448f591ea945ac8 телефон - Через консоль пошли:
status— найди в выводе отметку о скачанном - Через консоль пошли:
dl a3ca9fbf926fe9f60448f591ea945ac8 очки - Через консоль пошли:
status— проверь, что отметка изменилась (очки) - Через консоль пошли:
rm a3ca9fbf926fe9f60448f591ea945ac8 - Через консоль пошли:
status— проверь, что скачанное удалено
Ожидаемо:
dlотвечает «скачано … → телефон (эмуляция, отмечено в стейте)»statusпоказывает скачанное с целевым устройствомrmудаляет отметку,statusбольше её не показывает- Ошибок и крашей нет
TC-13 Воспроизведение зеркала (watch, после done)
Предусловия: TC-11 пройден (зеркало done), TC-01 пройден.
Шаги:
- Через консоль хоста пошли:
watch a3ca9fbf926fe9f60448f591ea945ac8 - Подожди 10–15 секунд
- Сними скрин экрана очков
- Проверь лог хоста (позиция растёт)
Ожидаемо:
watchотвечает «включил «Акира» на очках (озвучка #0): <url зеркала>»- На экране кадр фильма (из зеркала 480p), одинаковый в обеих половинах
- Позиция растёт, крашей нет
Телефон (app-phone) — тест-кейсы
Стенд: телефон = emulator-5556 (AVD test35, 1080x2400, app pw.binom.viewmate.phone), очки = emulator-5554 (glasses35), связь: adb forward tcp:8080 (хост → телефон), очки ходят на ws://10.0.2.2:8080/ws/glasses. app-host на стенде остановлен.
TP-1 Каталог
- Вкладки Фильмы/Сериалы/Папки, сетка карточек (постер + название + бейдж зеркала: ✓/⟳%/нет/↓часть), нижняя навигация Каталог/Очки/Чат. Переключение вкладок работает.
- ПРОЙДЕН (QA 19.08: P1)
TP-2 Поиск
- Ввод «акира» → найден фильм «Акира». Кириллица через ADBKeyboard (input text кириллицу не принимает).
- ПРОЙДЕН (QA: P2)
TP-3 Детали
- Клик по карточке: постер, название, статус конвертации (нет/processing %/done/failed+перезаказ), секция озвучки (если done — дорожки radio), 4 чипа скачивания (очки-видео/звук, телефон-видео/звук), кнопки «Смотреть на очках», «Скачать на телефон», «Удалить скачанное».
- ПРОЙДЕН частично (QA: P3 — до done зеркала; скачивание — после done)
TP-4 Пульт (экран Очки)
- Карточка: связь (подключено), батарея, память, «сейчас на очках» + позиция. Пульт: −30с/+30с/Плей/Пауза/режимы. Команды доходят до очков (лог очков MediaCommand).
- ПРОЙДЕН (QA: P4; замечание: PLAY на «зависшей» старой сессии не возобновляет — перепроверить на свежей после watch)
TP-5 Чат
- Заглушка «в разработке (следующий этап)».
- ПРОЙДЕН (QA: P5)
TP-6 Скачивание на телефон (реальное)
- Зеркало done → детали → «Скачать на телефон»: прогресс %, файлы video.mkv + audio-{i}.ogg в filesDir, чипы «скачано». Удаление через «Удалить скачанное».