1 //
2 // stream_protocol.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 
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)
15 
16 // Test that header file is self-contained.
17 #include "asio/local/stream_protocol.hpp"
18 
19 #include <cstring>
20 #include "asio/io_context.hpp"
21 #include "../unit_test.hpp"
22 
23 //------------------------------------------------------------------------------
24 
25 // local_stream_protocol_socket_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // local::stream_protocol::socket compile and link correctly. Runtime failures
29 // are ignored.
30 
31 namespace local_stream_protocol_socket_compile {
32 
connect_handler(const asio::error_code &)33 void connect_handler(const asio::error_code&)
34 {
35 }
36 
send_handler(const asio::error_code &,std::size_t)37 void send_handler(const asio::error_code&, std::size_t)
38 {
39 }
40 
receive_handler(const asio::error_code &,std::size_t)41 void receive_handler(const asio::error_code&, std::size_t)
42 {
43 }
44 
write_some_handler(const asio::error_code &,std::size_t)45 void write_some_handler(const asio::error_code&, std::size_t)
46 {
47 }
48 
read_some_handler(const asio::error_code &,std::size_t)49 void read_some_handler(const asio::error_code&, std::size_t)
50 {
51 }
52 
test()53 void test()
54 {
55 #if defined(ASIO_HAS_LOCAL_SOCKETS)
56   using namespace asio;
57   namespace local = asio::local;
58   typedef local::stream_protocol sp;
59 
60   try
61   {
62     io_context ioc;
63     char mutable_char_buffer[128] = "";
64     const char const_char_buffer[128] = "";
65     socket_base::message_flags in_flags = 0;
66     socket_base::keep_alive socket_option;
67     socket_base::bytes_readable io_control_command;
68     asio::error_code ec;
69 
70     // basic_stream_socket constructors.
71 
72     sp::socket socket1(ioc);
73     sp::socket socket2(ioc, sp());
74     sp::socket socket3(ioc, sp::endpoint(""));
75     int native_socket1 = ::socket(AF_UNIX, SOCK_STREAM, 0);
76     sp::socket socket4(ioc, sp(), native_socket1);
77 
78     // basic_io_object functions.
79 
80 #if !defined(ASIO_NO_DEPRECATED)
81     io_context& ioc_ref = socket1.get_io_context();
82     (void)ioc_ref;
83 #endif // !defined(ASIO_NO_DEPRECATED)
84 
85     sp::socket::executor_type ex = socket1.get_executor();
86     (void)ex;
87 
88     // basic_socket functions.
89 
90     sp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
91     (void)lowest_layer;
92 
93     socket1.open(sp());
94     socket1.open(sp(), ec);
95 
96     int native_socket2 = ::socket(AF_UNIX, SOCK_STREAM, 0);
97     socket1.assign(sp(), native_socket2);
98     int native_socket3 = ::socket(AF_UNIX, SOCK_STREAM, 0);
99     socket1.assign(sp(), native_socket3, ec);
100 
101     bool is_open = socket1.is_open();
102     (void)is_open;
103 
104     socket1.close();
105     socket1.close(ec);
106 
107     sp::socket::native_handle_type native_socket4 = socket1.native_handle();
108     (void)native_socket4;
109 
110     socket1.cancel();
111     socket1.cancel(ec);
112 
113     bool at_mark1 = socket1.at_mark();
114     (void)at_mark1;
115     bool at_mark2 = socket1.at_mark(ec);
116     (void)at_mark2;
117 
118     std::size_t available1 = socket1.available();
119     (void)available1;
120     std::size_t available2 = socket1.available(ec);
121     (void)available2;
122 
123     socket1.bind(sp::endpoint(""));
124     socket1.bind(sp::endpoint(""), ec);
125 
126     socket1.connect(sp::endpoint(""));
127     socket1.connect(sp::endpoint(""), ec);
128 
129     socket1.async_connect(sp::endpoint(""), connect_handler);
130 
131     socket1.set_option(socket_option);
132     socket1.set_option(socket_option, ec);
133 
134     socket1.get_option(socket_option);
135     socket1.get_option(socket_option, ec);
136 
137     socket1.io_control(io_control_command);
138     socket1.io_control(io_control_command, ec);
139 
140     sp::endpoint endpoint1 = socket1.local_endpoint();
141     sp::endpoint endpoint2 = socket1.local_endpoint(ec);
142 
143     sp::endpoint endpoint3 = socket1.remote_endpoint();
144     sp::endpoint endpoint4 = socket1.remote_endpoint(ec);
145 
146     socket1.shutdown(socket_base::shutdown_both);
147     socket1.shutdown(socket_base::shutdown_both, ec);
148 
149     // basic_stream_socket functions.
150 
151     socket1.send(buffer(mutable_char_buffer));
152     socket1.send(buffer(const_char_buffer));
153     socket1.send(null_buffers());
154     socket1.send(buffer(mutable_char_buffer), in_flags);
155     socket1.send(buffer(const_char_buffer), in_flags);
156     socket1.send(null_buffers(), in_flags);
157     socket1.send(buffer(mutable_char_buffer), in_flags, ec);
158     socket1.send(buffer(const_char_buffer), in_flags, ec);
159     socket1.send(null_buffers(), in_flags, ec);
160 
161     socket1.async_send(buffer(mutable_char_buffer), send_handler);
162     socket1.async_send(buffer(const_char_buffer), send_handler);
163     socket1.async_send(null_buffers(), send_handler);
164     socket1.async_send(buffer(mutable_char_buffer), in_flags, send_handler);
165     socket1.async_send(buffer(const_char_buffer), in_flags, send_handler);
166     socket1.async_send(null_buffers(), in_flags, send_handler);
167 
168     socket1.receive(buffer(mutable_char_buffer));
169     socket1.receive(null_buffers());
170     socket1.receive(buffer(mutable_char_buffer), in_flags);
171     socket1.receive(null_buffers(), in_flags);
172     socket1.receive(buffer(mutable_char_buffer), in_flags, ec);
173     socket1.receive(null_buffers(), in_flags, ec);
174 
175     socket1.async_receive(buffer(mutable_char_buffer), receive_handler);
176     socket1.async_receive(null_buffers(), receive_handler);
177     socket1.async_receive(buffer(mutable_char_buffer), in_flags,
178         receive_handler);
179     socket1.async_receive(null_buffers(), in_flags, receive_handler);
180 
181     socket1.write_some(buffer(mutable_char_buffer));
182     socket1.write_some(buffer(const_char_buffer));
183     socket1.write_some(null_buffers());
184     socket1.write_some(buffer(mutable_char_buffer), ec);
185     socket1.write_some(buffer(const_char_buffer), ec);
186     socket1.write_some(null_buffers(), ec);
187 
188     socket1.async_write_some(buffer(mutable_char_buffer), write_some_handler);
189     socket1.async_write_some(buffer(const_char_buffer), write_some_handler);
190     socket1.async_write_some(null_buffers(), write_some_handler);
191 
192     socket1.read_some(buffer(mutable_char_buffer));
193     socket1.read_some(buffer(mutable_char_buffer), ec);
194     socket1.read_some(null_buffers(), ec);
195 
196     socket1.async_read_some(buffer(mutable_char_buffer), read_some_handler);
197     socket1.async_read_some(null_buffers(), read_some_handler);
198   }
199   catch (std::exception&)
200   {
201   }
202 #endif // defined(ASIO_HAS_LOCAL_SOCKETS)
203 }
204 
205 } // namespace local_stream_protocol_socket_compile
206 
207 //------------------------------------------------------------------------------
208 
209 ASIO_TEST_SUITE
210 (
211   "local/stream_protocol",
212   ASIO_TEST_CASE(local_stream_protocol_socket_compile::test)
213 )
214