Sistemas Distribuidos 21/22 |
|
Início | Contactos | Teóricas | Práticas | Plano de aulas | Discord
O Tester tem como objetivo permitir o teste do trabalho prático 1, de forma sistemática e uniforme para todos os grupos. Os alunos poderão testar a correção da sua implementação, usando o Tester.
Para executar o tester, os alunos com sistemas operativos Linux ou MacOS devem usar o script test-sd-tp1.sh, enquanto que os alunos com Windows 10 devem usar o script test-sd-tp1.bat.
Nota: Todos os ficheiros mencionados estão dispopíveis em: https://github.com/preguica/sd2122-tp1-api/tree/main/sd2122-tp-api.
Antes de executar o tester e criar a imagem docker, devem adicionar e atualizar o fichero trab.props na raiz do vosso projeto com a informação correta:
USERS_REST_SERVER_MAINCLASS=classe do servidor Users REST (e.g. sd2122.tp1.server.RESTUsersServer)
USERS_REST_PORT=porto do servidor Users REST (e.g. 8080)
USERS_SOAP_SERVER_MAINCLASS=classe do servidor Users SOAP (e.g. sd2122.tp1.server.SOAPUsersServer)
USERS_SOAP_PORT=porto do servidor Users SOAP (e.g. 8080)
USERS_EXTRA_ARGS=parâmetro adicional a passar ao servidor Users, se algum
DIR_REST_SERVER_MAINCLASS=classe do servidor Directory REST (e.g. sd2122.tp1.server.RESTDirServer)
DIR_REST_PORT=porto do servidor Directory REST (e.g. 8080)
DIR_SOAP_SERVER_MAINCLASS=classe do servidor Directory SOAP (e.g. sd2122.tp1.server.SOAPDirServer)
DIR_SOAP_PORT=porto do servidor Directory SOAP (e.g. 8080)
DIR_EXTRA_ARGS=parâmetro adicional a passar ao servidor Directory, se algum
FILES_REST_SERVER_MAINCLASS=classe dos servidores Files REST (e.g. sd2122.tp1.server.RESTFilesServer)
FILES_REST_PORT=porto dos servidores Files REST (e.g. 8080)
FILES_SOAP_SERVER_MAINCLASS=classe dos servidores Files SOAP (e.g. sd2122.tp1.server.SOAPFilesServer)
FILES_SOAP_PORT=porto dos servidores Files SOAP (e.g. 8080)
FILES_EXTRA_ARGS=parâmetro adicional a passar aos servidores Files, se algum
DISCOVERY_MULTICAST_IP=endereço multicast para descoberta (e.g. 226.226.226.226)
DISCOVERY_MULTICAST_PORT=porto para descoberta (e.g. 2266)
Enquanto não tiverem a parte SOAP implementada, devem deixar as propriedades respetivas sem nenhum valor, mas não as devem apagar. Podem igualmente testar o servidor Users sem terem os servidores Directory e Files funcional, deixando as respetivas propriedades sem nenhum valor.
Sugere-se que usem o ficheiro Dockerfile presente no repositório das interfaces, presente no seguinte link: Dockerfile.
Sempre que alteram o vosso trabalho (incluindo o ficheiro trab.props) devem criar
uma nova imagem Docker do vosso trabalho (usando o projeto Maven disponibilizado,
tal consiste em executar: mvn clean compile assembly:single docker:build).
Para executar o Tester, basta executar o seguinte comando, usando o nome da imagem do vosso trabalho (substituir sd2122-tp1-xxxxx-yyyyy pelo nome da vossa imagem):
Linux / MacOS
sh test-sd-tp1.sh -image sd2122-tp1-xxxxx-yyyyy
Windows
test-sd-tp1.bat -image sd2122-tp1-xxxxx-yyyyy
NOTA: há uma secção sobre problemas com a execução deste comando mais tarde neste documento.
O Tester, ao executar, corre uma série de passos, indicando genericamente as verificações que está a efetuar. Caso os testes de cada fase corram corretamente, no fim de cada fase aparece a mensagem OK.
Exemplo de uma execução correta (truncada):

