Mercurial > irccd
annotate tests/src/libcommon/io/main.cpp @ 700:91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 09 May 2018 22:34:47 +0200 |
parents | 95ac3ace1610 |
children | 2007a37d7e1a |
rev | line source |
---|---|
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
2 * main.cpp -- test io classes |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
19 #define BOOST_TEST_MODULE "io" |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <boost/test/unit_test.hpp> |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
21 #include <boost/mpl/list.hpp> |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
670
diff
changeset
|
22 #include <boost/predef/os.h> |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
24 #include <irccd/sysconfig.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
25 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
26 #include <irccd/socket_acceptor.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
27 #include <irccd/socket_connector.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
28 #include <irccd/socket_stream.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
29 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
30 #if defined(HAVE_SSL) |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
31 # include <irccd/tls_acceptor.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
32 # include <irccd/tls_connector.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
33 # include <irccd/tls_stream.hpp> |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
34 #endif // !HAVE_SSL |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 using boost::asio::io_service; |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 using boost::asio::ip::tcp; |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
39 #if defined(HAVE_SSL) |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
40 using boost::asio::ssl::context; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
41 #endif |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
42 |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
670
diff
changeset
|
43 #if !BOOST_OS_WINDOWS |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
44 using boost::asio::local::stream_protocol; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
45 #endif |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
46 |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 namespace irccd { |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
49 class io_test { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
50 public: |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 io_service service_; |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
52 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
53 std::unique_ptr<io::acceptor> acceptor_; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
54 std::unique_ptr<io::connector> connector_; |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
56 std::shared_ptr<io::stream> stream1_; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
57 std::shared_ptr<io::stream> stream2_; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
58 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
59 virtual std::unique_ptr<io::acceptor> create_acceptor() = 0; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
60 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
61 virtual std::unique_ptr<io::connector> create_connector() = 0; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
62 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
63 void init() |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 { |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
65 acceptor_ = create_acceptor(); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
66 connector_ = create_connector(); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
68 acceptor_->accept([this] (auto code, auto stream) { |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 if (code) |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
70 throw std::system_error(code); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
71 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
72 stream1_ = std::move(stream); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 }); |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
74 connector_->connect([this] (auto code, auto stream) { |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 if (code) |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
76 throw std::system_error(code); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
77 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
78 stream2_ = std::move(stream); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 }); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 service_.run(); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 service_.reset(); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 } |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 }; |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
86 class ip_io_test : public io_test { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
87 private: |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
88 tcp::endpoint endpoint_; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
89 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
90 protected: |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
91 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
92 * \copydoc io_test::create_acceptor |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
93 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
94 std::unique_ptr<io::acceptor> create_acceptor() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
95 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
96 tcp::endpoint endpoint(tcp::v4(), 0U); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
97 tcp::acceptor acceptor(service_, std::move(endpoint)); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
98 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
99 endpoint_ = acceptor.local_endpoint(); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
100 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
101 return std::make_unique<io::ip_acceptor>(std::move(acceptor)); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
102 } |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
104 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
105 * \copydoc io_test::create_connector |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
106 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
107 std::unique_ptr<io::connector> create_connector() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
108 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
109 return std::make_unique<io::ip_connector>(service_, endpoint_); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
110 } |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
111 }; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
112 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
113 #if defined(HAVE_SSL) |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
114 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
115 class ssl_io_test : public io_test { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
116 private: |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
117 tcp::endpoint endpoint_; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
118 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
119 protected: |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
120 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
121 * \copydoc io_test::create_acceptor |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
122 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
123 std::unique_ptr<io::acceptor> create_acceptor() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
124 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
125 context context(context::sslv23); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
126 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
127 context.use_certificate_file(TESTS_SOURCE_DIR "/data/test.crt", context::pem); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
128 context.use_private_key_file(TESTS_SOURCE_DIR "/data/test.key", context::pem); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
129 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
130 tcp::endpoint endpoint(tcp::v4(), 0U); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
131 tcp::acceptor acceptor(service_, std::move(endpoint)); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
132 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
133 endpoint_ = acceptor.local_endpoint(); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
134 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
135 return std::make_unique<io::tls_acceptor<>>(std::move(context), std::move(acceptor)); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
136 } |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
138 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
139 * \copydoc io_test::create_connector |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
140 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
141 std::unique_ptr<io::connector> create_connector() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
142 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
143 return std::make_unique<io::tls_connector<>>(context(context::sslv23), service_, endpoint_); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
144 } |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
145 }; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
146 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
147 #endif // !HAVE_SSL |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
148 |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
670
diff
changeset
|
149 #if !BOOST_OS_WINDOWS |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
150 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
151 class local_io_test : public io_test { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
152 public: |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
153 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
154 * \copydoc io_test::create_acceptor |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
155 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
156 std::unique_ptr<io::acceptor> create_acceptor() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
157 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
158 std::remove(CMAKE_BINARY_DIR "/tmp/io-test.sock"); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
159 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
160 stream_protocol::acceptor acceptor(service_, CMAKE_BINARY_DIR "/tmp/io-test.sock"); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
161 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
162 return std::make_unique<io::local_acceptor>(std::move(acceptor)); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
163 } |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
164 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
165 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
166 * \copydoc io_test::create_connector |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
167 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
168 std::unique_ptr<io::connector> create_connector() override |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
169 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
170 return std::make_unique<io::local_connector>(service_, CMAKE_BINARY_DIR "/tmp/io-test.sock"); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
171 } |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
172 }; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
173 |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
670
diff
changeset
|
174 #endif // !BOOST_OS_WINDOWS |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
175 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
176 /** |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
177 * List of fixtures to tests. |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
178 */ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
179 using list = boost::mpl::list< |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
180 ip_io_test |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
181 #if defined(HAVE_SSL) |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
182 , ssl_io_test |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
183 #endif |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
670
diff
changeset
|
184 #if !BOOST_OS_WINDOWS |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
185 , local_io_test |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
186 #endif |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
187 >; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
188 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
189 BOOST_AUTO_TEST_CASE_TEMPLATE(invalid_argument, Test, list) |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
190 { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
191 Test fixture; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
192 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
193 const nlohmann::json message{ |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
194 { "abc", 123 }, |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
195 { "def", 456 } |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
196 }; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
197 |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
198 fixture.init(); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
199 fixture.stream1_->read([] (auto code, auto message) { |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 BOOST_TEST(!code); |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
201 BOOST_TEST(message.is_object()); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 BOOST_TEST(message["abc"].template get<int>() == 123); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 BOOST_TEST(message["def"].template get<int>() == 456); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 }); |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
205 fixture.stream2_->write(message, [] (auto code) { |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 BOOST_TEST(!code); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 }); |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
208 fixture.service_.run(); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 } |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
211 BOOST_AUTO_TEST_CASE_TEMPLATE(network_down, Test, list) |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 { |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
213 Test fixture; |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
215 fixture.init(); |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
216 fixture.stream1_->read([] (auto code, auto message) { |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
217 BOOST_TEST(code.value() == static_cast<int>(std::errc::not_connected)); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 BOOST_TEST(message.is_null()); |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 }); |
670
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
220 fixture.stream2_ = nullptr; |
95ac3ace1610
Common: introduce new io code
David Demelier <markand@malikania.fr>
parents:
668
diff
changeset
|
221 fixture.service_.run(); |
668
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 } |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
8a79b5c0ddc7
Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 } // !irccd |