Sistemas Distribuidos 21/22

Logo

Início | Contactos | Teóricas | Práticas | Plano de aulas | Discord

Trabalho 1 - Tester

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.

Preparação

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).

Execução dos testes

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):

Imagem de execução correta

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):

Imagem de execução com erro

Outras opções do Tester

O Tester possui algumas opções que podem ser especificadas ao corrê-lo, que modificam o seu comportamento.

Imagen com debug a FINE

Problemas com o script

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.

Códigos de erro

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.

Versões

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.

Versão 1

Testa as seguintes funcionalidades (REST):

Versão 2

Testa as seguintes funcionalidades com apenas um servidor de ficheiros (REST):

Versão 3

Testa as seguintes funcionalidades com apenas um servidor de ficheiros (REST):

Versão 4

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):

Versão 5

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:

Notas finais

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.