Mercurial > code
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 |
rev | line source |
---|---|
276 | 1 /* |
2 * main.cpp -- test sockets | |
3 * | |
403 | 4 * Copyright (c) 2013-2015 David Demelier <markand@malikania.fr> |
276 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
258 | 19 #include <chrono> |
276 | 20 #include <iostream> |
258 | 21 #include <sstream> |
22 #include <string> | |
23 #include <thread> | |
24 | |
25 #include <gtest/gtest.h> | |
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 | 32 /* |
33 * Options | |
34 * ------------------------------------------------------------------ | |
35 */ | |
36 | |
37 TEST(Options, reuse) | |
38 { | |
39 SocketTcpIp s; | |
40 | |
41 try { | |
42 s.set(option::ReuseAddress{true}); | |
43 ASSERT_TRUE(s.get<option::ReuseAddress>()); | |
44 | |
45 s.set(option::ReuseAddress{false}); | |
46 ASSERT_FALSE(s.get<option::ReuseAddress>()); | |
47 } catch (const std::exception &ex) { | |
48 FAIL() << ex.what(); | |
49 } | |
50 } | |
51 | |
52 TEST(Options, nodelay) | |
53 { | |
54 SocketTcpIp s; | |
55 | |
56 try { | |
57 s.set(option::TcpNoDelay{true}); | |
58 ASSERT_TRUE(s.get<option::TcpNoDelay>()); | |
59 | |
60 s.set(option::TcpNoDelay{false}); | |
61 ASSERT_FALSE(s.get<option::TcpNoDelay>()); | |
62 } catch (const std::exception &ex) { | |
63 FAIL() << ex.what(); | |
64 } | |
65 } | |
66 | |
67 TEST(Options, v6only) | |
68 { | |
69 SocketTcpIp s; | |
70 | |
71 try { | |
72 s.set(option::Ipv6Only{true}); | |
73 ASSERT_TRUE(s.get<option::Ipv6Only>()); | |
74 | |
75 s.set(option::Ipv6Only{false}); | |
76 ASSERT_FALSE(s.get<option::Ipv6Only>()); | |
77 } catch (const std::exception &ex) { | |
78 FAIL() << ex.what(); | |
79 } | |
80 } | |
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 | 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 | 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 | 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 | 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 | 132 auto client = m_server.accept(nullptr); |
381 | 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 | 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 | 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 | 154 #if 0 |
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 | 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 | 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 | 207 #endif |
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 | 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 | 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 | 226 inline void unset(const ListenerTable &, Handle, Condition, bool) noexcept |
381 | 227 { |
228 } | |
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 | 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 | 243 inline void unset(const ListenerTable &, Handle, Condition, bool) noexcept |
381 | 244 { |
245 } | |
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 | 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 | 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 | 271 listener.set(s, Condition::Readable); |
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 | 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 | 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 | 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 | 298 listener.set(s, Condition::Readable); |
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 | 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 | 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 | 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 | 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 | 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 | 346 { |
347 return {}; | |
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 | 353 inline void set(const ListenerTable &, Handle &, Condition, bool) noexcept |
381 | 354 { |
355 } | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
356 |
464 | 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 | 363 { |
364 return {}; | |
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 | 373 listener.set(s, Condition::Readable); |
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 | 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 | 388 listener.set(s, Condition::Readable | Condition::Writable); |
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 | 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 | 403 listener.set(s, Condition::Readable | Condition::Writable); |
404 listener.unset(s, Condition::Readable); | |
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 | 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 | 419 listener.set(s, Condition::Readable | Condition::Writable); |
381 | 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 | 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 | 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 | 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 | 453 SocketTcp<Ipv4> m_masterTcp; |
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 | 462 m_masterTcp.set(SOL_SOCKET, SO_REUSEADDR, 1); |
463 m_masterTcp.bind(Ipv4{"*", 16000}); | |
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 | 482 m_listener.set(m_masterTcp.handle(), Condition::Readable); |
346 | 483 m_listener.wait(); |
461 | 484 m_masterTcp.accept(nullptr); |
381 | 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 | 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 | 502 m_listener.set(m_masterTcp.handle(), Condition::Readable); |
346 | 503 m_listener.wait(); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
504 |
461 | 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 | 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 | 516 m_clientTcp.connect(Ipv4{"127.0.0.1", 16000}); |
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 | 523 * -------------------------------------------------------- */ |
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 | 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 | 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 | 537 } |
276 | 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 | 545 } |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
546 }; |
276 | 547 |
258 | 548 /* -------------------------------------------------------- |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
549 * TCP accept |
270 | 550 * -------------------------------------------------------- */ |
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 | 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 | 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 | 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 | 576 |
276 | 577 /* -------------------------------------------------------- |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
578 * TCP recv |
276 | 579 * -------------------------------------------------------- */ |
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 | 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 | 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 | 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 | 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 | 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 | 609 auto client = m_server.accept(nullptr); |
258 | 610 |
381 | 611 ASSERT_EQ("hello", client.recv(32)); |
258 | 612 }); |
613 | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
614 std::this_thread::sleep_for(100ms); |
276 | 615 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
616 m_tclient = std::thread([this] () { |
381 | 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 | 623 /* -------------------------------------------------------- |
624 * Socket SSL | |
625 * -------------------------------------------------------- */ | |
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 | 628 protected: |
467 | 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 | 638 Tls protocol; |
639 | |
640 protocol.setCertificate("Socket/test.crt"); | |
641 protocol.setPrivateKey("Socket/test.key"); | |
642 protocol.setVerify(false); | |
643 | |
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 | 657 }; |
658 | |
447
828d3dc89f2d
Socket: use own tests for SSL
David Demelier <markand@malikania.fr>
parents:
446
diff
changeset
|
659 TEST_F(TlsRecvTest, blockingSuccess) |
319 | 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 | 663 auto client = m_server.accept(nullptr); |
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 | 666 } catch (const net::Error &ex) { |
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 | 670 |
461 | 671 std::this_thread::sleep_for(250ms); |
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 | 676 m_client.send("hello"); |
461 | 677 } catch (const net::Error &ex) { |
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 | 683 int main(int argc, char **argv) |
684 { | |
685 testing::InitGoogleTest(&argc, argv); | |
260 | 686 |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
687 return RUN_ALL_TESTS(); |
258 | 688 } |