Caso um teste falhe, apresenta informação de qual o erro que ocorreu, indicando o resultado recebido do vosso trabalho e qual o resultado esperado. Adicionalmente, serão apresentadas as menssagens escritas pelo vosso programa para o output.
Exemplo de uma execução com um erro (em que se pode ver que se esperaria o código 403 e se recebeu o código 404 na execução dum DeleteUser):

O Tester possui algumas opções que podem ser especificadas ao corrê-lo, que modificam o seu comportamento.
-test <num> : Permite omitir a execução de alguns testes. Por exemplo, se passarem o valor -test 2b, os testes começarão no teste 2b. Esta opção é útil quando já verificaram que o vosso trabalho funciona corretamente até um dado teste e estão a corrigir erros num teste específico.
-sleep <seconds> : Permite diminuir o tempo de espera entre serem lançadas os containers com o vosso trabalho e iniciar a execução dos testes. Podem ajustar este valor consoante a capacidade do vosso computador e as operações que estejam a fazer na fase de inicialização.
-log OFF|ALL|FINE|FINEST : Permite controlar o nível de mensagens gerado pelo programa. Por exemplo, ao usarem a opção -log FINE, o programa vai indicar todas as operações que está a fazer ao vosso sistema, indicando as mensagens recebidas e as esperadas, como se apresenta na imagem seguinte:

Dicas sobre execução no Windows a adicionar brevemente, no entanto se não conseguirem usar o script fornecido num terminal, podem executar o Tester manualmente com o seguinte conjunto de comandos:
Para criar a rede – a executar uma vez, ou quando a rede sdnet tiver sido removida (por exemplo pelo docker system prune):
docker network create -d bridge sdnet
Para atualizar a imagem – a executar sempre que o Tester for atualizado:
docker pull nunopreguica/sd2122-tester-tp1
Para executar o Tester (notem que podem ter de fazer scroll na linha abaixo):
docker run --rm --network=sdnet -it -v /var/run/docker.sock:/var/run/docker.sock nunopreguica/sd2122-tester-tp1:latest -image sd2122-tp1-xxxxx-yyyyy
Quem tenha problemas a correr o Tester, deve fazer um post no Discord, com a seguinte informação: dump da mensagem de erro, sistema de operação e versão do docker que estão a usar. Caso já exista uma mensagem semelhante, façam reply a essa mensagem.
Os códigos de erro que os vossos servidores devolvem devem estar de acordo com os comentários das respetivas interfaces, disponíveis em: https://github.com/preguica/sd2122-tp-api.
As versões do Tester são incrementais, i.e., a versão N do Tester executará todos os testes das versões anteriores. Nesta secção indicam-se as funcionalidades testadas por cada versão.
Testa as seguintes funcionalidades (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros (REST):
Testa as seguintes funcionalidades com dois servidores de ficheiros (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros e introdução de falhas (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros e execução concorrente (REST):
Testa as seguintes funcionalidades com dois servidores de ficheiros (REST):
Testa as seguintes funcionalidades (SOAP):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros (SOAP):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros e introdução de falhas (REST):
NOTA IMPORTANTE: os testes das falhas, por estarem dependentes de timeouts, podem ter comportamentos incorretos em computadores lentos. Os alunos devem correr o Tester com o parâmetro -timeout nsec configurado para o valor de timeout que estão a usar. O tempo das falhas será uma função deste valor e não função do valor de 10 segundos indicado no enunciado do trabalho.
Testa as seguintes funcionalidades com dois servidores de ficheiros e introdução de falhas (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros e execução concorrente (REST):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros (SOAP):
Testa as seguintes funcionalidades com apenas um servidor de ficheiros e introdução de falhas (SOAP):
Testa as seguintes funcionalidades com dois servidores de ficheiros e introdução de falhas (SOAP):
Testa um mix de operações com servidores REST e SOAP:
O facto dum trabalho passar os testes todos (ou o teste duma funcionalidade) não equivale a que tenha a cotação máxima. Primeiro, devem ter em atenção que os testes apenas estão a testar as funcionalidades indicadas na listagem anterior. Segundo, a avaliação do trabalho terá em conta a qualidade do código.