You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
6.3 KiB
211 lines
6.3 KiB
ЦЕЛЬ
|
|
|
|
Автоматизировать тестирование модуля инжектора
|
|
|
|
|
|
ОПИСАНИЕ ИНЖЕКТОРА
|
|
|
|
Инжектор представляет из себя модуль, выполненый в 2-х вариантах и запускаемый 2-мя различными способами:
|
|
- с логом
|
|
- без лога
|
|
и
|
|
- автономно
|
|
- посредством бота
|
|
|
|
Логированый модуль требует наличие следующих конфигов:
|
|
c:/temp/sinj4.xml
|
|
c:/temp/dinj.xml
|
|
c:/temp/dpost.xml
|
|
|
|
Логи создаются в
|
|
c:/temp/loader.log
|
|
c:/temp/core-dll.log
|
|
|
|
|
|
ТЕСТЫ
|
|
|
|
Тест - это функция на PowerShell v2.0, проверяющая одно простое условие,
|
|
и возвращающая булево значение о выполнении этого условия.
|
|
Успешное выполнение теста соответсвует логической истине.
|
|
Тесту должно соответсвовать свойство Message.
|
|
При любом исходе теста в это свойство записывается диагностика, подтверждающая данный исход.
|
|
Например, если в логе есть искомая строка (по которой проверяется условие теста),
|
|
в это свойство копируется найденая строка. Если строка отсутствует, поле заполняется произвольным
|
|
описанием причины (к примеру, "*substring*: no match in c:/temp/logname.log"
|
|
|
|
Необходимо написать следующие тесты:
|
|
sinj_proxy_alive
|
|
dinj_proxy_alive
|
|
dpost_proxy_alive
|
|
* эти три теста делать в последнюю очередь
|
|
|
|
loader_log_started
|
|
core_log_started
|
|
|
|
chrome_has_inject
|
|
ff_has_inject
|
|
ie_has_inject
|
|
edge_has_inject
|
|
|
|
chrome_dpost_ok
|
|
ff_dpost_ok
|
|
ie_dpost_ok
|
|
edge_dpost_ok
|
|
|
|
chrome_http2_off
|
|
ff_http2_off
|
|
ie_http2_off
|
|
|
|
ТОДО битность броузеров
|
|
битность ОС
|
|
|
|
|
|
РЕАЛИЗАЦИЯ
|
|
|
|
Результатом должен быть скрипт на PowerShell v2.0.
|
|
Скрипт должен возвращать в ОС код возврата, равный количеству проваленых тестов.
|
|
|
|
При запуске скрипт должен выполнять автообновление аналогично другим скриптам автотестов.
|
|
|
|
В начале каждого теста (кроме тестов *proxy* и других оговореных случаев) скрипт должен
|
|
запускать из текущего каталога файл loader.exe, а после выполнения теста убивать этот процесс
|
|
и удалять файлы логов.
|
|
|
|
Тест должен вести лог вида
|
|
2018-08-14 00:01:02 test_name started
|
|
* сообщение теста, если есть (Message)
|
|
2018-08-14 00:01:12 test_name: OK|FAILED|SKIPPED
|
|
|
|
При провале любого теста (кроме тестов прокладок) дальнейшие тесты следует пропустить,
|
|
скрипт завершить. Пропущеные тесты логически засчитываются как проваленые.
|
|
|
|
|
|
НАСТРОЙКИ
|
|
|
|
Настройки выносятся в переменные, вынесенные в самое начало скрипта:
|
|
- путь к конфигу sinj
|
|
- путь к конфигу dinj
|
|
- путь к конфигу dpost
|
|
- путь к логу loader.log
|
|
- путь к логу core-dll.log
|
|
- таймаут прогрева модуля (20 секунд по умолчанию)
|
|
- таймаут прогрева броузеров (35 секунд по умолчанию)
|
|
- таймаут устойчивости броузеров (1 минута по умолчанию)
|
|
- логин и url для автообновления
|
|
|
|
|
|
ПОДРОБНОЕ ОПИСАНИЕ ТЕСТОВЫХ СЛУЧАЕВ
|
|
|
|
* sinj_proxy_alive
|
|
Из конфига sinj выбирается первая по счету прокладка, открывается TCP-соединение
|
|
на заданный порт.
|
|
Тест успешен, если удалось открыть TCP-соединение.
|
|
|
|
* dinj_proxy_alive
|
|
Из конфига dinj выбирается первая по счету прокладка, открывается TCP-соединение
|
|
на заданный порт.
|
|
Тест успешен, если удалось открыть TCP-соединение.
|
|
|
|
* dpost_proxy_alive
|
|
В конфига dpost проверяются все прокладки путем открытия TCP-соединения на заданный порт.
|
|
Тест успешен, если удалось открыть TCP-соединение хотя бы на одну прокладку.
|
|
|
|
* loader_log_started
|
|
Запускается loader.exe.
|
|
Тест успешен, если после времени прогрева:
|
|
- появился файл loader.log по нужному пути
|
|
- в нем есть запись
|
|
Browsers payload unpacked successfully
|
|
|
|
* chrome_has_inject
|
|
Запускается loader.exe.
|
|
После времени прогрева запускается процесс Хрома.
|
|
После прогрева броузера проверяются следующие условия:
|
|
- появился файл core-dll.log по нужному пути
|
|
- в нем есть записи
|
|
We are Chrome
|
|
Chrome version: xxx
|
|
Chrome SSL functions found
|
|
(это является сообщением к тесту)
|
|
- в списке процессов имеется минимум 3 процесса chrome.exe после таймаута устойчивости броузеров
|
|
(при нарушении этого пункта тест провален, в сообщение теста добавляется строка
|
|
browser crashed!
|
|
)
|
|
- если в логе есть запись
|
|
Chrome SSL functions NOT FOUND
|
|
то тест провален, а данное сообщение и адреса функций (ниже в логе) копируется в сообщение теста
|
|
|
|
* ff_has_inject
|
|
Запускается loader.exe.
|
|
После времени прогрева запускается процесс Mozilla Firefox.
|
|
После прогрева броузера проверяются следующие условия:
|
|
- появился файл core-dll.log по нужному пути
|
|
- в нем есть записи
|
|
We are Firefox
|
|
Mozilla Firefox version: xxx
|
|
(это является сообщением к тесту)
|
|
- в списке процессов имеется минимум 1 процесс firefox.exe после таймаута устойчивости броузеров
|
|
(при нарушении этого пункта тест провален, в сообщение теста добавляется строка
|
|
browser crashed!
|
|
)
|
|
|
|
* ie_has_inject
|
|
Запускается loader.exe.
|
|
После времени прогрева запускается процесс Internet Explorer.
|
|
После прогрева броузера проверяются следующие условия:
|
|
- появился файл core-dll.log по нужному пути
|
|
- в нем есть записи
|
|
We are IE
|
|
IE version xxx
|
|
(это является сообщением к тесту. Если строк с версией больше одной, клеим к сообщению их все)
|
|
- в списке процессов имеется минимум 1 процесс iexplore.exe после таймаута устойчивости броузеров
|
|
(при нарушении этого пункта тест провален, в сообщение теста добавляется строка
|
|
browser crashed!
|
|
)
|
|
|
|
|
|
* edge_has_inject
|
|
|
|
chrome_dpost_ok
|
|
ff_dpost_ok
|
|
ie_dpost_ok
|
|
edge_dpost_ok
|
|
|
|
* chrome_http2_off
|
|
Запускается loader.exe.
|
|
После времени прогрева запускается процесс Chrome.
|
|
После прогрева броузера проверяются следующие условия:
|
|
- хотя бы у одного процесса chrome.exe присутствуют ключи командной строки
|
|
--disable-http2 --use-spdy=off --disable-quic
|
|
|
|
* ff_http2_off
|
|
Запускается loader.exe.
|
|
После времени прогрева производится поиск файла %APPDATA%\Mozilla\Firefox\Profiles\<profileName>\prefs.js
|
|
Тест считается успешным, если в файле есть подстрока
|
|
user_pref("network.http.spdy.enabled.http2", true)
|
|
|
|
* ie_http2_off
|
|
Запускается loader.exe.
|
|
После времени прогрева проверяется значение ключа реестра:
|
|
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\EnableHTTP2 == 0
|
|
|
|
|
|
ЗАДАЧИ ВТОРОГО ЭТАПА
|
|
|
|
* автоматическая подготовка ВМ к тестированию, включает в себя:
|
|
- установку или обновление Google Chrome
|
|
- установку или обновление Mozilla Firefox
|
|
|
|
* интеграцию с тестированием бота:
|
|
- добавить тесты, проверяющие наличие инжекта в броузере БЕЗ парсинга логов.
|
|
Для этого нужно найти способ просматривать код страницы запущенного броузера, из скрипта.
|
|
|
|
* базовый тест инжекта (общий для всех броузеров)
|
|
Запускается loader.exe.
|
|
После времени прогрева запускается броузер.
|
|
После времени прогрева открывается страница из списка.
|
|
По окончанию загрузки страницы открывается ее исходный код.
|
|
В исходном коде ищется подстрока
|
|
TODO
|
|
Тест успешен, если подстрокат найдена.
|
|
Тест требует работы с окнами через WinAPI.
|