Testes do sistema
api_db_test.go
Nesse código temos um conjunto de testes para um sistema que lida com sensores de diferentes tipos, como sensores de temperatura, sensores de gases e sensores de radiação, utilizando a biblioteca padrão de teste (testing) para verificar se as rotas da API do sistema estão funcionando corretamente.
Teste de envio de dados do sensor (Função testPostsensor):
Este teste envia um payload JSON contendo informações sobre um sensor, como latitude, longitude, código, fabricante, etc., para a rota /sensors do servidor. Após enviar os dados, o teste verifica se a resposta do servidor foi bem-sucedida.
Teste de envio de dados de gás (Função testPostgas):
Similar ao teste anterior, este teste envia informações sobre a concentração de diferentes gases para a rota /gases do servidor. O payload contém informações como o ID do sensor, nome do sensor, unidade de medida e concentrações de vários gases. Após enviar os dados, o teste verifica se a resposta do servidor foi bem-sucedida.
Teste de envio de dados de radiação (Função testPostradiation):
Novamente, este teste envia informações sobre a radiação detectada por um sensor para a rota /radiations do servidor, o payload inclui o ID do sensor, nome do sensor, unidade de medida e nível de radiação detectada. Por fim, o teste então verifica se a resposta do servidor foi bem-sucedida.
Teste de requisição GET (Função testGet):
Este teste realiza uma requisição GET para as três rotas principais do servidor (/sensors, /gases e /radiations), verifica se o servidor responde corretamente às requisições GET para cada uma dessas rotas.
Teste principal (Função TestApi):
Este é o teste principal que chama os testes individuais acima, ele executa todos os testes em sequência para verificar se todas as funcionalidades principais da API estão funcionando corretamente.
aws_test.go
Tal teste verifica se uma aplicação está em execução em uma URL específica na nuvem, realizando uma série de tentativas de conexão, fazendo uma requisição HTTP GET para a URL da aplicação a cada tentativa.
Se a conexão for bem-sucedida e a aplicação responder com o código de status 200 (OK), o programa imprime "A aplicação está em execução na nuvem!" e encerra com um código de saída 0, indicando sucesso. Caso contrário, ele aguarda um segundo e tenta novamente; após 30 tentativas sem sucesso, o programa imprime "Falha ao conectar à aplicação na nuvem." e encerra com um código de saída 1, indicando falha na conexão.
client_test.go
Este código contém testes para um cliente MQTT, utilizando a biblioteca "github.com/eclipse/paho.mqtt.golang".
Teste de Criação de Cliente (Função CreateClient):
Teste que cria um cliente MQTT utilizando uma função de criação fornecida pelo pacote comum (common), verificando se a conexão do cliente é bem-sucedida.
Teste de Inscrição em Tópico (Função SubscribeTopic):
Neste teste, o cliente MQTT é criado e conectado. Em seguida, ele se inscreve em um tópico específico e espera receber mensagens nesse tópico; após dois segundos, o cliente cancela a inscrição no tópico.
Teste de Publicação de Mensagem (Função PublishMessage):
Cria um cliente MQTT, o conecta e publica uma mensagem em um tópico específico, verificando se a publicação da mensagem é bem-sucedida.
controller_test.go
Testes para validar o comportamento do controlador de um sistema que lida com mensagens MQTT.
Teste de Publicação de Campos (Função TestPublishFields):
Verifica se os campos das mensagens MQTT publicadas estão de acordo com um padrão específico. Sendo assim, o controlador publica mensagens nos tópicos "sensor/gases" e "sensor/radiation". Para cada mensagem publicada, o teste verifica se o payload da mensagem corresponde ao padrão esperado para cada tópico. Se o payload não corresponder ao padrão esperado, o teste falhará, indicando uma inconsistência nos campos da mensagem.
Teste de Qualidade de Serviço (QoS) (Função TestQos):
Tal teste verifica se o serviço de qualidade de serviço (QoS) está configurado corretamente. O controlador se inscreve em todos os tópicos sob "sensor/#", após uma pausa de dois segundos, o controlador verifica se todas as mensagens recebidas têm QoS igual a 1. Se alguma mensagem não tiver QoS igual a 1, o teste falhará, indicando uma configuração incorreta do QoS.
database_test.go
Teste de unidade para verificar a funcionalidade de inserção de dados no MongoDB.
Teste de Inserção no MongoDB (Função TestInsertIntoMongo):
Verifica se os dados são corretamente inseridos no MongoDB, criando um cliente MongoDB para conectar-se ao banco de dados utilizando a função setupMongoClient. Em seguida, define um conjunto de dados simulados para serem inseridos no banco de dados, com o auxílio da função mongo.InsertIntoMongo. Se ocorrer algum erro durante a inserção, o teste falhará, exibindo uma mensagem de erro.
Configuração do Cliente MongoDB (Função setupMongoClient):
Tal função auxilia configuração e retorna um cliente MongoDB para ser usado nos testes, utilizando as opções do cliente para especificar a versão da API do servidor. Se ocorrer algum erro durante a conexão com o MongoDB, o teste falhará, exibindo uma mensagem de erro.
kafka_test.go
O teste unitário é reponsável por verificar a funcionalidade de consumo de mensagens do Kafka.
No código, um consumidor Kafka é configurado para se inscrever em um tópico específico e receber mensagens desse tópico, utilizando um canal para receber as mensagens, uma goroutine é iniciada para processar os eventos do Kafka e enviar as mensagens recebidas para o canal. O teste então envia três mensagens de teste para o canal e verifica se o consumidor as recebe corretamente.
Executando os testes
Antes de tudo, garanta que os requisitos e aplicações externas estão em funcionamento e acesse a pastas /src/testes/:
go test -v
Caso seja um teste específico:
go test -v nome-do-teste.go