1 //
2 // stream_protocol.cpp
3 // ~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2015 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/stream_protocol.hpp>
18 
19 #include <cstring>
20 #include <boost/asio/io_service.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 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 
write_some_handler(const boost::system::error_code &,std::size_t)45 void write_some_handler(const boost::system::error_code&, std::size_t)
46 {
47 }
48 
read_some_handler(const boost::system::error_code &,std::size_t)49 void read_some_handler(const boost::system::error_code&, std::size_t)
50 {
51 }
52 
test()53 void test()
54 {
55 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
56   using namespace boost::asio;
57   namespace local = boost::asio::local;
58   typedef local::stream_protocol sp;
59 
60   try
61   {
62     io_service ios;
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     boost::system::error_code ec;
69 
70     // basic_stream_socket constructors.
71 
72     sp::socket socket1(ios);
73     sp::socket socket2(ios, sp());
74     sp::socket socket3(ios, sp::endpoint(""));
75     int native_socket1 = ::socket(AF_UNIX, SOCK_STREAM, 0);
76     sp::socket socket4(ios, sp(), native_socket1);
77 
78     // basic_io_object functions.
79 
80     io_service& ios_ref = socket1.get_io_service();
81     (void)ios_ref;
82 
83     // basic_socket functions.
84 
85     sp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer();
86     (void)lowest_layer;
87 
88     socket1.open(sp());
89     socket1.open(sp(), ec);
90 
91     int native_socket2 = ::socket(AF_UNIX, SOCK_STREAM, 0);
92     socket1.assign(sp(), native_socket2);
93     int native_socket3 = ::socket(AF_UNIX, SOCK_STREAM, 0);
94     socket1.assign(sp(), native_socket3, ec);
95 
96     bool is_open = socket1.is_open();
97     (void)is_open;
98 
99     socket1.close();
100     socket1.close(ec);
101 
102     sp::socket::native_type native_socket4 = socket1.native();
103     (void)native_socket4;
104 
105     socket1.cancel();
106     socket1.cancel(ec);
107 
108     bool at_mark1 = socket1.at_mark();
109     (void)at_mark1;
110     bool at_mark2 = socket1.at_mark(ec);
111     (void)at_mark2;
112 
113     std::size_t available1 = socket1.available();
114     (void)available1;
115     std::size_t available2 = socket1.available(ec);
116     (void)available2;
117 
118     socket1.bind(sp::endpoint(""));
119     socket1.bind(sp::endpoint(""), ec);
120 
121     socket1.connect(sp::endpoint(""));
122     socket1.connect(sp::endpoint(""), ec);
123 
124     socket1.async_connect(sp::endpoint(""), connect_handler);
125 
126     socket1.set_option(socket_option);
127     socket1.set_option(socket_option, ec);
128 
129     socket1.get_option(socket_option);
130     socket1.get_option(socket_option, ec);
131 
132     socket1.io_control(io_control_command);
133     socket1.io_control(io_control_command, ec);
134 
135     sp::endpoint endpoint1 = socket1.local_endpoint();
136     sp::endpoint endpoint2 = socket1.local_endpoint(ec);
137 
138     sp::endpoint endpoint3 = socket1.remote_endpoint();
139     sp::endpoint endpoint4 = socket1.remote_endpoint(ec);
140 
141     socket1.shutdown(socket_base::shutdown_both);
142     socket1.shutdown(socket_base::shutdown_both, ec);
143 
144     // basic_stream_socket functions.
145 
146     socket1.send(buffer(mutable_char_buffer));
147     socket1.send(buffer(const_char_buffer));
148     socket1.send(null_buffers());
149     socket1.send(buffer(mutable_char_buffer), in_flags);
150     socket1.send(buffer(const_char_buffer), in_flags);
151     socket1.send(null_buffers(), in_flags);
152     socket1.send(buffer(mutable_char_buffer), in_flags, ec);
153     socket1.send(buffer(const_char_buffer), in_flags, ec);
154     socket1.send(null_buffers(), in_flags, ec);
155 
156     socket1.async_send(buffer(mutable_char_buffer), send_handler);
157     socket1.async_send(buffer(const_char_buffer), send_handler);
158     socket1.async_send(null_buffers(), send_handler);
159     socket1.async_send(buffer(mutable_char_buffer), in_flags, send_handler);
160     socket1.async_send(buffer(const_char_buffer), in_flags, send_handler);
161     socket1.async_send(null_buffers(), in_flags, send_handler);
162 
163     socket1.receive(buffer(mutable_char_buffer));
164     socket1.receive(null_buffers());
165     socket1.receive(buffer(mutable_char_buffer), in_flags);
166     socket1.receive(null_buffers(), in_flags);
167     socket1.receive(buffer(mutable_char_buffer), in_flags, ec);
168     socket1.receive(null_buffers(), in_flags, ec);
169 
170     socket1.async_receive(buffer(mutable_char_buffer), receive_handler);
171     socket1.async_receive(null_buffers(), receive_handler);
172     socket1.async_receive(buffer(mutable_char_buffer), in_flags,
173         receive_handler);
174     socket1.async_receive(null_buffers(), in_flags, receive_handler);
175 
176     socket1.write_some(buffer(mutable_char_buffer));
177     socket1.write_some(buffer(const_char_buffer));
178     socket1.write_some(null_buffers());
179     socket1.write_some(buffer(mutable_char_buffer), ec);
180     socket1.write_some(buffer(const_char_buffer), ec);
181     socket1.write_some(null_buffers(), ec);
182 
183     socket1.async_write_some(buffer(mutable_char_buffer), write_some_handler);
184     socket1.async_write_some(buffer(const_char_buffer), write_some_handler);
185     socket1.async_write_some(null_buffers(), write_some_handler);
186 
187     socket1.read_some(buffer(mutable_char_buffer));
188     socket1.read_some(buffer(mutable_char_buffer), ec);
189     socket1.read_some(null_buffers(), ec);
190 
191     socket1.async_read_some(buffer(mutable_char_buffer), read_some_handler);
192     socket1.async_read_some(null_buffers(), read_some_handler);
193   }
194   catch (std::exception&)
195   {
196   }
197 #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
198 }
199 
200 } // namespace local_stream_protocol_socket_compile
201 
202 //------------------------------------------------------------------------------
203 
204 BOOST_ASIO_TEST_SUITE
205 (
206   "local/stream_protocol",
207   BOOST_ASIO_TEST_CASE(local_stream_protocol_socket_compile::test)
208 )
209