5 // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
16 // Test that header file is self-contained.
17 #include <boost/asio/ssl/stream.hpp>
19 #include <boost/asio.hpp>
20 #include <boost/asio/ssl.hpp>
21 #include "../archetypes/async_result.hpp"
22 #include "../unit_test.hpp"
24 //------------------------------------------------------------------------------
26 // ssl_stream_compile test
27 // ~~~~~~~~~~~~~~~~~~~~~~~
28 // The following test checks that all public member functions on the class
29 // ssl::stream::socket compile and link correctly. Runtime failures are ignored.
31 namespace ssl_stream_compile
{
33 bool verify_callback(bool, boost::asio::ssl::verify_context
&)
38 void handshake_handler(const boost::system::error_code
&)
42 void buffered_handshake_handler(const boost::system::error_code
&, std::size_t)
46 void shutdown_handler(const boost::system::error_code
&)
50 void write_some_handler(const boost::system::error_code
&, std::size_t)
54 void read_some_handler(const boost::system::error_code
&, std::size_t)
60 using namespace boost::asio
;
61 namespace ip
= boost::asio::ip
;
66 char mutable_char_buffer
[128] = "";
67 const char const_char_buffer
[128] = "";
68 boost::asio::ssl::context
context(boost::asio::ssl::context::sslv23
);
69 archetypes::lazy_handler lazy
;
70 boost::system::error_code ec
;
72 // ssl::stream constructors.
74 ssl::stream
<ip::tcp::socket
> stream1(ioc
, context
);
75 ip::tcp::socket
socket1(ioc
, ip::tcp::v4());
76 ssl::stream
<ip::tcp::socket
&> stream2(socket1
, context
);
78 // basic_io_object functions.
80 ssl::stream
<ip::tcp::socket
>::executor_type ex
= stream1
.get_executor();
83 #if !defined(BOOST_ASIO_NO_DEPRECATED)
84 io_context
& ioc_ref
= stream1
.get_io_context();
87 io_context
& ioc_ref2
= stream1
.get_io_service();
89 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
91 // ssl::stream functions.
93 SSL
* ssl1
= stream1
.native_handle();
96 ssl::stream
<ip::tcp::socket
>::lowest_layer_type
& lowest_layer
97 = stream1
.lowest_layer();
100 const ssl::stream
<ip::tcp::socket
>& stream3
= stream1
;
101 const ssl::stream
<ip::tcp::socket
>::lowest_layer_type
& lowest_layer2
102 = stream3
.lowest_layer();
105 stream1
.set_verify_mode(ssl::verify_none
);
106 stream1
.set_verify_mode(ssl::verify_none
, ec
);
108 stream1
.set_verify_depth(1);
109 stream1
.set_verify_depth(1, ec
);
111 stream1
.set_verify_callback(verify_callback
);
112 stream1
.set_verify_callback(verify_callback
, ec
);
114 stream1
.handshake(ssl::stream_base::client
);
115 stream1
.handshake(ssl::stream_base::server
);
116 stream1
.handshake(ssl::stream_base::client
, ec
);
117 stream1
.handshake(ssl::stream_base::server
, ec
);
119 stream1
.handshake(ssl::stream_base::client
, buffer(mutable_char_buffer
));
120 stream1
.handshake(ssl::stream_base::server
, buffer(mutable_char_buffer
));
121 stream1
.handshake(ssl::stream_base::client
, buffer(const_char_buffer
));
122 stream1
.handshake(ssl::stream_base::server
, buffer(const_char_buffer
));
123 stream1
.handshake(ssl::stream_base::client
,
124 buffer(mutable_char_buffer
), ec
);
125 stream1
.handshake(ssl::stream_base::server
,
126 buffer(mutable_char_buffer
), ec
);
127 stream1
.handshake(ssl::stream_base::client
,
128 buffer(const_char_buffer
), ec
);
129 stream1
.handshake(ssl::stream_base::server
,
130 buffer(const_char_buffer
), ec
);
132 stream1
.async_handshake(ssl::stream_base::client
, handshake_handler
);
133 stream1
.async_handshake(ssl::stream_base::server
, handshake_handler
);
134 int i1
= stream1
.async_handshake(ssl::stream_base::client
, lazy
);
136 int i2
= stream1
.async_handshake(ssl::stream_base::server
, lazy
);
139 stream1
.async_handshake(ssl::stream_base::client
,
140 buffer(mutable_char_buffer
), buffered_handshake_handler
);
141 stream1
.async_handshake(ssl::stream_base::server
,
142 buffer(mutable_char_buffer
), buffered_handshake_handler
);
143 stream1
.async_handshake(ssl::stream_base::client
,
144 buffer(const_char_buffer
), buffered_handshake_handler
);
145 stream1
.async_handshake(ssl::stream_base::server
,
146 buffer(const_char_buffer
), buffered_handshake_handler
);
147 int i3
= stream1
.async_handshake(ssl::stream_base::client
,
148 buffer(mutable_char_buffer
), lazy
);
150 int i4
= stream1
.async_handshake(ssl::stream_base::server
,
151 buffer(mutable_char_buffer
), lazy
);
153 int i5
= stream1
.async_handshake(ssl::stream_base::client
,
154 buffer(const_char_buffer
), lazy
);
156 int i6
= stream1
.async_handshake(ssl::stream_base::server
,
157 buffer(const_char_buffer
), lazy
);
161 stream1
.shutdown(ec
);
163 stream1
.async_shutdown(shutdown_handler
);
164 int i7
= stream1
.async_shutdown(lazy
);
167 stream1
.write_some(buffer(mutable_char_buffer
));
168 stream1
.write_some(buffer(const_char_buffer
));
169 stream1
.write_some(buffer(mutable_char_buffer
), ec
);
170 stream1
.write_some(buffer(const_char_buffer
), ec
);
172 stream1
.async_write_some(buffer(mutable_char_buffer
), write_some_handler
);
173 stream1
.async_write_some(buffer(const_char_buffer
), write_some_handler
);
174 int i8
= stream1
.async_write_some(buffer(mutable_char_buffer
), lazy
);
176 int i9
= stream1
.async_write_some(buffer(const_char_buffer
), lazy
);
179 stream1
.read_some(buffer(mutable_char_buffer
));
180 stream1
.read_some(buffer(mutable_char_buffer
), ec
);
182 stream1
.async_read_some(buffer(mutable_char_buffer
), read_some_handler
);
183 int i10
= stream1
.async_read_some(buffer(mutable_char_buffer
), lazy
);
186 catch (std::exception
&)
191 } // namespace ssl_stream_compile
193 //------------------------------------------------------------------------------
195 BOOST_ASIO_TEST_SUITE
198 BOOST_ASIO_TEST_CASE(ssl_stream_compile::test
)