Настройка панели управления VTS

Панель VTS Dashboard предоставляет пользовательский бэкэнд и пользовательский интерфейс (UI) для просмотра результатов тестирования из системы непрерывной интеграции VTS. Он поддерживает разработку, управляемую тестированием, с такими инструментами, как уведомления о состоянии тестирования, чтобы помочь разработчикам находить и предотвращать области регрессии в течение цикла разработки (включая мониторинг тестирования и поддержку сортировки).

Пользовательский интерфейс VTS Dashboard поддерживает функции (например, покрытие собственного кода), предоставляемые инфраструктурой VTS, и предлагает непрерывный мониторинг производительности, позволяющий разрабатывать оптимизированные и хорошо описанные инструменты производительности.

Требования

Для использования панели управления VTS требуются следующие услуги:

Просмотр тестового покрытия опирается на REST API на сервер исходного кода (например , Геррит), что позволяет веб - службу для извлечения исходного кода в соответствии с существующими списками контроля доступа.

Архитектура

Панель управления VTS использует следующую архитектуру:

Рисунок 1. Архитектура панели управления VTS.

Результаты статуса тестирования постоянно загружаются в базу данных Cloud Datastore через интерфейс REST. Средство выполнения VTS автоматически обрабатывает результаты и сериализует их в формате Protobuf.

Веб-сервлеты образуют основную точку доступа для пользователей, доставляя и обрабатывая данные из базы данных хранилища данных. Сервлеты включают в себя: основной сервлет для доставки всех тестов, сервлет настроек для управления избранным пользователем, сервлет результатов для заполнения тестовой таблицы, сервлет графа для подготовки данных профилирования и сервлет покрытия для подготовки данных покрытия для клиента. .

Каждый тестовый модуль имеет собственное дерево предков хранилища данных, а результаты тестирования индексируются с помощью временной метки Unix времени начала теста. Данные о покрытии в базе данных хранятся вместе с результатами тестирования в виде вектора счетчиков (то есть для каждой строки в исходном исходном файле) и идентифицирующей информации для выборки исходного кода с сервера исходного кода.

Служба уведомлений запускается с использованием очередей задач, определения изменений статуса тестового набора и уведомления подписчиков. Информация о состоянии хранится в таблице состояния, чтобы отслеживать актуальность данных и существующие сбои. Это позволяет службе уведомлений предоставлять обширную информацию об ошибках и исправлениях отдельных тестовых примеров.

Структура кода

Основные компоненты VTS Dashboard включают сервлеты, реализованные на Java, интерфейсные JSP, таблицы стилей CSS и файлы конфигурации. В следующем списке перечислены места и описание этих компонентов (все пути относительно test/vts/web/dashboard ):

  • pom.xml
    Файл настроек, в котором определены переменные среды и зависимости.
  • src/main/java/com/android/vts/api/
    Содержит конечные точки для взаимодействия с данными через REST.
  • src/main/java/com/android/vts/entity/
    Содержит Java-модели сущностей хранилища данных.
  • src/main/java/com/android/vts/proto/
    Содержит файлы Java для Protobuf, в том числе VtsReportMessage.java , что реализация Java типа Protobuf используется для описания результатов испытаний VTS.
  • src/main/java/com/android/vts/servlet/
    Содержит файлы Java для сервлетов.
  • src/main/java/com/android/vts/util/
    Содержит файлы Java для служебных функций и классов, используемых сервлетами.
  • src/test/java/com/android/vts/
    Содержит тесты пользовательского интерфейса для сервлетов и утилит.
  • src/main/webapp/
    Содержит файлы, относящиеся к пользовательскому интерфейсу (JSP, CSS, XML):
    • js/ . Содержит файлы Javascript, используемые веб-страницами.
    • WEB-INF/ . Содержит файлы конфигурации и пользовательского интерфейса.
    • jsp/ . Содержит файлы JSP для каждой веб-страницы.
  • appengine-web.xml
    Файл настроек, в котором переменные среды загружаются в переменные.
  • web.xml
    Файл настроек, в котором определены сопоставления сервлетов и ограничения безопасности.
  • cron.xml
    Файл настроек, определяющий запланированные задачи (т.е. службу уведомлений).

Настройка приборной панели

Чтобы настроить панель управления VTS:

  1. Создайте проект Google Cloud App Engine и настройте узел развертывания, установив:
    • Java 8
    • SDK Google App Engine
    • Maven
  2. Создайте идентификатор клиента OAuth 2.0 в Google Cloud API Manager.
  3. Создайте учетную запись службы и создайте ключевой файл.
  4. Добавьте адрес электронной почты в список авторизованных отправителей API электронной почты App Engine.
  5. Создайте учетную запись Google Analytics.
  6. Укажите переменные окружения в Dashboard pom.xml :
    • Установите идентификатор клиента с идентификатором OAuth 2.0 (из шага 2).
    • Установите идентификатор клиента службы с идентификатором, включенным в ключевой файл (из шага 3).
    • Укажите адрес электронной почты отправителя для предупреждений (из шага 4).
    • Укажите домен электронной почты, на который будут отправляться все электронные письма.
    • Укажите адрес сервера Gerrit REST.
    • Укажите область действия OAuth 2.0, которая будет использоваться для сервера Gerrit REST.
    • Укажите идентификатор Google Analytics (из шага 5).
    • Скомпилируйте и разверните проект.
  7. В терминале запустить mvn clean appengine:update .

Соображения безопасности

Для получения надежной информации о покрытии требуется доступ к исходному коду. Однако некоторый код может быть чувствительным, и дополнительный шлюз к нему может позволить использовать существующие списки контроля доступа.

Чтобы избежать этой угрозы, вместо того, чтобы обслуживать исходный код информацией о покрытии, Dashboard напрямую обрабатывает вектор покрытия (т. Е. Вектор подсчета выполнения отображает отображение на строки в исходном файле). Наряду с вектором покрытия Dashboard получает имя проекта Git и путь, чтобы клиент мог получить код из внешнего API исходного кода. Клиентский браузер получает эту информацию и использует совместное использование ресурсов между источниками (CORS) в Javascript для запроса исходного исходного кода на сервере исходного кода; полученный код объединяется с вектором покрытия для отображения.

Такой прямой подход не увеличивает поверхность атаки, поскольку панель мониторинга использует файлы cookie пользователя для аутентификации с внешней службой (это означает, что пользователь, не имеющий прямого доступа к исходному коду, не может использовать панель мониторинга для просмотра конфиденциальной информации).