simple-socket library 1.2.0
TCPSocket_TEST.cpp
Go to the documentation of this file.
1#include <cppunit/extensions/HelperMacros.h>
2#include "../TCPSocket.h"
3
4#include <cstring>
5
6static const char send_msg[] = "The quick brown fox jumps over the lazy dog";
7static char recv_msg[sizeof(send_msg)];
8static const int len = sizeof(send_msg);
9
10class TCPSocket_TEST : public CppUnit::TestFixture
11{
12 CPPUNIT_TEST_SUITE( TCPSocket_TEST );
13 CPPUNIT_TEST( testSocketHandle );
14 CPPUNIT_TEST( testPeerStatus );
15 CPPUNIT_TEST_SUITE_END();
16
17private:
18 NET::TCPSocket* server_socket;
19 NET::TCPSocket* client_socket;
20
21public:
22 void setUp()
23 {
24 server_socket = new NET::TCPSocket();
25 client_socket = new NET::TCPSocket();
26 }
27
28 void tearDown()
29 {
30 delete server_socket;
31 delete client_socket;
32 }
33
34 void testSocketHandle()
35 {
36 server_socket->bind( "127.0.0.1", 47777);
37 server_socket->listen();
38 client_socket->connect( "127.0.0.1", 47777);
39
40 NET::TCPSocket::Handle tmp_handle;
41 tmp_handle = server_socket->accept();
43 NET::TCPSocket::Handle& ref_handle = handle;
44 handle = ref_handle;
45 CPPUNIT_ASSERT( !handle );
46 CPPUNIT_ASSERT( tmp_handle );
47 handle = tmp_handle;
48 CPPUNIT_ASSERT( handle );
49 CPPUNIT_ASSERT( !tmp_handle );
50 NET::TCPSocket session_socket(handle);
51 CPPUNIT_ASSERT( !handle );
52 CPPUNIT_ASSERT_THROW( NET::TCPSocket bad_socket(handle), NET::SocketException );
53 client_socket->disconnect();
54 }
55
56 void testPeerStatus()
57 {
58 int ret;
59 server_socket->bind( "127.0.0.1", 47777);
60 server_socket->listen();
61 CPPUNIT_ASSERT( !server_socket->peerDisconnected() );
62
63 client_socket->connect( "127.0.0.1", 47777);
64 NET::TCPSocket::Handle handle = server_socket->accept();
65 CPPUNIT_ASSERT( handle );
66 NET::TCPSocket session_socket(handle);
67 CPPUNIT_ASSERT( !handle );
68
69 session_socket.send( send_msg, len);
70 ret = client_socket->receive( recv_msg, len);
71 CPPUNIT_ASSERT_EQUAL( len, ret );
72 CPPUNIT_ASSERT( !session_socket.peerDisconnected() );
73 CPPUNIT_ASSERT( std::memcmp( send_msg, recv_msg, len) == 0 );
74
75 client_socket->disconnect();
76 ret = session_socket.send( send_msg, len);
77 CPPUNIT_ASSERT_EQUAL( -1, ret );
78 CPPUNIT_ASSERT( session_socket.peerDisconnected() );
79 }
80};
81
CPPUNIT_TEST_SUITE_REGISTRATION(TCPSocket_TEST)
static NET::can_frame recv_msg
static NET::can_frame send_msg
static const int len
void bind(unsigned short localPort=0)
void connect(std::string_view foreignAddress, unsigned short foreignPort)
establish a connection with the given foreign address and port
Signals a problem with the execution of a socket call.
void disconnect()
Disconnect and unset any foreign addresses.
int send(const void *buffer, size_t len)
send data through a connected socket
bool peerDisconnected() const
returns whether a peer disconnected
int receive(void *buffer, size_t len)
receive data from a bound socket
TCP socket class.
Definition TCPSocket.h:11
SocketHandle< TCPSocket > Handle
Handle for a new socket returned by accept.
Definition TCPSocket.h:14
void listen(int backlog=5)
listen for incoming connections
Definition TCPSocket.cpp:31
Handle accept() const
wait for another socket to connect
Definition TCPSocket.cpp:38