annotate C++/tests/Socket/main.cpp @ 469:bcfb05fa961c

Socket: - Add new option system in namespace option, - Do not throw on invalid Ip/Local constructs with storage.
author David Demelier <markand@malikania.fr>
date Thu, 05 Nov 2015 08:58:12 +0100
parents 41766abe942e
children 35729a52fda5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
1 /*
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
2 * main.cpp -- test sockets
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
3 *
403
d5ec1174b707 Massive cleanup
David Demelier <markand@malikania.fr>
parents: 390
diff changeset
4 * Copyright (c) 2013-2015 David Demelier <markand@malikania.fr>
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
5 *
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
8 * copyright notice and this permission notice appear in all copies.
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
9 *
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
17 */
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
18
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <chrono>
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
20 #include <iostream>
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <sstream>
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string>
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <thread>
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <gtest/gtest.h>
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
27 #include <Sockets.h>
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
28
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
29 using namespace net;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
30 using namespace std::literals::chrono_literals;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
31
469
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
32 /*
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
33 * Options
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
34 * ------------------------------------------------------------------
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
35 */
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
36
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
37 TEST(Options, reuse)
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
38 {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
39 SocketTcpIp s;
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
40
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
41 try {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
42 s.set(option::ReuseAddress{true});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
43 ASSERT_TRUE(s.get<option::ReuseAddress>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
44
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
45 s.set(option::ReuseAddress{false});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
46 ASSERT_FALSE(s.get<option::ReuseAddress>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
47 } catch (const std::exception &ex) {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
48 FAIL() << ex.what();
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
49 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
50 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
51
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
52 TEST(Options, nodelay)
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
53 {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
54 SocketTcpIp s;
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
55
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
56 try {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
57 s.set(option::TcpNoDelay{true});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
58 ASSERT_TRUE(s.get<option::TcpNoDelay>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
59
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
60 s.set(option::TcpNoDelay{false});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
61 ASSERT_FALSE(s.get<option::TcpNoDelay>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
62 } catch (const std::exception &ex) {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
63 FAIL() << ex.what();
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
64 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
65 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
66
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
67 TEST(Options, v6only)
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
68 {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
69 SocketTcpIp s;
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
70
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
71 try {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
72 s.set(option::Ipv6Only{true});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
73 ASSERT_TRUE(s.get<option::Ipv6Only>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
74
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
75 s.set(option::Ipv6Only{false});
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
76 ASSERT_FALSE(s.get<option::Ipv6Only>());
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
77 } catch (const std::exception &ex) {
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
78 FAIL() << ex.what();
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
79 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
80 }
bcfb05fa961c Socket:
David Demelier <markand@malikania.fr>
parents: 467
diff changeset
81
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
82 /* --------------------------------------------------------
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
83 * TCP tests
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
84 * -------------------------------------------------------- */
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
85
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
86 class TcpServerTest : public testing::Test {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
87 protected:
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
88 SocketTcp<Ipv4> m_server;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
89 SocketTcp<Ipv4> m_client;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
90
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
91 std::thread m_tserver;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
92 std::thread m_tclient;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
93
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
94 public:
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
95 TcpServerTest()
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
96 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
97 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
98 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
99
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
100 ~TcpServerTest()
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
101 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
102 if (m_tserver.joinable())
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
103 m_tserver.join();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
104 if (m_tclient.joinable())
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
105 m_tclient.join();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
106 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
107 };
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
108
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
109 TEST_F(TcpServerTest, connect)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
110 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
111 m_tserver = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
112 m_server.bind(Ipv4{"*", 16000});
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
113 m_server.listen();
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
114 m_server.accept(nullptr);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
115 m_server.close();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
116 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
117
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
118 std::this_thread::sleep_for(100ms);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
119
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
120 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
121 m_client.connect(Ipv4{"127.0.0.1", 16000});
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
122 m_client.close();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
123 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
124 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
125
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
126 TEST_F(TcpServerTest, io)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
127 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
128 m_tserver = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
129 m_server.bind(Ipv4{"*", 16000});
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
130 m_server.listen();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
131
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
132 auto client = m_server.accept(nullptr);
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
133 auto msg = client.recv(512);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
134
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
135 ASSERT_EQ("hello world", msg);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
136
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
137 client.send(msg);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
138 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
139
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
140 std::this_thread::sleep_for(100ms);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
141
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
142 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
143 m_client.connect(Ipv4{"127.0.0.1", 16000});
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
144 m_client.send("hello world");
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
145
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
146 ASSERT_EQ("hello world", m_client.recv(512));
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
147 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
148 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
149
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
150 /* --------------------------------------------------------
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
151 * UDP tests
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
152 * -------------------------------------------------------- */
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
153
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
154 #if 0
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
155
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
156 class UdpServerTest : public testing::Test {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
157 protected:
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
158 SocketUdp<Ipv4> m_server;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
159 SocketUdp<Ipv4> m_client;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
160
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
161 std::thread m_tserver;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
162 std::thread m_tclient;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
163
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
164 public:
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
165 UdpServerTest()
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
166 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
167 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
168 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
169
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
170 ~UdpServerTest()
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
171 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
172 if (m_tserver.joinable())
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
173 m_tserver.join();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
174 if (m_tclient.joinable())
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
175 m_tclient.join();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
176 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
177 };
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
178
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
179 TEST_F(UdpServerTest, io)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
180 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
181 m_tserver = std::thread([this] () {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
182 Ipv4 client;
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
183 Ipv4 info{"*", 16000};
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
184
380
06b0f405c58f Socket: initial support for object-oriented addresses
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
185 m_server.bind(info);
446
8396fd66e57a Socket: use non-owning pointer for optional addresses
David Demelier <markand@malikania.fr>
parents: 437
diff changeset
186 auto msg = m_server.recvfrom(512, &client);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
187
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
188 ASSERT_EQ("hello world", msg);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
189
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
190 m_server.sendto(msg, client);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
191 m_server.close();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
192 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
193
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
194 std::this_thread::sleep_for(100ms);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
195
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
196 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
197 Ipv4 info{"127.0.0.1", 16000};
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
198
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
199 m_client.sendto("hello world", info);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
200
446
8396fd66e57a Socket: use non-owning pointer for optional addresses
David Demelier <markand@malikania.fr>
parents: 437
diff changeset
201 ASSERT_EQ("hello world", m_client.recvfrom(512, &info));
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
202
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
203 m_client.close();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
204 });
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
205 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
206
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
207 #endif
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
208
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
209 /* --------------------------------------------------------
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
210 * Listener: set function
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
211 * -------------------------------------------------------- */
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
212
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
213 class TestBackendSet {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
214 public:
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
215 int m_callcount{0};
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
216 bool m_added{false};
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
217 Condition m_flags{Condition::None};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
218
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
219 inline void set(const ListenerTable &, Handle, Condition flags, bool add) noexcept
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
220 {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
221 m_callcount ++;
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
222 m_added = add;
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
223 m_flags |= flags;
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
224 }
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
225
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
226 inline void unset(const ListenerTable &, Handle, Condition, bool) noexcept
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
227 {
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
228 }
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
229
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
230 std::vector<ListenerStatus> wait(const ListenerTable &, int)
386
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
231 {
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
232 return {};
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
233 }
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
234 };
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
235
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
236 class TestBackendSetFail {
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
237 public:
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
238 inline void set(const ListenerTable &, Handle, Condition, bool)
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
239 {
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
240 throw "fail";
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
241 }
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
242
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
243 inline void unset(const ListenerTable &, Handle, Condition, bool) noexcept
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
244 {
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
245 }
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
246
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
247 std::vector<ListenerStatus> wait(const ListenerTable &, int)
386
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
248 {
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
249 return {};
743b3a1c71c8 Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents: 383
diff changeset
250 }
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
251 };
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
252
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
253 TEST(ListenerSet, initialAdd)
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
254 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
255 Listener<TestBackendSet> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
256 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
257
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
258 listener.set(s, Condition::Readable);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
259
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
260 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
261 ASSERT_EQ(1, listener.backend().m_callcount);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
262 ASSERT_TRUE(listener.backend().m_added);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
263 ASSERT_TRUE(listener.backend().m_flags == Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
264 }
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
265
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
266 TEST(ListenerSet, readThenWrite)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
267 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
268 Listener<TestBackendSet> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
269 Handle s{0};
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
270
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
271 listener.set(s, Condition::Readable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
272 listener.set(s, Condition::Writable);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
273
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
274 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
275 ASSERT_EQ(2, listener.backend().m_callcount);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
276 ASSERT_FALSE(listener.backend().m_added);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
277 ASSERT_TRUE(static_cast<int>(listener.backend().m_flags) == 0x3);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
278 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
279
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
280 TEST(ListenerSet, allOneShot)
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
281 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
282 Listener<TestBackendSet> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
283 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
284
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
285 listener.set(s, Condition::Readable | Condition::Writable);
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
286
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
287 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
288 ASSERT_EQ(1, listener.backend().m_callcount);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
289 ASSERT_TRUE(listener.backend().m_added);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
290 ASSERT_TRUE(static_cast<int>(listener.backend().m_flags) == 0x3);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
291 }
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
292
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
293 TEST(ListenerSet, readTwice)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
294 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
295 Listener<TestBackendSet> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
296 Handle s{0};
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
297
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
298 listener.set(s, Condition::Readable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
299 listener.set(s, Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
300
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
301 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
302 ASSERT_EQ(1, listener.backend().m_callcount);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
303 ASSERT_TRUE(listener.backend().m_added);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
304 ASSERT_TRUE(listener.backend().m_flags == Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
305 }
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
306
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
307 TEST(ListenerSet, failure)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
308 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
309 Listener<TestBackendSetFail> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
310 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
311
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
312 try {
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
313 listener.set(s, Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
314 FAIL() << "exception expected";
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
315 } catch (...) {
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
316 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
317
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
318 ASSERT_EQ(0U, listener.size());
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
319 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
320
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
321 /* --------------------------------------------------------
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
322 * Listener: unset / remove functions
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
323 * -------------------------------------------------------- */
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
324
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
325 class TestBackendUnset {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
326 public:
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
327 bool m_isset{false};
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
328 bool m_isunset{false};
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
329 Condition m_flags{Condition::None};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
330 bool m_removal{false};
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
331
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
332 inline void set(const ListenerTable &, Handle &, Condition flags, bool) noexcept
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
333 {
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
334 m_isset = true;
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
335 m_flags |= flags;
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
336 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
337
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
338 inline void unset(const ListenerTable &, Handle &, Condition flags, bool remove) noexcept
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
339 {
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
340 m_isunset = true;
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
341 m_flags &= ~(flags);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
342 m_removal = remove;
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
343 }
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
344
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
345 std::vector<ListenerStatus> wait(const ListenerTable &, int) noexcept
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
346 {
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
347 return {};
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
348 }
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
349 };
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
350
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
351 class TestBackendUnsetFail {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
352 public:
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
353 inline void set(const ListenerTable &, Handle &, Condition, bool) noexcept
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
354 {
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
355 }
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
356
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
357 inline void unset(const ListenerTable &, Handle &, Condition, bool)
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
358 {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
359 throw "fail";
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
360 }
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
361
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
362 std::vector<ListenerStatus> wait(const ListenerTable &, int)
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
363 {
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
364 return {};
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
365 }
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
366 };
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
367
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
368 TEST(ListenerUnsetRemove, unset)
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
369 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
370 Listener<TestBackendUnset> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
371 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
372
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
373 listener.set(s, Condition::Readable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
374 listener.unset(s, Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
375
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
376 ASSERT_EQ(0U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
377 ASSERT_TRUE(listener.backend().m_isset);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
378 ASSERT_TRUE(listener.backend().m_isunset);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
379 ASSERT_TRUE(listener.backend().m_flags == Condition::None);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
380 ASSERT_TRUE(listener.backend().m_removal);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
381 }
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
382
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
383 TEST(ListenerUnsetRemove, unsetOne)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
384 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
385 Listener<TestBackendUnset> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
386 Handle s{0};
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
387
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
388 listener.set(s, Condition::Readable | Condition::Writable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
389 listener.unset(s, Condition::Readable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
390
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
391 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
392 ASSERT_TRUE(listener.backend().m_isset);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
393 ASSERT_TRUE(listener.backend().m_isunset);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
394 ASSERT_TRUE(listener.backend().m_flags == Condition::Writable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
395 ASSERT_FALSE(listener.backend().m_removal);
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
396 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
397
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
398 TEST(ListenerUnsetRemove, unsetAll)
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
399 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
400 Listener<TestBackendUnset> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
401 Handle s{0};
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
402
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
403 listener.set(s, Condition::Readable | Condition::Writable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
404 listener.unset(s, Condition::Readable);
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
405 listener.unset(s, Condition::Writable);
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
406
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
407 ASSERT_EQ(0U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
408 ASSERT_TRUE(listener.backend().m_isset);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
409 ASSERT_TRUE(listener.backend().m_isunset);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
410 ASSERT_TRUE(listener.backend().m_flags == Condition::None);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
411 ASSERT_TRUE(listener.backend().m_removal);
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
412 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
413
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
414 TEST(ListenerUnsetRemove, remove)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
415 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
416 Listener<TestBackendUnset> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
417 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
418
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
419 listener.set(s, Condition::Readable | Condition::Writable);
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
420 listener.remove(s);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
421
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
422 ASSERT_EQ(0U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
423 ASSERT_TRUE(listener.backend().m_isset);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
424 ASSERT_TRUE(listener.backend().m_isunset);
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
425 ASSERT_TRUE(listener.backend().m_flags == Condition::None);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
426 ASSERT_TRUE(listener.backend().m_removal);
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
427 }
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
428
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
429 TEST(ListenerUnsetRemove, failure)
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
430 {
435
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
431 Listener<TestBackendUnsetFail> listener;
b9c8b1792889 Sockets: put back Listener
David Demelier <markand@malikania.fr>
parents: 403
diff changeset
432 Handle s{0};
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
433
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
434 listener.set(s, Condition::Readable | Condition::Writable);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
435
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
436 try {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
437 listener.remove(s);
368
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
438 FAIL() << "exception expected";
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
439 } catch (...) {
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
440 }
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
441
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
442 /* If fail, kept into the table */
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
443 ASSERT_EQ(1U, listener.size());
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
444 }
6c0015524ca9 Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents: 350
diff changeset
445
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
446 /* --------------------------------------------------------
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
447 * Listener: system
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
448 * -------------------------------------------------------- */
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
449
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
450 class ListenerTest : public testing::Test {
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
451 protected:
437
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
452 Listener<Select> m_listener;
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
453 SocketTcp<Ipv4> m_masterTcp;
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
454 SocketTcp<Ipv4> m_clientTcp;
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
455
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
456 std::thread m_tserver;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
457 std::thread m_tclient;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
458
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
459 public:
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
460 ListenerTest()
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
461 {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
462 m_masterTcp.set(SOL_SOCKET, SO_REUSEADDR, 1);
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
463 m_masterTcp.bind(Ipv4{"*", 16000});
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
464 m_masterTcp.listen();
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
465 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
466
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
467 ~ListenerTest()
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
468 {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
469 if (m_tserver.joinable()) {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
470 m_tserver.join();
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
471 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
472 if (m_tclient.joinable()) {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
473 m_tclient.join();
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
474 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
475 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
476 };
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
477
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
478 TEST_F(ListenerTest, accept)
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
479 {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
480 m_tserver = std::thread([this] () {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
481 try {
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
482 m_listener.set(m_masterTcp.handle(), Condition::Readable);
346
d235553e47a9 Socket:
David Demelier <markand@malikania.fr>
parents: 334
diff changeset
483 m_listener.wait();
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
484 m_masterTcp.accept(nullptr);
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
485 m_masterTcp.close();
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
486 } catch (const std::exception &ex) {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
487 FAIL() << ex.what();
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
488 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
489 });
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
490
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
491 std::this_thread::sleep_for(100ms);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
492
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
493 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
494 m_clientTcp.connect(Ipv4{"127.0.0.1", 16000});
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
495 });
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
496 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
497
369
f3c762579073 Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents: 368
diff changeset
498 TEST_F(ListenerTest, recv)
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
499 {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
500 m_tserver = std::thread([this] () {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
501 try {
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
502 m_listener.set(m_masterTcp.handle(), Condition::Readable);
346
d235553e47a9 Socket:
David Demelier <markand@malikania.fr>
parents: 334
diff changeset
503 m_listener.wait();
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
504
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
505 auto sc = m_masterTcp.accept(nullptr);
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
506
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
507 ASSERT_EQ("hello", sc.recv(512));
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
508 } catch (const std::exception &ex) {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
509 FAIL() << ex.what();
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
510 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
511 });
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
512
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
513 std::this_thread::sleep_for(100ms);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
514
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
515 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
516 m_clientTcp.connect(Ipv4{"127.0.0.1", 16000});
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
517 m_clientTcp.send("hello");
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
518 });
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
519 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
520
350
5a1ec6603230 Socket: add new kqueue backend
David Demelier <markand@malikania.fr>
parents: 347
diff changeset
521 /* --------------------------------------------------------
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
522 * Non-blocking connect
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
523 * -------------------------------------------------------- */
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
524
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
525 class NonBlockingConnectTest : public testing::Test {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
526 protected:
437
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
527 SocketTcp<Ipv4> m_server;
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
528 SocketTcp<Ipv4> m_client;
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
529
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
530 std::thread m_tserver;
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
531 std::thread m_tclient;
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
532
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
533 public:
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
534 NonBlockingConnectTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
535 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
536 m_client.setBlockMode(false);
275
d945fa44f601 Socket: update tests
David Demelier <markand@malikania.fr>
parents: 270
diff changeset
537 }
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
538
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
539 ~NonBlockingConnectTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
540 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
541 if (m_tserver.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
542 m_tserver.join();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
543 if (m_tclient.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
544 m_tclient.join();
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
545 }
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
546 };
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
547
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
548 /* --------------------------------------------------------
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
549 * TCP accept
270
46ccfbee84d9 Socket:
David Demelier <markand@malikania.fr>
parents: 260
diff changeset
550 * -------------------------------------------------------- */
46ccfbee84d9 Socket:
David Demelier <markand@malikania.fr>
parents: 260
diff changeset
551
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
552 class TcpAcceptTest : public testing::Test {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
553 protected:
437
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
554 SocketTcp<Ipv4> m_server;
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
555 SocketTcp<Ipv4> m_client;
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
556
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
557 std::thread m_tserver;
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
558 std::thread m_tclient;
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
559
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
560 public:
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
561 TcpAcceptTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
562 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
563 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1);
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
564 m_server.bind(Ipv4{"*", 16000});
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
565 m_server.listen();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
566 }
270
46ccfbee84d9 Socket:
David Demelier <markand@malikania.fr>
parents: 260
diff changeset
567
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
568 ~TcpAcceptTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
569 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
570 if (m_tserver.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
571 m_tserver.join();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
572 if (m_tclient.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
573 m_tclient.join();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
574 }
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
575 };
270
46ccfbee84d9 Socket:
David Demelier <markand@malikania.fr>
parents: 260
diff changeset
576
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
577 /* --------------------------------------------------------
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
578 * TCP recv
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
579 * -------------------------------------------------------- */
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
580
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
581 class TcpRecvTest : public testing::Test {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
582 protected:
437
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
583 SocketTcp<Ipv4> m_server;
378699c81257 Socket: massive cleanup, documentation
David Demelier <markand@malikania.fr>
parents: 435
diff changeset
584 SocketTcp<Ipv4> m_client;
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
585
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
586 std::thread m_tserver;
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
587 std::thread m_tclient;
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
588
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
589 public:
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
590 TcpRecvTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
591 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
592 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1);
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
593 m_server.bind(Ipv4{"*", 16000});
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
594 m_server.listen();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
595 }
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
596
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
597 ~TcpRecvTest()
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
598 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
599 if (m_tserver.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
600 m_tserver.join();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
601 if (m_tclient.joinable())
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
602 m_tclient.join();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
603 }
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
604 };
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
605
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
606 TEST_F(TcpRecvTest, blockingSuccess)
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
607 {
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
608 m_tserver = std::thread([this] () {
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
609 auto client = m_server.accept(nullptr);
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
610
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
611 ASSERT_EQ("hello", client.recv(32));
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
612 });
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
613
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
614 std::this_thread::sleep_for(100ms);
276
05f0a3e09cbf Socket:
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
615
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
616 m_tclient = std::thread([this] () {
381
9fd636045546 Socket:
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
617 m_client.connect(Ipv4{"127.0.0.1", 16000});
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
618 m_client.send("hello");
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
619 m_client.close();
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
620 });
297
836903141476 Socket: provide experimental SSL support
David Demelier <markand@malikania.fr>
parents: 293
diff changeset
621 }
836903141476 Socket: provide experimental SSL support
David Demelier <markand@malikania.fr>
parents: 293
diff changeset
622
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
623 /* --------------------------------------------------------
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
624 * Socket SSL
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
625 * -------------------------------------------------------- */
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
626
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
627 class TlsRecvTest : public testing::Test {
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
628 protected:
467
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
629 SocketTls<Ipv4> m_server{nullptr};
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
630 SocketTls<Ipv4> m_client;
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
631
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
632 std::thread m_tserver;
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
633 std::thread m_tclient;
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
634
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
635 public:
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
636 TlsRecvTest()
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
637 {
467
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
638 Tls protocol;
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
639
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
640 protocol.setCertificate("Socket/test.crt");
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
641 protocol.setPrivateKey("Socket/test.key");
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
642 protocol.setVerify(false);
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
643
41766abe942e Socket:
David Demelier <markand@malikania.fr>
parents: 464
diff changeset
644 m_server = SocketTls<Ipv4>{std::move(protocol)};
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
645 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1);
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
646 m_server.bind(Ipv4{"*", 16000});
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
647 m_server.listen();
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
648 }
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
649
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
650 ~TlsRecvTest()
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
651 {
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
652 if (m_tserver.joinable())
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
653 m_tserver.join();
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
654 if (m_tclient.joinable())
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
655 m_tclient.join();
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
656 }
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
657 };
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
658
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
659 TEST_F(TlsRecvTest, blockingSuccess)
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
660 {
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
661 m_tserver = std::thread([this] () {
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
662 try {
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
663 auto client = m_server.accept(nullptr);
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
664
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
665 ASSERT_EQ("hello", client.recv(32));
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
666 } catch (const net::Error &ex) {
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
667 FAIL() << ex.function() << ": " << ex.what();
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
668 }
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
669 });
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
670
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
671 std::this_thread::sleep_for(250ms);
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
672
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
673 m_tclient = std::thread([this] () {
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
674 try {
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
675 m_client.connect(Ipv4{"127.0.0.1", 16000});
464
61a6f3518c55 Socket:
David Demelier <markand@malikania.fr>
parents: 461
diff changeset
676 m_client.send("hello");
461
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
677 } catch (const net::Error &ex) {
41d1a36cc461 Socket:
David Demelier <markand@malikania.fr>
parents: 447
diff changeset
678 FAIL() << ex.function() << ": " << ex.what();
447
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
679 }
828d3dc89f2d Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
680 });
383
403fa2642e19 Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
681 }
403fa2642e19 Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents: 382
diff changeset
682
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
683 int main(int argc, char **argv)
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
684 {
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
685 testing::InitGoogleTest(&argc, argv);
260
2096edb63a4f Socket: fix Windows
David Demelier <markand@malikania.fr>
parents: 258
diff changeset
686
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents: 297
diff changeset
687 return RUN_ALL_TESTS();
258
4ad3c85ab73e Sockets:
David Demelier <markand@malikania.fr>
parents:
diff changeset
688 }