• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // datagram_protocol.cpp
3 // ~~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2021 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 <boost/asio/local/datagram_protocol.hpp>
18 
19 #include <cstring>
20 #include <boost/asio/io_context.hpp>
21 #include "../unit_test.hpp"
22 
23 //------------------------------------------------------------------------------
24 
25 // local_datagram_protocol_socket_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // local::datagram_socket::socket compile and link correctly. Runtime failures
29 // are ignored.
30 
31 namespace local_datagram_protocol_socket_compile {
32 
connect_handler(const boost::system::error_code &)33 void connect_handler(const boost::system::error_code&)
34 {
35 }
36 
send_handler(const boost::system::error_code &,std::size_t)37 void send_handler(const boost::system::error_code&, std::size_t)
38 {
39 }
40 
receive_handler(const boost::system::error_code &,std::size_t)41 void receive_handler(const boost::system::error_code&, std::size_t)
42 {
43 }
44 
test()45 void test()
46 {
47 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
48   using namespace boost::asio;
49   namespace local = boost::asio::local;
50   typedef local::datagram_protocol dp;
51 
52   try
53   {
54     io_context ioc;
55     const io_context::executor_type ioc_ex = ioc.get_executor();
56     char mutable_char_buffer[128] = "";
57     const char const_char_buffer[128] = "";
58     socket_base::message_flags in_flags = 0;
59     socket_base::send_buffer_size socket_option;
60     socket_base::bytes_readable io_control_command;
61     boost::system::error_code ec;
62 
63     // basic_datagram_socket constructors.
64 
65     dp::socket socket1(ioc);
66     dp::socket socket2(ioc, dp());
67     dp::socket socket3(ioc, dp::endpoint(""));
68     int native_socket1 = ::socket(AF_UNIX, SOCK_DGRAM, 0);
69     dp::socket socket4(ioc, dp(), native_socket1);
70 
71     dp::socket socket5(ioc_ex);
72     dp::socket socket6(ioc_ex, dp());
73     dp::socket socket7(ioc_ex, dp::endpoint(""));
74     int native_socket2 = ::socket(AF_UNIX, SOCK_DGRAM, 0);
75     dp::socket socket8(ioc_ex, dp(), native_socket2);
76 
77     // basic_io_object functions.
78 
79     dp::socket::executor_type ex = socket1.get_executor();
80     (void)ex;
81 
82     // basic_socket functions.
83 
84     dp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
85     (void)lowest_layer;
86 
87     socket1.open(dp());
88     socket1.open(dp(), ec);
89 
90     int native_socket3 = ::socket(AF_UNIX, SOCK_DGRAM, 0);
91     socket1.assign(dp(), native_socket3);
92     int native_socket4 = ::socket(AF_UNIX, SOCK_DGRAM, 0);
93     socket1.assign(dp(), native_socket4, ec);
94 
95     bool is_open = socket1.is_open();
96     (void)is_open;
97 
98     socket1.close();
99     socket1.close(ec);
100 
101     dp::socket::native_handle_type native_socket5 = socket1.native_handle();
102     (void)native_socket5;
103 
104     socket1.cancel();
105     socket1.cancel(ec);
106 
107     bool at_mark1 = socket1.at_mark();
108     (void)at_mark1;
109     bool at_mark2 = socket1.at_mark(ec);
110     (void)at_mark2;
111 
112     std::size_t available1 = socket1.available();
113     (void)available1;
114     std::size_t available2 = socket1.available(ec);
115     (void)available2;
116 
117     socket1.bind(dp::endpoint(""));
118     socket1.bind(dp::endpoint(""), ec);
119 
120     socket1.connect(dp::endpoint(""));
121     socket1.connect(dp::endpoint(""), ec);
122 
123     socket1.async_connect(dp::endpoint(""), connect_handler);
124 
125     socket1.set_option(socket_option);
126     socket1.set_option(socket_option, ec);
127 
128     socket1.get_option(socket_option);
129     socket1.get_option(socket_option, ec);
130 
131     socket1.io_control(io_control_command);
132     socket1.io_control(io_control_command, ec);
133 
134     dp::endpoint endpoint1 = socket1.local_endpoint();
135     (void)endpoint1;
136     dp::endpoint endpoint2 = socket1.local_endpoint(ec);
137     (void)endpoint2;
138 
139     dp::endpoint endpoint3 = socket1.remote_endpoint();
140     (void)endpoint3;
141     dp::endpoint endpoint4 = socket1.remote_endpoint(ec);
142     (void)endpoint4;
143 
144     socket1.shutdown(socket_base::shutdown_both);
145     socket1.shutdown(socket_base::shutdown_both, ec);
146 
147     // basic_datagram_socket functions.
148 
149     socket1.send(buffer(mutable_char_buffer));
150     socket1.send(buffer(const_char_buffer));
151     socket1.send(null_buffers());
152     socket1.send(buffer(mutable_char_buffer), in_flags);
153     socket1.send(buffer(const_char_buffer), in_flags);
154     socket1.send(null_buffers(), in_flags);
155     socket1.send(buffer(mutable_char_buffer), in_flags, ec);
156     socket1.send(buffer(const_char_buffer), in_flags, ec);
157     socket1.send(null_buffers(), in_flags, ec);
158 
159     socket1.async_send(buffer(mutable_char_buffer), send_handler);
160     socket1.async_send(buffer(const_char_buffer), send_handler);
161     socket1.async_send(null_buffers(), send_handler);
162     socket1.async_send(buffer(mutable_char_buffer), in_flags, send_handler);
163     socket1.async_send(buffer(const_char_buffer), in_flags, send_handler);
164     socket1.async_send(null_buffers(), in_flags, send_handler);
165 
166     socket1.send_to(buffer(mutable_char_buffer),
167         dp::endpoint(""));
168     socket1.send_to(buffer(const_char_buffer),
169         dp::endpoint(""));
170     socket1.send_to(null_buffers(),
171         dp::endpoint(""));
172     socket1.send_to(buffer(mutable_char_buffer),
173         dp::endpoint(""), in_flags);
174     socket1.send_to(buffer(const_char_buffer),
175         dp::endpoint(""), in_flags);
176     socket1.send_to(null_buffers(),
177         dp::endpoint(""), in_flags);
178     socket1.send_to(buffer(mutable_char_buffer),
179         dp::endpoint(""), in_flags, ec);
180     socket1.send_to(buffer(const_char_buffer),
181         dp::endpoint(""), in_flags, ec);
182     socket1.send_to(null_buffers(),
183         dp::endpoint(""), in_flags, ec);
184 
185     socket1.async_send_to(buffer(mutable_char_buffer),
186         dp::endpoint(""), send_handler);
187     socket1.async_send_to(buffer(const_char_buffer),
188         dp::endpoint(""), send_handler);
189     socket1.async_send_to(null_buffers(),
190         dp::endpoint(""), send_handler);
191     socket1.async_send_to(buffer(mutable_char_buffer),
192         dp::endpoint(""), in_flags, send_handler);
193     socket1.async_send_to(buffer(const_char_buffer),
194         dp::endpoint(""), in_flags, send_handler);
195     socket1.async_send_to(null_buffers(),
196         dp::endpoint(""), in_flags, send_handler);
197 
198     socket1.receive(buffer(mutable_char_buffer));
199     socket1.receive(null_buffers());
200     socket1.receive(buffer(mutable_char_buffer), in_flags);
201     socket1.receive(null_buffers(), in_flags);
202     socket1.receive(buffer(mutable_char_buffer), in_flags, ec);
203     socket1.receive(null_buffers(), in_flags, ec);
204 
205     socket1.async_receive(buffer(mutable_char_buffer), receive_handler);
206     socket1.async_receive(null_buffers(), receive_handler);
207     socket1.async_receive(buffer(mutable_char_buffer), in_flags,
208         receive_handler);
209     socket1.async_receive(null_buffers(), in_flags, receive_handler);
210 
211     dp::endpoint endpoint;
212     socket1.receive_from(buffer(mutable_char_buffer), endpoint);
213     socket1.receive_from(null_buffers(), endpoint);
214     socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags);
215     socket1.receive_from(null_buffers(), endpoint, in_flags);
216     socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags, ec);
217     socket1.receive_from(null_buffers(), endpoint, in_flags, ec);
218 
219     socket1.async_receive_from(buffer(mutable_char_buffer),
220         endpoint, receive_handler);
221     socket1.async_receive_from(null_buffers(),
222         endpoint, receive_handler);
223     socket1.async_receive_from(buffer(mutable_char_buffer),
224         endpoint, in_flags, receive_handler);
225     socket1.async_receive_from(null_buffers(),
226         endpoint, in_flags, receive_handler);
227   }
228   catch (std::exception&)
229   {
230   }
231 #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
232 }
233 
234 } // namespace local_datagram_protocol_socket_compile
235 
236 //------------------------------------------------------------------------------
237 
238 BOOST_ASIO_TEST_SUITE
239 (
240   "local/datagram_protocol",
241   BOOST_ASIO_TEST_CASE(local_datagram_protocol_socket_compile::test)
242 )
243