/source/libs/asio/test/ssl/stream.cpp

https://bitbucket.org/liflg/library-boost · C++ · 199 lines · 139 code · 40 blank · 20 comment · 0 complexity · dfcfabe4b980f155629d6c09318d3cac MD5 · raw file

  1. //
  2. // stream.cpp
  3. // ~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  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)
  9. //
  10. // Disable autolinking for unit tests.
  11. #if !defined(BOOST_ALL_NO_LIB)
  12. #define BOOST_ALL_NO_LIB 1
  13. #endif // !defined(BOOST_ALL_NO_LIB)
  14. // Test that header file is self-contained.
  15. #include <boost/asio/ssl/stream.hpp>
  16. #include <boost/asio.hpp>
  17. #include <boost/asio/ssl.hpp>
  18. #include "../archetypes/async_result.hpp"
  19. #include "../unit_test.hpp"
  20. //------------------------------------------------------------------------------
  21. // ssl_stream_compile test
  22. // ~~~~~~~~~~~~~~~~~~~~~~~
  23. // The following test checks that all public member functions on the class
  24. // ssl::stream::socket compile and link correctly. Runtime failures are ignored.
  25. namespace ssl_stream_compile {
  26. bool verify_callback(bool, boost::asio::ssl::verify_context&)
  27. {
  28. return false;
  29. }
  30. void handshake_handler(const boost::system::error_code&)
  31. {
  32. }
  33. void buffered_handshake_handler(const boost::system::error_code&, std::size_t)
  34. {
  35. }
  36. void shutdown_handler(const boost::system::error_code&)
  37. {
  38. }
  39. void write_some_handler(const boost::system::error_code&, std::size_t)
  40. {
  41. }
  42. void read_some_handler(const boost::system::error_code&, std::size_t)
  43. {
  44. }
  45. void test()
  46. {
  47. using namespace boost::asio;
  48. namespace ip = boost::asio::ip;
  49. try
  50. {
  51. io_context ioc;
  52. char mutable_char_buffer[128] = "";
  53. const char const_char_buffer[128] = "";
  54. boost::asio::ssl::context context(boost::asio::ssl::context::sslv23);
  55. archetypes::lazy_handler lazy;
  56. boost::system::error_code ec;
  57. // ssl::stream constructors.
  58. ssl::stream<ip::tcp::socket> stream1(ioc, context);
  59. ip::tcp::socket socket1(ioc, ip::tcp::v4());
  60. ssl::stream<ip::tcp::socket&> stream2(socket1, context);
  61. // basic_io_object functions.
  62. ssl::stream<ip::tcp::socket>::executor_type ex = stream1.get_executor();
  63. (void)ex;
  64. #if !defined(BOOST_ASIO_NO_DEPRECATED)
  65. io_context& ioc_ref = stream1.get_io_context();
  66. (void)ioc_ref;
  67. io_context& ioc_ref2 = stream1.get_io_service();
  68. (void)ioc_ref2;
  69. #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
  70. // ssl::stream functions.
  71. SSL* ssl1 = stream1.native_handle();
  72. (void)ssl1;
  73. ssl::stream<ip::tcp::socket>::lowest_layer_type& lowest_layer
  74. = stream1.lowest_layer();
  75. (void)lowest_layer;
  76. const ssl::stream<ip::tcp::socket>& stream3 = stream1;
  77. const ssl::stream<ip::tcp::socket>::lowest_layer_type& lowest_layer2
  78. = stream3.lowest_layer();
  79. (void)lowest_layer2;
  80. stream1.set_verify_mode(ssl::verify_none);
  81. stream1.set_verify_mode(ssl::verify_none, ec);
  82. stream1.set_verify_depth(1);
  83. stream1.set_verify_depth(1, ec);
  84. stream1.set_verify_callback(verify_callback);
  85. stream1.set_verify_callback(verify_callback, ec);
  86. stream1.handshake(ssl::stream_base::client);
  87. stream1.handshake(ssl::stream_base::server);
  88. stream1.handshake(ssl::stream_base::client, ec);
  89. stream1.handshake(ssl::stream_base::server, ec);
  90. stream1.handshake(ssl::stream_base::client, buffer(mutable_char_buffer));
  91. stream1.handshake(ssl::stream_base::server, buffer(mutable_char_buffer));
  92. stream1.handshake(ssl::stream_base::client, buffer(const_char_buffer));
  93. stream1.handshake(ssl::stream_base::server, buffer(const_char_buffer));
  94. stream1.handshake(ssl::stream_base::client,
  95. buffer(mutable_char_buffer), ec);
  96. stream1.handshake(ssl::stream_base::server,
  97. buffer(mutable_char_buffer), ec);
  98. stream1.handshake(ssl::stream_base::client,
  99. buffer(const_char_buffer), ec);
  100. stream1.handshake(ssl::stream_base::server,
  101. buffer(const_char_buffer), ec);
  102. stream1.async_handshake(ssl::stream_base::client, handshake_handler);
  103. stream1.async_handshake(ssl::stream_base::server, handshake_handler);
  104. int i1 = stream1.async_handshake(ssl::stream_base::client, lazy);
  105. (void)i1;
  106. int i2 = stream1.async_handshake(ssl::stream_base::server, lazy);
  107. (void)i2;
  108. stream1.async_handshake(ssl::stream_base::client,
  109. buffer(mutable_char_buffer), buffered_handshake_handler);
  110. stream1.async_handshake(ssl::stream_base::server,
  111. buffer(mutable_char_buffer), buffered_handshake_handler);
  112. stream1.async_handshake(ssl::stream_base::client,
  113. buffer(const_char_buffer), buffered_handshake_handler);
  114. stream1.async_handshake(ssl::stream_base::server,
  115. buffer(const_char_buffer), buffered_handshake_handler);
  116. int i3 = stream1.async_handshake(ssl::stream_base::client,
  117. buffer(mutable_char_buffer), lazy);
  118. (void)i3;
  119. int i4 = stream1.async_handshake(ssl::stream_base::server,
  120. buffer(mutable_char_buffer), lazy);
  121. (void)i4;
  122. int i5 = stream1.async_handshake(ssl::stream_base::client,
  123. buffer(const_char_buffer), lazy);
  124. (void)i5;
  125. int i6 = stream1.async_handshake(ssl::stream_base::server,
  126. buffer(const_char_buffer), lazy);
  127. (void)i6;
  128. stream1.shutdown();
  129. stream1.shutdown(ec);
  130. stream1.async_shutdown(shutdown_handler);
  131. int i7 = stream1.async_shutdown(lazy);
  132. (void)i7;
  133. stream1.write_some(buffer(mutable_char_buffer));
  134. stream1.write_some(buffer(const_char_buffer));
  135. stream1.write_some(buffer(mutable_char_buffer), ec);
  136. stream1.write_some(buffer(const_char_buffer), ec);
  137. stream1.async_write_some(buffer(mutable_char_buffer), write_some_handler);
  138. stream1.async_write_some(buffer(const_char_buffer), write_some_handler);
  139. int i8 = stream1.async_write_some(buffer(mutable_char_buffer), lazy);
  140. (void)i8;
  141. int i9 = stream1.async_write_some(buffer(const_char_buffer), lazy);
  142. (void)i9;
  143. stream1.read_some(buffer(mutable_char_buffer));
  144. stream1.read_some(buffer(mutable_char_buffer), ec);
  145. stream1.async_read_some(buffer(mutable_char_buffer), read_some_handler);
  146. int i10 = stream1.async_read_some(buffer(mutable_char_buffer), lazy);
  147. (void)i10;
  148. }
  149. catch (std::exception&)
  150. {
  151. }
  152. }
  153. } // namespace ssl_stream_compile
  154. //------------------------------------------------------------------------------
  155. BOOST_ASIO_TEST_SUITE
  156. (
  157. "ssl/stream",
  158. BOOST_ASIO_TEST_CASE(ssl_stream_compile::test)
  159. )