1+ /*
2+ ** EPITECH PROJECT, 2022
3+ ** TcpToUdp.cpp
4+ ** File description:
5+ ** TcpToUdp.cpp
6+ */
7+
8+ #include < gtest/gtest.h>
9+ #include " Polymorph/Network/tcp/Server.hpp"
10+ #include " Polymorph/Network/tcp/Client.hpp"
11+ #include " ../utils.hpp"
12+ #include " Polymorph/Network/dto/SessionTransferRequestDto.hpp"
13+ #include " Polymorph/Network/dto/SessionTransferResponseDto.hpp"
14+ #include " Polymorph/Network/udp/Server.hpp"
15+ #include " Polymorph/Network/udp/Client.hpp"
16+
17+ TEST (sessionTransferE2E, UdpToTcp)
18+ {
19+ using namespace polymorph ::network;
20+
21+ // checks
22+ SessionTransferRequestDto request;
23+ std::atomic<bool > authKeyReceived (false );
24+ AuthorizationKey authKey;
25+
26+ // Server Setup
27+ std::map<OpId, bool > safeties;
28+ SessionStore serverStore;
29+ udp::Server udpServer (4242 , safeties, serverStore);
30+ auto serverConnector = std::make_shared<udp::Connector>(udpServer);
31+ udpServer.setConnector (serverConnector);
32+ serverConnector->start ();
33+
34+ // Client Setup
35+ udp::Client udpClient (" 127.0.0.1" , 4242 , safeties);
36+ auto clientConnector = std::make_shared<udp::Connector>(udpClient);
37+ udpClient.setConnector (clientConnector);
38+ clientConnector->start ();
39+
40+ // Client Infos
41+ bool udpConnected = false ;
42+ SessionId id;
43+
44+ udpClient.connect ([&udpConnected, &id](bool authorized, SessionId sId ) {
45+ udpConnected = authorized;
46+ id = sId ;
47+ });
48+
49+ PNL_WAIT_COND_LOOP (!udpConnected, PNL_TIME_OUT, 5 )
50+ ASSERT_TRUE (udpConnected);
51+
52+ udpClient.registerReceiveHandler <SessionTransferResponseDto>(SessionTransferResponseDto::opId, [&authKey, &authKeyReceived](const PacketHeader &, const SessionTransferResponseDto &response) {
53+ authKey = response.authKey ;
54+ authKeyReceived = true ;
55+ });
56+ udpClient.send (SessionTransferRequestDto::opId, request);
57+
58+ PNL_WAIT (PNL_TIME_OUT)
59+ ASSERT_TRUE (authKeyReceived);
60+
61+
62+ // Server Setup
63+ tcp::Server tcpServer (4242 , serverStore);
64+ tcpServer.start ();
65+
66+ // Client Setup
67+ tcp::Client tcpClient (" 127.0.0.1" , 4242 );
68+
69+ bool tcpConnected = false ;
70+
71+
72+ tcpClient.connectWithSession (id, authKey, [&tcpConnected](bool authorized, SessionId sId ) {
73+ tcpConnected = true ;
74+ });
75+
76+ PNL_WAIT (PNL_TIME_OUT)
77+ ASSERT_TRUE (tcpConnected);
78+ }
0 commit comments