summaryrefslogtreecommitdiff
path: root/i/simulotron/src/comc/test_comc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron/src/comc/test_comc.cc')
-rw-r--r--i/simulotron/src/comc/test_comc.cc107
1 files changed, 97 insertions, 10 deletions
diff --git a/i/simulotron/src/comc/test_comc.cc b/i/simulotron/src/comc/test_comc.cc
index 1fe2aa7..7182df1 100644
--- a/i/simulotron/src/comc/test_comc.cc
+++ b/i/simulotron/src/comc/test_comc.cc
@@ -1,7 +1,7 @@
-/* test_comc.cc - Programme de test pour comc */
+/* test_comc.cc - Programme de test du comc. */
/* Simulotron - Programme de simulation de robot {{{
*
- * Copyright (C) 2005 Nicolas Haller
+ * Copyright (C) 2006 Nicolas Haller
*
* Robot APB Team/Efrei 2005.
* Web: http://assos.efrei.fr/robot/
@@ -23,24 +23,111 @@
*
* }}} */
+#include "comc/struct_message.hh"
#include "comc/comc.hh"
+#include "socket/socket_server.hh"
+#include <sys/wait.h>
#include <iostream>
+// message de test
+msg0 ms;
-int
-main (void)
+int testGSServer(SocketServer & sockServ);
+void testGSClient(int pauseMode);
+
+int main(void)
{
- try
+ //pauseMode pour debbuger le fork
+ int pauseMode = 0;
+ int pid;
+ //retour des test
+ int resultClient, resultServer;
+ //Initialisation des valeurs de la struct de test
+ ms.i = 42;
+ ms.d = 23.23;
+ ms.strh = "chier!!!";
+ ms.s = 4;
+ ms.str = "Ho!! Une structure de test, comme c'est amusant!!";
+ ms.l = 3432;
+ // Création de la socket serveur;
+ SocketServer sockServ(std::string(),4242);
+ // Mise en écoute du socket serveur
+ sockServ.listen(12);
+ // On crée le fork du client
+ pid = fork();
+ if (pid == 0) // processus fils
+ testGSClient(pauseMode);
+ else //processus père
+ resultServer = testGSServer(sockServ);
+
+ // On analyse les résultats
+ wait(&resultClient);
+ if (!(WIFEXITED(resultClient) && WEXITSTATUS(resultClient) == 0))
{
- ComC<TuSersARien> ccTSAR("127.0.0.1", 4080, "chier");
- ccTSAR.receive();
+ std::cerr << "ECHEC: Problème coté client" << std::endl;
+ exit (-1);
}
- catch (std::runtime_error & chier)
+ if (resultServer != 0)
{
- std::cout << chier.what() << std::endl;
- exit(1);
+ std::cerr << "ECHEC: Problème coté serveur" << std::endl;
+ exit (-1);
}
return 0;
}
+
+int testGSServer(SocketServer & sockServ)
+{
+ try
+ {
+ std::string source, dest;
+ GSMessage gsm;
+ msg0 mscom;
+ int msgId;
+ // Création de la comc
+ ComC comc(sockServ,"serveur");
+ while(comc.receiveGS(gsm,source,dest, msgId)){}
+ mscom.gsToMsg(gsm);
+ if(!(ms.i == mscom.i &&
+ ms.d == mscom.d &&
+ ms.strh == mscom.strh &&
+ ms.s == mscom.s &&
+ ms.str == mscom.str &&
+ ms.l == mscom.l))
+ {
+ std::cout << "CHIER!! Le message recu n'est pas identique !!" << std::endl;
+ std::cout << "m d'origine: " << ms.i << "\nm d'arrivée: " << mscom.i << "result: " << (ms.i == mscom.i) << std::endl;
+ std::cout << "m d'origine: " << ms.d << "\nm d'arrivée: " << mscom.d << "result: " << (ms.d == mscom.d) << std::endl;
+ std::cout << "m d'origine: " << ms.strh << "\nm d'arrivée: " << mscom.strh << "result: " << (ms.strh == mscom.strh) << std::endl;
+ std::cout << "m d'origine: " << ms.s << "\nm d'arrivée: " << mscom.s << "result: " << (ms.s == mscom.s) << std::endl;
+ std::cout << "m d'origine: " << ms.str << "\nm d'arrivée: " << mscom.str << "result: " << (ms.str == mscom.str) << std::endl;
+ std::cout << "m d'origine: " << ms.l << "\nm d'arrivée: " << mscom.l << "result: " << (ms.l == mscom.l) << std::endl;
+ return 1;
+ }
+ }
+ catch (std::exception & c)
+ {
+ std::cout << "Oops, exeption dans le serveur" << std::endl;
+ }
+ return 0;
+}
+
+void testGSClient(int pauseMode)
+{
+ while(pauseMode)
+ sleep (10);
+ try
+ {
+ // Création du comc
+ ComC comc(std::string("127.0.0.1"), 4242, "client");
+ comc.send(ms, std::string("serveur"));
+ }
+ catch(std::exception & chier)
+ {
+ std::cout << "CHIER !! Une exception a été lancé coté client!!" << std::endl;
+ std::cout << chier.what() << std::endl;
+ exit (1);
+ }
+ exit (0);
+}