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
31namespace local_stream_protocol_socket_compile {
32
33void connect_handler(const boost::system::error_code&)
34{
35}
36
37void send_handler(const boost::system::error_code&, std::size_t)
38{
39}
40
41void receive_handler(const boost::system::error_code&, std::size_t)
42{
43}
44
45void write_some_handler(const boost::system::error_code&, std::size_t)
46{
47}
48
49void read_some_handler(const boost::system::error_code&, std::size_t)
50{
51}
52
53void 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, protocol: 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(protocol: sp());
89 socket1.open(protocol: sp(), ec);
90
91 int native_socket2 = ::socket(AF_UNIX, SOCK_STREAM, protocol: 0);
92 socket1.assign(protocol: sp(), native_socket: native_socket2);
93 int native_socket3 = ::socket(AF_UNIX, SOCK_STREAM, protocol: 0);
94 socket1.assign(protocol: sp(), native_socket: 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(endpoint: sp::endpoint(""));
119 socket1.bind(endpoint: sp::endpoint(""), ec);
120
121 socket1.connect(peer_endpoint: sp::endpoint(""));
122 socket1.connect(peer_endpoint: sp::endpoint(""), ec);
123
124 socket1.async_connect(peer_endpoint: sp::endpoint(""), handler&: connect_handler);
125
126 socket1.set_option(socket_option);
127 socket1.set_option(option: socket_option, ec);
128
129 socket1.get_option(option&: socket_option);
130 socket1.get_option(option&: socket_option, ec);
131
132 socket1.io_control(command&: io_control_command);
133 socket1.io_control(command&: 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(what: socket_base::shutdown_both);
142 socket1.shutdown(what: socket_base::shutdown_both, ec);
143
144 // basic_stream_socket functions.
145
146 socket1.send(buffers: buffer(data&: mutable_char_buffer));
147 socket1.send(buffers: buffer(data: const_char_buffer));
148 socket1.send(buffers: null_buffers());
149 socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags);
150 socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags);
151 socket1.send(buffers: null_buffers(), flags: in_flags);
152 socket1.send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec);
153 socket1.send(buffers: buffer(data: const_char_buffer), flags: in_flags, ec);
154 socket1.send(buffers: null_buffers(), flags: in_flags, ec);
155
156 socket1.async_send(buffers: buffer(data&: mutable_char_buffer), handler&: send_handler);
157 socket1.async_send(buffers: buffer(data: const_char_buffer), handler&: send_handler);
158 socket1.async_send(buffers: null_buffers(), handler&: send_handler);
159 socket1.async_send(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, handler&: send_handler);
160 socket1.async_send(buffers: buffer(data: const_char_buffer), flags: in_flags, handler&: send_handler);
161 socket1.async_send(buffers: null_buffers(), flags: in_flags, handler&: send_handler);
162
163 socket1.receive(buffers: buffer(data&: mutable_char_buffer));
164 socket1.receive(buffers: null_buffers());
165 socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags);
166 socket1.receive(buffers: null_buffers(), flags: in_flags);
167 socket1.receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags, ec);
168 socket1.receive(buffers: null_buffers(), flags: in_flags, ec);
169
170 socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), handler&: receive_handler);
171 socket1.async_receive(buffers: null_buffers(), handler&: receive_handler);
172 socket1.async_receive(buffers: buffer(data&: mutable_char_buffer), flags: in_flags,
173 handler&: receive_handler);
174 socket1.async_receive(buffers: null_buffers(), flags: in_flags, handler&: receive_handler);
175
176 socket1.write_some(buffers: buffer(data&: mutable_char_buffer));
177 socket1.write_some(buffers: buffer(data: const_char_buffer));
178 socket1.write_some(buffers: null_buffers());
179 socket1.write_some(buffers: buffer(data&: mutable_char_buffer), ec);
180 socket1.write_some(buffers: buffer(data: const_char_buffer), ec);
181 socket1.write_some(buffers: null_buffers(), ec);
182
183 socket1.async_write_some(buffers: buffer(data&: mutable_char_buffer), handler&: write_some_handler);
184 socket1.async_write_some(buffers: buffer(data: const_char_buffer), handler&: write_some_handler);
185 socket1.async_write_some(buffers: null_buffers(), handler&: write_some_handler);
186
187 socket1.read_some(buffers: buffer(data&: mutable_char_buffer));
188 socket1.read_some(buffers: buffer(data&: mutable_char_buffer), ec);
189 socket1.read_some(buffers: null_buffers(), ec);
190
191 socket1.async_read_some(buffers: buffer(data&: mutable_char_buffer), handler&: read_some_handler);
192 socket1.async_read_some(buffers: null_buffers(), handler&: 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
204BOOST_ASIO_TEST_SUITE
205(
206 "local/stream_protocol",
207 BOOST_ASIO_TEST_CASE(local_stream_protocol_socket_compile::test)
208)
209

source code of boost/libs/asio/test/local/stream_protocol.cpp