annotate tests/src/libcommon/stream/main.cpp @ 774:bfc51f8a00f3

Tests: cleanup data structure and rename io to stream
author David Demelier <markand@malikania.fr>
date Fri, 26 Oct 2018 13:57:36 +0200
parents tests/src/libcommon/io/main.cpp@8c44bbcbbab9
children 560b62f6b0a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
19 #define BOOST_TEST_MODULE "stream"
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
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
30 #if defined(IRCCD_HAVE_SSL)
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
31 # include <irccd/tls_acceptor.hpp>
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
32 # include <irccd/tls_connector.hpp>
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
33 # include <irccd/tls_stream.hpp>
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
34 #endif // !IRCCD_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
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
39 #if defined(IRCCD_HAVE_SSL)
670
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
723
e8c4ba5ed1c6 Tests: put code in anonymous namespaces, closes #889 @10m
David Demelier <markand@malikania.fr>
parents: 701
diff changeset
49 namespace {
e8c4ba5ed1c6 Tests: put code in anonymous namespaces, closes #889 @10m
David Demelier <markand@malikania.fr>
parents: 701
diff changeset
50
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
51 class stream_fixture {
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
52 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
53 io_service service_;
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
54
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
55 std::unique_ptr<acceptor> acceptor_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
56 std::unique_ptr<connector> connector_;
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
58 std::shared_ptr<stream> stream1_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
59 std::shared_ptr<stream> stream2_;
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
60
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
61 virtual auto create_acceptor() -> std::unique_ptr<acceptor> = 0;
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
62
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
63 virtual auto create_connector() -> std::unique_ptr<connector> = 0;
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
64
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
65 void init()
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
66 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
67 acceptor_ = create_acceptor();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
68 connector_ = create_connector();
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
70 acceptor_->accept([this] (auto code, auto stream) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
71 if (code)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
72 throw std::system_error(code);
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
73
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
74 stream1_ = std::move(stream);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
75 });
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
76 connector_->connect([this] (auto code, auto stream) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
77 if (code)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
78 throw std::system_error(code);
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
79
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
80 stream2_ = std::move(stream);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
81 });
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
83 service_.run();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
84 service_.reset();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
85 }
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 };
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
88 class ip_stream_fixture : public stream_fixture {
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
89 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
90 tcp::endpoint endpoint_;
670
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 protected:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
93 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
94 * \copydoc io_fixture::create_acceptor
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
95 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
96 auto create_acceptor() -> std::unique_ptr<acceptor> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
97 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
98 tcp::endpoint endpoint(tcp::v4(), 0U);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
99 tcp::acceptor acceptor(service_, std::move(endpoint));
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
100
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
101 endpoint_ = acceptor.local_endpoint();
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
102
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
103 return std::make_unique<ip_acceptor>(std::move(acceptor));
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
104 }
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
106 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
107 * \copydoc io_fixture::create_connector
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
108 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
109 auto create_connector() -> std::unique_ptr<connector> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
110 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
111 return std::make_unique<ip_connector>(service_, endpoint_);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
112 }
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
113 };
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
114
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
115 #if defined(IRCCD_HAVE_SSL)
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
116
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
117 class ssl_stream_fixture : public stream_fixture {
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
118 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
119 tcp::endpoint endpoint_;
670
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 protected:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
122 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
123 * \copydoc io_fixture::create_acceptor
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
124 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
125 auto create_acceptor() -> std::unique_ptr<acceptor> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
126 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
127 context context(context::sslv23);
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
128
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
129 context.use_certificate_file(TESTS_SOURCE_DIR "/data/test.crt", context::pem);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
130 context.use_private_key_file(TESTS_SOURCE_DIR "/data/test.key", context::pem);
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
131
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
132 tcp::endpoint endpoint(tcp::v4(), 0U);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
133 tcp::acceptor acceptor(service_, std::move(endpoint));
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
134
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
135 endpoint_ = acceptor.local_endpoint();
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
136
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
137 return std::make_unique<tls_acceptor<>>(std::move(context), std::move(acceptor));
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
138 }
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
139
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
140 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
141 * \copydoc io_fixture::create_connector
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
142 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
143 auto create_connector() -> std::unique_ptr<connector> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
144 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
145 return std::make_unique<tls_connector<>>(context(context::sslv23), service_, endpoint_);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
146 }
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
147 };
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
148
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
149 #endif // !IRCCD_HAVE_SSL
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
150
700
91bc29e87399 Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents: 670
diff changeset
151 #if !BOOST_OS_WINDOWS
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
152
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
153 class local_stream_fixture : public stream_fixture {
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
154 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
155 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
156 * \copydoc io_fixture::create_acceptor
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
157 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
158 auto create_acceptor() -> std::unique_ptr<acceptor> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
159 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
160 std::remove(CMAKE_BINARY_DIR "/tmp/io-test.sock");
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
161
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
162 stream_protocol::acceptor acceptor(service_, CMAKE_BINARY_DIR "/tmp/io-test.sock");
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
163
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
164 return std::make_unique<local_acceptor>(std::move(acceptor));
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
165 }
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
166
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
167 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
168 * \copydoc io_fixture::create_connector
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
169 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
170 auto create_connector() -> std::unique_ptr<connector> override
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
171 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
172 return std::make_unique<local_connector>(service_, CMAKE_BINARY_DIR "/tmp/io-test.sock");
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
173 }
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
174 };
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
175
700
91bc29e87399 Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents: 670
diff changeset
176 #endif // !BOOST_OS_WINDOWS
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
177
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 * List of fixtures to tests.
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
180 */
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
181 using list = boost::mpl::list<
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
182 ip_stream_fixture
701
2007a37d7e1a CMake: prefix options with IRCCD_, #closes 800 @2h
David Demelier <markand@malikania.fr>
parents: 700
diff changeset
183 #if defined(IRCCD_HAVE_SSL)
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
184 , ssl_stream_fixture
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
185 #endif
700
91bc29e87399 Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents: 670
diff changeset
186 #if !BOOST_OS_WINDOWS
774
bfc51f8a00f3 Tests: cleanup data structure and rename io to stream
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
187 , local_stream_fixture
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
188 #endif
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
189 >;
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 BOOST_AUTO_TEST_CASE_TEMPLATE(invalid_argument, Test, list)
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
192 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
193 Test fixture;
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
194
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
195 const nlohmann::json message{
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
196 { "abc", 123 },
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
197 { "def", 456 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
198 };
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 668
diff changeset
199
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
200 fixture.init();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
201 fixture.stream1_->read([] (auto code, auto message) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
202 BOOST_TEST(!code);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
203 BOOST_TEST(message.is_object());
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
204 BOOST_TEST(message["abc"].template get<int>() == 123);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
205 BOOST_TEST(message["def"].template get<int>() == 456);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
206 });
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
207 fixture.stream2_->write(message, [] (auto code) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
208 BOOST_TEST(!code);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
209 });
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
210 fixture.service_.run();
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 }
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 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
214 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
215 Test fixture;
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
217 fixture.init();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
218 fixture.stream1_->read([] (auto code, auto message) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
219 BOOST_TEST(code.value() == static_cast<int>(std::errc::not_connected));
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
220 BOOST_TEST(message.is_null());
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
221 });
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
222 fixture.stream2_ = nullptr;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 760
diff changeset
223 fixture.service_.run();
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 }
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
225
723
e8c4ba5ed1c6 Tests: put code in anonymous namespaces, closes #889 @10m
David Demelier <markand@malikania.fr>
parents: 701
diff changeset
226 } // !namespace
e8c4ba5ed1c6 Tests: put code in anonymous namespaces, closes #889 @10m
David Demelier <markand@malikania.fr>
parents: 701
diff changeset
227
668
8a79b5c0ddc7 Tests: add network_stream test, closes #788 @1h
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 } // !irccd