summaryrefslogtreecommitdiff
path: root/i/simulotron/src/socket/test_socket.cc
diff options
context:
space:
mode:
Diffstat (limited to 'i/simulotron/src/socket/test_socket.cc')
-rw-r--r--i/simulotron/src/socket/test_socket.cc166
1 files changed, 110 insertions, 56 deletions
diff --git a/i/simulotron/src/socket/test_socket.cc b/i/simulotron/src/socket/test_socket.cc
index 67ff638..4a44e6e 100644
--- a/i/simulotron/src/socket/test_socket.cc
+++ b/i/simulotron/src/socket/test_socket.cc
@@ -1,74 +1,128 @@
#include "socket/socket.hh"
#include "socket/address.hh"
+#include "utils/errno_exception.hh"
#include <iostream>
-int main(void)
-{
- Address adr;
- Address adr2;
- // Création de deux socket;
- Socket sockServ(Address(4242));
- Socket sockClient(adr);
-
- // Mise en écoute du socket serveur
- sockServ.listen(12);
+// Adress useful
+Address adr;
+Address adr2;
+//Chaine et char de test
+const std::string strDepart = "J'aime la prog système.";
+std::string strDest;
+const char a = 'f';
+char b;
+//threads
+pthread_t threadId[2];
+void * retour;
+int stateTh[2];
- // Demande de connection
- sockClient.connect(Address(std::string("localhost"), 4242));
- Socket sockFork = sockServ.accept(adr2);
- //TODO if(adr != adr2)
- //{
-// std::cout << "L'adresse du client et l'adresse retourné par le accept sont différentes !!!" << std:endl;
-// return 1;
- // }
+void * testSockServ(void * CaSertARien);
+void * testSockClient(void * CaSertARien);
- // Ecriture du client dans le serveur
- std::string strDepart = "J'aime la prog système.";
- std::string strDest;
-
- sockClient.write(strDepart);
- strDest = sockFork.read();
-
- if(strDepart != strDest)
+int main(void)
+{
+ int ret;
+ ret = pthread_create(& threadId[0], NULL, testSockServ, NULL);
+ if(ret != 0)
{
- std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du client au serveur!!" << std::endl;
- return 1;
+ std::cout << "CHIER: Echec thread serveur" << std::endl;
+ return EXIT_FAILURE;
}
-
- // Ecriture du serveur au client
- sockFork.write(strDepart);
- strDest = sockClient.read();
-
- if(strDepart != strDest)
+ ret = pthread_create(& threadId[1], NULL, testSockClient, NULL);
+ if(ret != 0)
{
- std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du serveur au client!!" << std::endl;
- return 1;
+ std::cout << "CHIER: Echec thread client" << std::endl;
+ return EXIT_FAILURE;
}
+ pthread_join(threadId[0], &retour);
+ stateTh[0] = (int) retour;
+ pthread_join(threadId[1], &retour);
+ stateTh[1] = (int) retour;
+ if(stateTh[0] == 0 && stateTh[1] == 0)
+ return 0;
+ else
+ return 1;
+}
- // Ecriture d'un char du client au serveur
- char a = 'f';
- char b;
-
- sockClient.putChar(a);
- b = sockFork.getChar();
-
- if(a != b)
+void * testSockServ(void * CaSertARien)
+{
+ try
{
- std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du client au serveur!!" << std::endl;
- return 1;
+ // Création de la socket serveur;
+ Socket sockServ(Address(4242));
+ // Mise en écoute du socket serveur
+ sockServ.listen(12);
+ // Acceptation d'une connection
+ Socket sockFork = sockServ.accept(adr2);
+ // Reception d'un message
+ strDest = sockFork.read();
+ 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 (void *) 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 (void *) 1;
+ }
+ // Ecriture du serveur vers le client
+ sockFork.putChar(a);
}
-
- // Ecriture du serveur vers le client
- sockFork.putChar(a);
- b = sockClient.getChar();
-
- if(a != b)
+ catch(errno_exception & chier)
{
- std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du serveur au client!!" << std::endl;
- return 1;
+ std::cout << "CHIER !! Une exception a été lancé coté serveur!!" << std::endl;
+ std::cout << chier.what() << std::endl;
+ return (void *) 1;
}
-
+ return (void *) 0;
+}
- return 0;
+void * testSockClient(void * CaSertARien)
+{
+ try
+ {
+ // Création de la socket client
+ Socket sockClient(adr);
+ // Demande de connection
+ sockClient.connect(Address(std::string("localhost"), 4242));
+ // Ecriture du client dans le serveur
+ sockClient.write(strDepart);
+ // Reception du message serveur
+ strDest = sockClient.read();
+ 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;
+ return (void *) 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;
+ return (void *) 1;
+ }
+ }
+ catch(errno_exception & chier)
+ {
+ std::cout << "CHIER !! Une exception a été lancé coté client!!" << std::endl;
+ std::cout << chier.what() << std::endl;
+ return (void *) 1;
+ }
+ return (void *) 0;
}