Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

Client-Serveur IRC

Le but du projet cette anne est la ralisation d’un serveur IRC.

Le projet est raliser en binme. Les binmes devront tre annoncs l’enseignant charg de TD lors de la sance de TD de la semaine 10

A propos des tests

Q Pourriez vous m’expliquer ce que vous attendez de nous pour ces parties, s’il vous plait ? Parlez vous bien de tests unitaires ?

R: Les test unitaire consistent a tester les fonctions qui composent votre programme independamment les unes des autres. Vous pouvez en ecrire cest toujours bien.

Mais ce que jattends ce sont plutot des tests dintegration qui consistent a verifier que votre programme fonctionne correctement en simulant les interactions dun utilisateur sur des cas dutilisation simples.

Par exemple pour simuler quun utilisateur se connecte au serveur qui tourne sur le port 50000 de la machine localhost et lui envoie la chaine toto on peut utiliser la commande suivante:

   echo toto | nc localhost 50000

Dans ce cas si la reponse attendue du serveur est Connection de toto , le test scrit de la facon suivante:

# lancer le serveur sur port 50000
python serveur.py 50000
# connecter pseudo client au serveur et envoyer toto
echo "toto" | nc localhost 50000 > result
# mettre le resultat attendu dans le fichier expected
echo "Connection de toto\n" > expected
# comparer le resultat obtenu et le resultat attendu
diff result expected
# si aucune difference, le test est russi
if [[ $? -eq 0 ]]
then
echo test toto: russi
else
echo test toto: chec
fi
# retrouver pid du serveur
pid=$(ps aux | grep serveur.py' | awk '{print $2})
# tuer le serveur
kill $pid

1. Contrat minimal (10 points)

Pour avoir la moyenne, vous devrez fournir le code d’un serveur et d’un client crit en python. Votre code doit tre original et n’utiliser que les primitives que nous avons vues en cours.

1.1 Client

Le client doit accepter trois arguments sur la ligne de commande:

  • le nom (ou l’ip) du serveur
  • le numero de port sur lequel se connecter au serveur
  • l’identifiant de l’utilisateur

Exemple:

   $ client nil.unice.fr 4200 olivier

Le client minimal doit se connecter au serveur, lui transmettre l’identifiant et se mettre en attente des vnements suivants:

  • Saisie de l’utilisateur au clavier: le texte saisi est envoy au serveur
  • Reception d’un message du serveur: le message est affich sur la sortie standard
  • Terminaison par Ctrl-C ou Ctrl-D

1.2 Serveur

Le serveur accepte seulement un argument sur la ligne de commande: le numero de port sur lequel il reoit les connections du client:

   $ server 4200

Une fois qu’il a dmarr, le serveur minimal se met en attente des vnements suivants:

  • rception d’une demande de connexion: le serveur accepte la connexion et ajoute le socket du client a sa liste des clients connects
  • rception d’un message d’un client: le serveur reoit le message puis le renvoie tous les clients connects
  • Dconnexion d’un client: retrait du socket de la liste des clients connects

Lorsqu’il retourne les messages vers les clients, le serveur doit ajouter l’identifiant de l’utilisateur du client au debut de chaque ligne de message.

Par exemple, si deux clients, grosso et modo sont connects, et que grosso envoie le message hello, on voit s’afficher la ligne suivante sur la sortie standard du client:

  $ client nil.unice.fr 4200 grosso
  hello
  grosso: hello


  $ client nil.unice.fr 4200 modo
  grosso: hello

1.3 Tests

Les tests sont trs importants. Ils vous permettent de vrifier que toutes les fonctionnalits de votre systmes sont implmentes sans erreur.

Les commandes telnet et nc (netcat) vous seront trs utiles pour simuler l’une ou l’autre des parties:

  • pour simuler le serveur quand vous souhaitez tester le client
  • pour simuler le client quand vous souhaitez tester le serveur

Telnet s’utilise essentiellement de faon interactive, mais netcat permet aussi un fonctionnement en mode batch, qui est parfait pour crire un script.

La commande xterm peut tre lances de faon excuter une commande de faon automatique l’aide de l’option -e.

Par exemple la commande suivante ouvre un xterm et lui fait excuter la commande cat /etc/passwd > /tmp/toto. Losrque la commande est termine, le xterm se ferme automatiquement.

Vous pouvez donc utiliser cette commande pour lancer automatiquement un plusieurs client, chacun dans un xterm diffrent. Vous pouvez aussi lancer des scripts qui excutent plusieurs commandes (par exemple netcat) dans un xterm, sans avoir a retaper chaque fois les mme commandes.

2 Bonus

2.1 Bonus Tests (4 points)

Ecrivez des scripts qui testent de facon automatique le bon fonctionnement de chacune des fonctions du client et du serveur. Vos tests doivent couvrir un maximum de situations diffrentes: arrives conscutives de clients, dparts de clients, etc. Pour chaque test vous devrez produire une sortie qui affiche le nom du test et un message indiquant si le test est russi.

Par exemple:

  • test des paramtres du client: ok
  • test de connection et envoi d’un message par un client: ok
  • test de l’envoi d’un message avec 3 clients connects: ok
  • test de trois connections simultanes au serveur: ok
  • test de trois rceptions simulatanes depuis 3 clients diffrents: ok
  • test de deconnection d’un client: ok

2.2 Bonus Interface Web (5 points)

Le serveur accepte un deuxime numro de port en paramtre. Ce numro de port fourni un service de mini serveur web, qui renvoie un page html contenant une liste des 5 derniers messages reus (et renvoys) par le serveur.

Le contenu de cette page est minimal: chaque message sera prsent sous la forme d’un item (li) dans une liste.

2.3 Tests sur le bonus 2.2 (2 points)