From 8f486613be58ced269db1d437e560c16558604e8 Mon Sep 17 00:00:00 2001 From: becquet Date: Thu, 10 May 2007 18:49:20 +0000 Subject: Création de chuck, le programme du robot 2007. --- i/chuck/src/socket/test_socket.cc | 156 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 i/chuck/src/socket/test_socket.cc (limited to 'i/chuck/src/socket/test_socket.cc') diff --git a/i/chuck/src/socket/test_socket.cc b/i/chuck/src/socket/test_socket.cc new file mode 100644 index 0000000..81b39a0 --- /dev/null +++ b/i/chuck/src/socket/test_socket.cc @@ -0,0 +1,156 @@ +/* test_socket.cc - Programme de test des sockets. */ +/* Simulotron - Programme de simulation de robot {{{ + * + * Copyright (C) 2005 Nicolas Haller + * + * Robot APB Team/Efrei 2005. + * Web: http://assos.efrei.fr/robot/ + * Email: robot AT efrei DOT fr + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "socket_server.hh" +#include "socket_client.hh" +#include "utils/errno_exception.hh" + +#include +#include +#include + +//Chaine et char de test +const std::string strDepart = "J'aime la prog système."; +std::string strDest; +const char a = 'f'; +char b; + +int testSockServ(SocketServer & sockServ); +int testSockClient(int pauseMode); + +int main(void) +{ + pid_t pid; + int resultServer = 0, resultClient; + // Pause mode pour débugger le fork + int pauseMode = 0; + + // Création de la socket serveur; + SocketServer sockServ("",4242); + // Mise en écoute du socket serveur + sockServ.listen(12); + + // on fork pour traiter le client et le serveur + pid = fork(); + if(pid == 0) //Processus fils + testSockClient(pauseMode); + else //Processus parent + resultServer = testSockServ(sockServ); + + // On analyse les résultats + wait(&resultClient); + if (!(WIFEXITED(resultClient) && WEXITSTATUS(resultClient) == 0)) + { + std::cerr << "ECHEC: Problème coté client" << std::endl; + exit (-1); + } + if (resultServer != 0) + { + std::cerr << "ECHEC: Problème coté serveur" << std::endl; + exit (-1); + } + + return 0; +} + +int testSockServ(SocketServer & sockServ) +{ + try + { + // Acceptation d'une connection + SocketClient sockFork(sockServ); + // Reception d'un message + sockFork.read(strDest, true); + if(strDepart != strDest) + { + std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du client au serveur!!" << std::endl; + std::cout << "Le message d'origine: " << strDepart << std::endl; + std::cout << "Message reçu: " << std::endl; + return 1; + } + // Ecriture du serveur au client + sockFork.write(strDepart); + // Reception d'un char + //b = sockFork.getChar(); + //if(a != b) + //{ + // std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du client au serveur!!" << std::endl; + // std::cout << "Le char d'origine: " << a << std::endl; + // std::cout << "Le char d'arrivé: " << b << std::endl; + // return 1; + //} + // Ecriture du serveur vers le client + //sockFork.putChar(a); + } + catch(errno_exception & chier) + { + std::cout << "CHIER !! Une exception a été lancé coté serveur!!" << std::endl; + std::cout << chier.what() << std::endl; + return 1; + } + return 0; +} + +int testSockClient(int pauseMode) +{ + // Chance pour debbuger le fork + while(pauseMode) + sleep(10); + try + { + // Création de la socket client + SocketClient sockClient; + // Demande de connection + sockClient.connect(std::string("127.0.0.1"), 4242); + // Ecriture du client dans le serveur + sockClient.write(strDepart); + // Reception du message serveur + sockClient.read(strDest, true); + if(strDepart != strDest) + { + std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du serveur au client!!" << std::endl; + std::cout << "Le message d'origine: " << strDepart << std::endl; + std::cout << "Message reçu: " << std::endl; + exit (1); + } + // Ecriture d'un char du client au serveur + //sockClient.putChar(a); + // Reception d'un char + //b = sockClient.getChar(); + //if(a != b) + //{ + // std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du serveur au client!!" << std::endl; + // std::cout << "Le char d'origine: " << a << std::endl; + // std::cout << "Le char d'arrivé: " << b << std::endl; + // exit (1); + //} + } + catch(errno_exception & chier) + { + std::cout << "CHIER !! Une exception a été lancé coté client!!" << std::endl; + std::cout << chier.what() << std::endl; + exit (1); + } + exit (0); +} -- cgit v1.2.3