Панель управления VTS предоставляет пользователям серверную часть и пользовательский интерфейс для просмотра результатов тестирования из системы непрерывной интеграции VTS. Он поддерживает разработку через тестирование с помощью таких инструментов, как уведомления о статусе тестирования, которые помогают разработчикам находить и предотвращать регрессии во время цикла разработки (включая поддержку мониторинга и сортировки тестов).
Интерфейс VTS Dashboard поддерживает функции (например, покрытие нативного кода), предоставляемые инфраструктурой VTS, и предлагает непрерывный мониторинг производительности, чтобы обеспечить разработку оптимизированных и хорошо охарактеризованных инструментов производительности.
Требования
Для работы с панелью VTS требуются следующие сервисы:
- Apache Maven для сборки и развертывания.
- Google Cloud App Engine для хостинга веб-сервисов.
- Google Cloud Datastore для хранения данных.
- Google Stackdriver для мониторинга.
Для просмотра покрытия тестами используется REST API к серверу исходного кода (например, Gerrit), который позволяет веб-сервису получать исходный код в соответствии с существующими списками контроля доступа.
Архитектура
Панель управления 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:
- Создайте проект Google Cloud App Engine и настройте хост развертывания, установив:
- Java 8
- Google App Engine SDK
- Maven
- Сгенерируйте идентификатор клиента OAuth 2.0 в Google Cloud API Manager.
- Создайте сервисный аккаунт и файл ключа.
- Добавьте адрес электронной почты в список авторизованных отправителей App Engine Email API.
- Настройте аккаунт Google Аналитики.
- Укажите переменные среды на панели управления
pom.xml:- Укажите идентификатор клиента с идентификатором OAuth 2.0 (из шага 2).
- Установите идентификатор клиента сервиса с помощью идентификатора, включенного в файл ключа (из шага 3).
- Укажите адрес электронной почты отправителя для оповещений (из шага 4).
- Укажите домен электронной почты, на который будут отправляться все письма.
- Укажите адрес REST-сервера Gerrit.
- Укажите область действия OAuth 2.0, которая будет использоваться для REST-сервера Gerrit.
- Укажите идентификатор Google Аналитики (из шага 5).
- Создайте и разверните проект.
- В терминале выполните команду
mvn clean appengine:update.
Безопасность
Для получения точной информации о покрытии требуется доступ к исходному коду. Однако некоторые фрагменты кода могут быть конфиденциальными, и дополнительный доступ к ним может позволить использовать существующие списки контроля доступа.
Чтобы избежать этой угрозы, вместо того чтобы передавать исходный код с информацией о покрытии, панель управления напрямую обрабатывает вектор покрытия (то есть вектор количества выполнений, сопоставленный со строками в исходном файле). Вместе с вектором покрытия на панель инструментов поступают название и путь к проекту Git, чтобы клиент мог получить код из внешнего API исходного кода. Браузер клиента получает эту информацию и использует технологию совместного использования ресурсов между разными источниками (CORS) в JavaScript, чтобы запросить исходный код у сервера. Полученный код объединяется с вектором покрытия, и результат показывается пользователю.
Такой подход не расширяет поверхность атаки, поскольку для аутентификации в стороннем сервисе панель управления использует файлы cookie пользователя (то есть пользователь, у которого нет прямого доступа к исходному коду, не сможет использовать панель управления для просмотра конфиденциальной информации).