ЦЕЛЬ Автоматизировать тестирование модуля инжектора ОПИСАНИЕ ИНЖЕКТОРА Инжектор представляет из себя модуль, выполненый в 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\\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.