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

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

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

Требования

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

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

Архитектура

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

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

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

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

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

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

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

Основные компоненты панели управления VTS включают сервлеты, реализованные на 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
    • Google App Engine SDK
    • Maven
  2. Сгенерируйте идентификатор клиента OAuth 2.0 в Google Cloud API Manager.
  3. Создайте сервисный аккаунт и файл ключа.
  4. Добавьте адрес электронной почты в список авторизованных отправителей App Engine Email API.
  5. Настройте аккаунт Google Аналитики.
  6. Укажите переменные среды на панели управления pom.xml:
    • Укажите идентификатор клиента с идентификатором OAuth 2.0 (из шага 2).
    • Установите идентификатор клиента сервиса с помощью идентификатора, включенного в файл ключа (из шага 3).
    • Укажите адрес электронной почты отправителя для оповещений (из шага 4).
    • Укажите домен электронной почты, на который будут отправляться все письма.
    • Укажите адрес REST-сервера Gerrit.
    • Укажите область действия OAuth 2.0, которая будет использоваться для REST-сервера Gerrit.
    • Укажите идентификатор Google Аналитики (из шага 5).
    • Создайте и разверните проект.
  7. В терминале выполните команду mvn clean appengine:update.

Безопасность

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

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

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