Configuração do painel VTS

O VTS Dashboard fornece um back-end de usuário e uma interface de usuário (UI) para visualizar os resultados do teste do sistema de integração contínua VTS. Ele oferece suporte ao desenvolvimento orientado a testes com ferramentas como notificações de status de teste para ajudar os desenvolvedores a localizar e evitar áreas de regressão durante o ciclo de desenvolvimento (inclui monitoramento de teste e suporte de triagem).

O VTS Dashboard UI oferece suporte a recursos (como cobertura de código nativo) fornecidos pela infraestrutura VTS e oferece monitoramento contínuo de desempenho para permitir o desenvolvimento de ferramentas de desempenho otimizadas e bem caracterizadas.

Requisitos

Os seguintes serviços são necessários para usar o VTS Dashboard:

A visualização da cobertura do teste depende de uma API REST para um servidor de código-fonte (por exemplo, Gerrit), que permite que o serviço da Web busque o código-fonte original de acordo com as listas de controle de acesso existentes.

Arquitetura

O VTS Dashboard usa a seguinte arquitetura:

Figura 1 . Arquitetura do painel VTS.

Os resultados do status do teste são carregados continuamente no banco de dados do Cloud Datastore por meio de uma interface REST. O executor VTS processa automaticamente os resultados e os serializa usando o formato Protobuf.

Os servlets da Web formam o ponto de acesso primário para usuários, entregando e processando dados do banco de dados Datastore. Os servlets incluem: um servlet principal para entregar todos os testes, um servlet de preferências para gerenciar os favoritos do usuário, um servlet de resultados para preencher uma tabela de teste, um servlet gráfico para preparar dados de perfil e um servlet de cobertura para preparar dados de cobertura para o cliente .

Cada módulo de teste tem sua própria árvore ancestral do Datastore e os resultados do teste são indexados com o carimbo de data/hora Unix da hora de início do teste. Os dados de cobertura no banco de dados são armazenados com os resultados do teste como um vetor de contagens (ou seja, para cada linha no arquivo fonte original) e informações de identificação para buscar o código fonte de um servidor de código fonte.

O serviço de notificação é executado usando filas de tarefas, identificando mudanças no status do caso de teste e notificando os assinantes. As informações de estado são armazenadas em uma tabela de status para acompanhar a atualização dos dados e as falhas existentes. Isso permite que o serviço de notificação forneça informações valiosas sobre falhas e correções de casos de teste individuais.

Estrutura do código

Os componentes essenciais do VTS Dashboard incluem os servlets implementados em Java, JSPs front-end, folhas de estilo CSS e arquivos de configuração. A lista a seguir detalha os locais e as descrições desses componentes (todos os caminhos relativos a test/vts/web/dashboard ):

  • pom.xml
    Arquivo de configurações onde as variáveis ​​de ambiente e dependências são definidas.
  • src/main/java/com/android/vts/api/
    Contém endpoints para interagir com os dados via REST.
  • src/main/java/com/android/vts/entity/
    Contém modelos Java das entidades Datastore.
  • src/main/java/com/android/vts/proto/
    Contém arquivos Java para Protobuf, incluindo VtsReportMessage.java , que é uma implementação Java do tipo Protobuf usada para descrever os resultados do teste VTS.
  • src/main/java/com/android/vts/servlet/
    Contém arquivos Java para servlets.
  • src/main/java/com/android/vts/util/
    Contém arquivos Java para funções e classes utilitárias usadas pelos servlets.
  • src/test/java/com/android/vts/
    Contém testes de interface do usuário para os servlets e utilitários.
  • src/main/webapp/
    Contém arquivos relacionados à interface do usuário (JSP, CSS, XML):
    • js/ . Contém arquivos Javascript usados ​​pelas páginas da web.
    • WEB-INF/ . Contém arquivos de configuração e interface do usuário.
    • jsp/ . Contém os arquivos JSP para cada página da web.
  • appengine-web.xml
    Arquivo de configurações onde as variáveis ​​de ambiente são carregadas em variáveis.
  • web.xml
    Arquivo de configurações onde os mapeamentos de servlet e as restrições de segurança são definidos.
  • cron.xml
    Arquivo de configurações que define as tarefas agendadas (ou seja, o serviço de notificações).

Configurar o painel

Para configurar o Painel VTS:

  1. Crie um projeto do Google Cloud App Engine e configure o host de implantação instalando:
    • Java 8
    • SDK do Google App Engine
    • Especialista
  2. Gere um ID do cliente OAuth 2.0 no Google Cloud API Manager.
  3. Crie uma conta de serviço e crie um arquivo de chave.
  4. Adicione um endereço de e-mail à lista de remetentes autorizados da API de e-mail do App Engine.
  5. Configure uma conta do Google Analytics.
  6. Especifique as variáveis ​​de ambiente no Dashboard pom.xml :
    • Defina o ID do cliente com o ID OAuth 2.0 (da etapa 2).
    • Configure o ID do cliente de serviço com o identificador incluído no arquivo-chave (da etapa 3).
    • Especifique o endereço de e-mail do remetente para alertas (da etapa 4).
    • Especifique um domínio de e-mail para o qual todos os e-mails serão enviados.
    • Especifique o endereço para o servidor Gerrit REST.
    • Especifique o escopo OAuth 2.0 a ser usado para o servidor Gerrit REST.
    • Especifique o ID do Google Analytics (da etapa 5).
    • Crie e implante o projeto.
  7. Em um terminal, execute mvn clean appengine:update .

Considerações de segurança

Informações de cobertura robustas requerem acesso ao código-fonte original. No entanto, algum código pode ser sensível e um gateway adicional para ele pode permitir a exploração de listas de controle de acesso existentes.

Para evitar essa ameaça, em vez de servir o código-fonte com as informações de cobertura, o Dashboard lida diretamente com um vetor de cobertura (ou seja, um vetor de execução conta o mapeamento para linhas em um arquivo-fonte). Junto com o vetor de cobertura, o Dashboard recebe um nome de projeto Git e um caminho para que o cliente possa buscar o código de uma API de código-fonte externa. O navegador do cliente recebe essas informações e usa o compartilhamento de recursos de origem cruzada (CORS) em Javascript para consultar o servidor de código-fonte em busca do código-fonte original; o código resultante é combinado com o vetor de cobertura para produzir uma exibição.

Essa abordagem direta não amplia a superfície de ataque porque o Dashboard usa os cookies do usuário para se autenticar com um serviço externo (o que significa que um usuário que não pode acessar o código-fonte diretamente não pode explorar o Dashboard para visualizar informações confidenciais).