Mercurial > code
annotate C++/tests/Socket/main.cpp @ 389:e292f0fa5395
Socket: resurrect SSL
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 30 Jun 2015 15:17:01 +0200 |
parents | 743b3a1c71c8 |
children | d7e6d7d1e102 |
rev | line source |
---|---|
276 | 1 /* |
2 * main.cpp -- test sockets | |
3 * | |
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> | |
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 | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
27 #include <Socket.h> |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
28 #include <SocketAddress.h> |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
29 #include <SocketListener.h> |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
30 #include <SocketSsl.h> |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
31 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
32 using namespace address; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
33 using namespace std::literals::chrono_literals; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
34 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
35 /* -------------------------------------------------------- |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
36 * TCP tests |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
37 * -------------------------------------------------------- */ |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
38 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
39 class TcpServerTest : public testing::Test { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
40 protected: |
381 | 41 SocketTcp<Ipv4> m_server{AF_INET, 0}; |
42 SocketTcp<Ipv4> m_client{AF_INET, 0}; | |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
43 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
44 std::thread m_tserver; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
45 std::thread m_tclient; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
46 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
47 public: |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
48 TcpServerTest() |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
49 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
50 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
51 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
52 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
53 ~TcpServerTest() |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
54 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
55 if (m_tserver.joinable()) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
56 m_tserver.join(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
57 if (m_tclient.joinable()) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
58 m_tclient.join(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
59 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
60 }; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
61 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
62 TEST_F(TcpServerTest, connect) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
63 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
64 m_tserver = std::thread([this] () { |
381 | 65 m_server.bind(Ipv4{"*", 16000}); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
66 |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
67 ASSERT_EQ(SocketState::Bound, m_server.state()); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
68 |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
69 m_server.listen(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
70 m_server.accept(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
71 m_server.close(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
72 }); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
73 |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
74 std::this_thread::sleep_for(100ms); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
75 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
76 m_tclient = std::thread([this] () { |
381 | 77 m_client.connect(Ipv4{"127.0.0.1", 16000}); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
78 |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
79 ASSERT_EQ(SocketState::Connected, m_client.state()); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
80 |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
81 m_client.close(); |
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 } |
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 TEST_F(TcpServerTest, io) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
86 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
87 m_tserver = std::thread([this] () { |
381 | 88 m_server.bind(Ipv4{"*", 16000}); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
89 m_server.listen(); |
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 auto client = m_server.accept(); |
381 | 92 auto msg = client.recv(512); |
315
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 ASSERT_EQ("hello world", msg); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
95 |
381 | 96 client.send(msg); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
97 }); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
98 |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
99 std::this_thread::sleep_for(100ms); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
100 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
101 m_tclient = std::thread([this] () { |
381 | 102 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
|
103 m_client.send("hello world"); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
104 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
105 ASSERT_EQ("hello world", m_client.recv(512)); |
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 /* -------------------------------------------------------- |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
110 * UDP tests |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
111 * -------------------------------------------------------- */ |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
112 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
113 class UdpServerTest : public testing::Test { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
114 protected: |
381 | 115 SocketUdp<Ipv4> m_server{AF_INET, 0}; |
116 SocketUdp<Ipv4> m_client{AF_INET, 0}; | |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
117 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
118 std::thread m_tserver; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
119 std::thread m_tclient; |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
120 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
121 public: |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
122 UdpServerTest() |
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 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1); |
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 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
127 ~UdpServerTest() |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
128 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
129 if (m_tserver.joinable()) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
130 m_tserver.join(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
131 if (m_tclient.joinable()) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
132 m_tclient.join(); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
133 } |
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 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
136 TEST_F(UdpServerTest, io) |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
137 { |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
138 m_tserver = std::thread([this] () { |
381 | 139 Ipv4 info{"*", 16000}; |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
140 |
380
06b0f405c58f
Socket: initial support for object-oriented addresses
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
141 m_server.bind(info); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
142 auto msg = m_server.recvfrom(512, info); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
143 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
144 ASSERT_EQ("hello world", msg); |
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 m_server.sendto(msg, info); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
147 m_server.close(); |
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 |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
150 std::this_thread::sleep_for(100ms); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
151 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
152 m_tclient = std::thread([this] () { |
381 | 153 Ipv4 info{"127.0.0.1", 16000}; |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
154 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
155 m_client.sendto("hello world", info); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
156 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
157 ASSERT_EQ("hello world", m_client.recvfrom(512, info)); |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
158 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
159 m_client.close(); |
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 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
162 |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
163 /* -------------------------------------------------------- |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
164 * Listener: set function |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
165 * -------------------------------------------------------- */ |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
166 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
167 class TestBackendSet { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
168 public: |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
169 int m_callcount{0}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
170 bool m_added{false}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
171 int m_flags{0}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
172 |
386
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
173 inline void set(const SocketTable &, SocketAbstract &, int flags, bool add) noexcept |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
174 { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
175 m_callcount ++; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
176 m_added = add; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
177 m_flags |= flags; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
178 } |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
179 |
381 | 180 inline void unset(const SocketTable &, SocketAbstract &, int, bool) noexcept |
181 { | |
182 } | |
183 | |
386
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
184 std::vector<SocketStatus> wait(const SocketTable &, int) |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
185 { |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
186 return {}; |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
187 } |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
188 }; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
189 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
190 class TestBackendSetFail { |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
191 public: |
381 | 192 inline void set(const SocketTable &, SocketAbstract &, int, bool) |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
193 { |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
194 throw "fail"; |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
195 } |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
196 |
381 | 197 inline void unset(const SocketTable &, const SocketAbstract &, int, bool) noexcept |
198 { | |
199 } | |
200 | |
386
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
201 std::vector<SocketStatus> wait(const SocketTable &, int) |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
202 { |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
203 return {}; |
743b3a1c71c8
Socket: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
383
diff
changeset
|
204 } |
315
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 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
207 TEST(ListenerSet, initialAdd) |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
208 { |
382 | 209 SocketListenerAbstract<TestBackendSet> listener; |
381 | 210 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
211 |
381 | 212 listener.set(s, SocketListener::Read); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
213 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
214 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
215 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
|
216 ASSERT_TRUE(listener.backend().m_added); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
217 ASSERT_TRUE(listener.backend().m_flags == SocketListener::Read); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
218 } |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
219 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
220 TEST(ListenerSet, readThenWrite) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
221 { |
382 | 222 SocketListenerAbstract<TestBackendSet> listener; |
381 | 223 SocketAbstract s{0}; |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
224 |
381 | 225 listener.set(s, SocketListener::Read); |
226 listener.set(s, SocketListener::Write); | |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
227 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
228 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
229 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
|
230 ASSERT_FALSE(listener.backend().m_added); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
231 ASSERT_TRUE(listener.backend().m_flags == 0x3); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
232 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
233 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
234 TEST(ListenerSet, allOneShot) |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
235 { |
382 | 236 SocketListenerAbstract<TestBackendSet> listener; |
381 | 237 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
238 |
381 | 239 listener.set(s, SocketListener::Read | SocketListener::Write); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
240 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
241 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
242 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
|
243 ASSERT_TRUE(listener.backend().m_added); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
244 ASSERT_TRUE(listener.backend().m_flags == 0x3); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
245 } |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
246 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
247 TEST(ListenerSet, readTwice) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
248 { |
382 | 249 SocketListenerAbstract<TestBackendSet> listener; |
381 | 250 SocketAbstract s{0}; |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
251 |
381 | 252 listener.set(s, SocketListener::Read); |
253 listener.set(s, SocketListener::Read); | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
254 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
255 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
256 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
|
257 ASSERT_TRUE(listener.backend().m_added); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
258 ASSERT_TRUE(listener.backend().m_flags == SocketListener::Read); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
259 } |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
260 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
261 TEST(ListenerSet, failure) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
262 { |
382 | 263 SocketListenerAbstract<TestBackendSetFail> listener; |
381 | 264 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
265 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
266 try { |
381 | 267 listener.set(s, SocketListener::Read); |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
268 FAIL() << "exception expected"; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
269 } catch (...) { |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
270 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
271 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
272 ASSERT_EQ(0U, listener.size()); |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
273 } |
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
274 |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
275 /* -------------------------------------------------------- |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
276 * Listener: unset / remove functions |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
277 * -------------------------------------------------------- */ |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
278 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
279 class TestBackendUnset { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
280 public: |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
281 bool m_isset{false}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
282 bool m_isunset{false}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
283 int m_flags{0}; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
284 bool m_removal{false}; |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
285 |
381 | 286 inline void set(const SocketTable &, SocketAbstract &, int flags, bool) noexcept |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
287 { |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
288 m_isset = true; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
289 m_flags |= flags; |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
290 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
291 |
381 | 292 inline void unset(const SocketTable &, SocketAbstract &, int flags, bool remove) noexcept |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
293 { |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
294 m_isunset = true; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
295 m_flags &= ~(flags); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
296 m_removal = remove; |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
297 } |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
298 |
381 | 299 std::vector<SocketStatus> wait(const SocketTable &, int) noexcept |
300 { | |
301 return {}; | |
302 } | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
303 }; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
304 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
305 class TestBackendUnsetFail { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
306 public: |
381 | 307 inline void set(const SocketTable &, SocketAbstract &, int, bool) noexcept |
308 { | |
309 } | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
310 |
381 | 311 inline void unset(const SocketTable &, SocketAbstract &, int, bool) |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
312 { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
313 throw "fail"; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
314 } |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
315 |
381 | 316 std::vector<SocketStatus> wait(const SocketTable &, int) |
317 { | |
318 return {}; | |
319 } | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
320 }; |
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 TEST(ListenerUnsetRemove, unset) |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
323 { |
382 | 324 SocketListenerAbstract<TestBackendUnset> listener; |
381 | 325 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
326 |
381 | 327 listener.set(s, SocketListener::Read); |
328 listener.unset(s, SocketListener::Read); | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
329 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
330 ASSERT_EQ(0U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
331 ASSERT_TRUE(listener.backend().m_isset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
332 ASSERT_TRUE(listener.backend().m_isunset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
333 ASSERT_TRUE(listener.backend().m_flags == 0); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
334 ASSERT_TRUE(listener.backend().m_removal); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
335 } |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
336 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
337 TEST(ListenerUnsetRemove, unsetOne) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
338 { |
382 | 339 SocketListenerAbstract<TestBackendUnset> listener; |
381 | 340 SocketAbstract s{0}; |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
341 |
381 | 342 listener.set(s, SocketListener::Read | SocketListener::Write); |
343 listener.unset(s, SocketListener::Read); | |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
344 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
345 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
346 ASSERT_TRUE(listener.backend().m_isset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
347 ASSERT_TRUE(listener.backend().m_isunset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
348 ASSERT_TRUE(listener.backend().m_flags == SocketListener::Write); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
349 ASSERT_FALSE(listener.backend().m_removal); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
350 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
351 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
352 TEST(ListenerUnsetRemove, unsetAll) |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
353 { |
382 | 354 SocketListenerAbstract<TestBackendUnset> listener; |
381 | 355 SocketAbstract s{0}; |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
356 |
381 | 357 listener.set(s, SocketListener::Read | SocketListener::Write); |
358 listener.unset(s, SocketListener::Read); | |
359 listener.unset(s, SocketListener::Write); | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
360 |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
361 ASSERT_EQ(0U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
362 ASSERT_TRUE(listener.backend().m_isset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
363 ASSERT_TRUE(listener.backend().m_isunset); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
364 ASSERT_TRUE(listener.backend().m_flags == 0); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
365 ASSERT_TRUE(listener.backend().m_removal); |
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, remove) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
369 { |
382 | 370 SocketListenerAbstract<TestBackendUnset> listener; |
381 | 371 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
372 |
381 | 373 listener.set(s, SocketListener::Read | SocketListener::Write); |
374 listener.remove(s); | |
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); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
379 ASSERT_TRUE(listener.backend().m_flags == 0); |
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 } |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
382 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
383 TEST(ListenerUnsetRemove, failure) |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
384 { |
382 | 385 SocketListenerAbstract<TestBackendUnsetFail> listener; |
381 | 386 SocketAbstract s{0}; |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
387 |
381 | 388 listener.set(s, SocketListener::Read | SocketListener::Write); |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
389 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
390 try { |
381 | 391 listener.remove(s); |
368
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
392 FAIL() << "exception expected"; |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
393 } catch (...) { |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
394 } |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
395 |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
396 /* If fail, kept into the table */ |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
397 ASSERT_EQ(1U, listener.size()); |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
398 } |
6c0015524ca9
Socket: fallback to Select until we update backends
David Demelier <markand@malikania.fr>
parents:
350
diff
changeset
|
399 |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
400 /* -------------------------------------------------------- |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
401 * Listener: system |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
402 * -------------------------------------------------------- */ |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
403 |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
404 class ListenerTest : public testing::Test { |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
405 protected: |
382 | 406 SocketListenerAbstract<backend::Select> m_listener; |
381 | 407 SocketTcp<Ipv4> m_masterTcp; |
408 SocketTcp<Ipv4> m_clientTcp; | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
409 |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
410 std::thread m_tserver; |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
411 std::thread m_tclient; |
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 public: |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
414 ListenerTest() |
381 | 415 : m_masterTcp{AF_INET, 0} |
416 , m_clientTcp{AF_INET, 0} | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
417 { |
381 | 418 m_masterTcp.set(SOL_SOCKET, SO_REUSEADDR, 1); |
419 m_masterTcp.bind(Ipv4{"*", 16000}); | |
420 m_masterTcp.listen(); | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
421 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
422 |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
423 ~ListenerTest() |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
424 { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
425 if (m_tserver.joinable()) { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
426 m_tserver.join(); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
427 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
428 if (m_tclient.joinable()) { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
429 m_tclient.join(); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
430 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
431 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
432 }; |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
433 |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
434 TEST_F(ListenerTest, accept) |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
435 { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
436 m_tserver = std::thread([this] () { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
437 try { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
438 m_listener.set(m_masterTcp, SocketListener::Read); |
346 | 439 m_listener.wait(); |
381 | 440 m_masterTcp.accept(); |
441 m_masterTcp.close(); | |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
442 } catch (const std::exception &ex) { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
443 FAIL() << ex.what(); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
444 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
445 }); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
446 |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
447 std::this_thread::sleep_for(100ms); |
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 m_tclient = std::thread([this] () { |
381 | 450 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
|
451 }); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
452 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
453 |
369
f3c762579073
Socket: add more docs into SocketListener
David Demelier <markand@malikania.fr>
parents:
368
diff
changeset
|
454 TEST_F(ListenerTest, recv) |
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 m_tserver = std::thread([this] () { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
457 try { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
458 m_listener.set(m_masterTcp, SocketListener::Read); |
346 | 459 m_listener.wait(); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
460 |
381 | 461 auto sc = m_masterTcp.accept(); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
462 |
381 | 463 ASSERT_EQ("hello", sc.recv(512)); |
316
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
464 } catch (const std::exception &ex) { |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
465 FAIL() << ex.what(); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
466 } |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
467 }); |
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 std::this_thread::sleep_for(100ms); |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
470 |
4c0af1143fc4
Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents:
315
diff
changeset
|
471 m_tclient = std::thread([this] () { |
381 | 472 m_clientTcp.connect(Ipv4{"127.0.0.1", 16000}); |
473 m_clientTcp.send("hello"); | |
316
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 |
350
5a1ec6603230
Socket: add new kqueue backend
David Demelier <markand@malikania.fr>
parents:
347
diff
changeset
|
477 /* -------------------------------------------------------- |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
478 * Non-blocking connect |
258 | 479 * -------------------------------------------------------- */ |
480 | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
481 class NonBlockingConnectTest : public testing::Test { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
482 protected: |
381 | 483 SocketTcp<Ipv4> m_server{AF_INET, 0}; |
484 SocketTcp<Ipv4> m_client{AF_INET, 0}; | |
258 | 485 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
486 std::thread m_tserver; |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
487 std::thread m_tclient; |
276 | 488 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
489 public: |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
490 NonBlockingConnectTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
491 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
492 m_client.setBlockMode(false); |
275 | 493 } |
276 | 494 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
495 ~NonBlockingConnectTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
496 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
497 if (m_tserver.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
498 m_tserver.join(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
499 if (m_tclient.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
500 m_tclient.join(); |
258 | 501 } |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
502 }; |
276 | 503 |
258 | 504 /* -------------------------------------------------------- |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
505 * TCP accept |
270 | 506 * -------------------------------------------------------- */ |
507 | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
508 class TcpAcceptTest : public testing::Test { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
509 protected: |
381 | 510 SocketTcp<Ipv4> m_server{AF_INET, 0}; |
511 SocketTcp<Ipv4> m_client{AF_INET, 0}; | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
512 |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
513 std::thread m_tserver; |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
514 std::thread m_tclient; |
276 | 515 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
516 public: |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
517 TcpAcceptTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
518 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
519 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1); |
381 | 520 m_server.bind(Ipv4{"*", 16000}); |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
521 m_server.listen(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
522 } |
270 | 523 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
524 ~TcpAcceptTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
525 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
526 if (m_tserver.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
527 m_tserver.join(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
528 if (m_tclient.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
529 m_tclient.join(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
530 } |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
531 }; |
270 | 532 |
276 | 533 /* -------------------------------------------------------- |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
534 * TCP recv |
276 | 535 * -------------------------------------------------------- */ |
536 | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
537 class TcpRecvTest : public testing::Test { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
538 protected: |
381 | 539 SocketTcp<Ipv4> m_server{AF_INET, 0}; |
540 SocketTcp<Ipv4> m_client{AF_INET, 0}; | |
276 | 541 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
542 std::thread m_tserver; |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
543 std::thread m_tclient; |
276 | 544 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
545 public: |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
546 TcpRecvTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
547 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
548 m_server.set(SOL_SOCKET, SO_REUSEADDR, 1); |
381 | 549 m_server.bind(Ipv4{"*", 16000}); |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
550 m_server.listen(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
551 } |
258 | 552 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
553 ~TcpRecvTest() |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
554 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
555 if (m_tserver.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
556 m_tserver.join(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
557 if (m_tclient.joinable()) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
558 m_tclient.join(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
559 } |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
560 }; |
276 | 561 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
562 TEST_F(TcpRecvTest, blockingSuccess) |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
563 { |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
564 m_tserver = std::thread([this] () { |
378
92457ea8f7e2
Socket: switch to more OO
David Demelier <markand@malikania.fr>
parents:
370
diff
changeset
|
565 auto client = m_server.accept(); |
258 | 566 |
381 | 567 ASSERT_EQ("hello", client.recv(32)); |
258 | 568 }); |
569 | |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
570 std::this_thread::sleep_for(100ms); |
276 | 571 |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
572 m_tclient = std::thread([this] () { |
381 | 573 m_client.connect(Ipv4{"127.0.0.1", 16000}); |
318
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
574 m_client.send("hello"); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
575 m_client.close(); |
68ae6d7dea1f
Sockets: improve errors
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
576 }); |
297
836903141476
Socket: provide experimental SSL support
David Demelier <markand@malikania.fr>
parents:
293
diff
changeset
|
577 } |
836903141476
Socket: provide experimental SSL support
David Demelier <markand@malikania.fr>
parents:
293
diff
changeset
|
578 |
319 | 579 /* -------------------------------------------------------- |
580 * Socket SSL | |
581 * -------------------------------------------------------- */ | |
582 | |
583 class SslTest : public testing::Test { | |
584 protected: | |
389
e292f0fa5395
Socket: resurrect SSL
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
585 SocketSsl<Ipv4> client{AF_INET, 0}; |
319 | 586 }; |
587 | |
588 TEST_F(SslTest, connect) | |
589 { | |
590 try { | |
389
e292f0fa5395
Socket: resurrect SSL
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
591 client.connect(Ipv4{"google.fr", 443}); |
319 | 592 client.close(); |
593 } catch (const SocketError &error) { | |
594 FAIL() << error.what(); | |
595 } | |
596 } | |
597 | |
598 TEST_F(SslTest, recv) | |
599 { | |
600 try { | |
389
e292f0fa5395
Socket: resurrect SSL
David Demelier <markand@malikania.fr>
parents:
386
diff
changeset
|
601 client.connect(Ipv4{"google.fr", 443}); |
319 | 602 client.send("GET / HTTP/1.0\r\n\r\n"); |
603 | |
604 std::string msg = client.recv(512); | |
605 std::string content = msg.substr(0, 18); | |
606 | |
607 ASSERT_EQ("HTTP/1.0 302 Found", content); | |
608 | |
609 client.close(); | |
610 } catch (const SocketError &error) { | |
611 FAIL() << error.what(); | |
612 } | |
613 } | |
614 | |
383
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
615 /* -------------------------------------------------------- |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
616 * Operators |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
617 * -------------------------------------------------------- */ |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
618 |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
619 TEST(AddressOperator, less) |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
620 { |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
621 Ipv4 ip1{"*", 8000}; |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
622 Ipv4 ip2{"*", 8002}; |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
623 |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
624 ASSERT_LT(ip1, ip2); |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
625 } |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
626 |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
627 TEST(AddressOperator, same) |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
628 { |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
629 Ipv4 ip1{"*", 8000}; |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
630 Ipv4 ip2{"*", 8000}; |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
631 |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
632 ASSERT_EQ(ip1, ip2); |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
633 } |
403fa2642e19
Socket: add operator on addresses
David Demelier <markand@malikania.fr>
parents:
382
diff
changeset
|
634 |
258 | 635 int main(int argc, char **argv) |
636 { | |
637 testing::InitGoogleTest(&argc, argv); | |
260 | 638 |
315
c9356cb38c86
Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
297
diff
changeset
|
639 return RUN_ALL_TESTS(); |
258 | 640 } |