stream.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. //
  2. // stream.cpp
  3. // ~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2019 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. // ssl::stream functions.
  65. SSL* ssl1 = stream1.native_handle();
  66. (void)ssl1;
  67. ssl::stream<ip::tcp::socket>::lowest_layer_type& lowest_layer
  68. = stream1.lowest_layer();
  69. (void)lowest_layer;
  70. const ssl::stream<ip::tcp::socket>& stream3 = stream1;
  71. const ssl::stream<ip::tcp::socket>::lowest_layer_type& lowest_layer2
  72. = stream3.lowest_layer();
  73. (void)lowest_layer2;
  74. stream1.set_verify_mode(ssl::verify_none);
  75. stream1.set_verify_mode(ssl::verify_none, ec);
  76. stream1.set_verify_depth(1);
  77. stream1.set_verify_depth(1, ec);
  78. stream1.set_verify_callback(verify_callback);
  79. stream1.set_verify_callback(verify_callback, ec);
  80. stream1.handshake(ssl::stream_base::client);
  81. stream1.handshake(ssl::stream_base::server);
  82. stream1.handshake(ssl::stream_base::client, ec);
  83. stream1.handshake(ssl::stream_base::server, ec);
  84. stream1.handshake(ssl::stream_base::client, buffer(mutable_char_buffer));
  85. stream1.handshake(ssl::stream_base::server, buffer(mutable_char_buffer));
  86. stream1.handshake(ssl::stream_base::client, buffer(const_char_buffer));
  87. stream1.handshake(ssl::stream_base::server, buffer(const_char_buffer));
  88. stream1.handshake(ssl::stream_base::client,
  89. buffer(mutable_char_buffer), ec);
  90. stream1.handshake(ssl::stream_base::server,
  91. buffer(mutable_char_buffer), ec);
  92. stream1.handshake(ssl::stream_base::client,
  93. buffer(const_char_buffer), ec);
  94. stream1.handshake(ssl::stream_base::server,
  95. buffer(const_char_buffer), ec);
  96. stream1.async_handshake(ssl::stream_base::client, handshake_handler);
  97. stream1.async_handshake(ssl::stream_base::server, handshake_handler);
  98. int i1 = stream1.async_handshake(ssl::stream_base::client, lazy);
  99. (void)i1;
  100. int i2 = stream1.async_handshake(ssl::stream_base::server, lazy);
  101. (void)i2;
  102. stream1.async_handshake(ssl::stream_base::client,
  103. buffer(mutable_char_buffer), buffered_handshake_handler);
  104. stream1.async_handshake(ssl::stream_base::server,
  105. buffer(mutable_char_buffer), buffered_handshake_handler);
  106. stream1.async_handshake(ssl::stream_base::client,
  107. buffer(const_char_buffer), buffered_handshake_handler);
  108. stream1.async_handshake(ssl::stream_base::server,
  109. buffer(const_char_buffer), buffered_handshake_handler);
  110. int i3 = stream1.async_handshake(ssl::stream_base::client,
  111. buffer(mutable_char_buffer), lazy);
  112. (void)i3;
  113. int i4 = stream1.async_handshake(ssl::stream_base::server,
  114. buffer(mutable_char_buffer), lazy);
  115. (void)i4;
  116. int i5 = stream1.async_handshake(ssl::stream_base::client,
  117. buffer(const_char_buffer), lazy);
  118. (void)i5;
  119. int i6 = stream1.async_handshake(ssl::stream_base::server,
  120. buffer(const_char_buffer), lazy);
  121. (void)i6;
  122. stream1.shutdown();
  123. stream1.shutdown(ec);
  124. stream1.async_shutdown(shutdown_handler);
  125. int i7 = stream1.async_shutdown(lazy);
  126. (void)i7;
  127. stream1.write_some(buffer(mutable_char_buffer));
  128. stream1.write_some(buffer(const_char_buffer));
  129. stream1.write_some(buffer(mutable_char_buffer), ec);
  130. stream1.write_some(buffer(const_char_buffer), ec);
  131. stream1.async_write_some(buffer(mutable_char_buffer), write_some_handler);
  132. stream1.async_write_some(buffer(const_char_buffer), write_some_handler);
  133. int i8 = stream1.async_write_some(buffer(mutable_char_buffer), lazy);
  134. (void)i8;
  135. int i9 = stream1.async_write_some(buffer(const_char_buffer), lazy);
  136. (void)i9;
  137. stream1.read_some(buffer(mutable_char_buffer));
  138. stream1.read_some(buffer(mutable_char_buffer), ec);
  139. stream1.async_read_some(buffer(mutable_char_buffer), read_some_handler);
  140. int i10 = stream1.async_read_some(buffer(mutable_char_buffer), lazy);
  141. (void)i10;
  142. }
  143. catch (std::exception&)
  144. {
  145. }
  146. }
  147. } // namespace ssl_stream_compile
  148. //------------------------------------------------------------------------------
  149. BOOST_ASIO_TEST_SUITE
  150. (
  151. "ssl/stream",
  152. BOOST_ASIO_TEST_CASE(ssl_stream_compile::test)
  153. )