1 /*
2 * Copyright Andrey Semashev 2016.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
6 */
7 /*!
8 * \file util_ipc_object_name.cpp
9 * \author Andrey Semashev
10 * \date 07.03.2016
11 *
12 * \brief The test verifies that \c ipc::object_name works.
13 */
14
15 #if !defined(BOOST_LOG_WITHOUT_IPC)
16
17 #define BOOST_TEST_MODULE util_ipc_object_name
18
19 #include <boost/log/utility/ipc/object_name.hpp>
20 #include <boost/test/unit_test.hpp>
21 #include <string>
22 #include <iostream>
23 #include <boost/move/utility_core.hpp>
24 #include "char_definitions.hpp"
25
26 const char test_object_name1[] = "boost_log_test_object_name1";
27 const char test_object_name2[] = "boost_log_test_object_name2";
28
BOOST_AUTO_TEST_CASE(basic_functionality)29 BOOST_AUTO_TEST_CASE(basic_functionality)
30 {
31 // Default constructor.
32 {
33 boost::log::ipc::object_name name;
34 BOOST_CHECK(name.empty());
35 BOOST_CHECK(equal_strings(name.c_str(), ""));
36 }
37
38 // Initializing constructor
39 {
40 boost::log::ipc::object_name name(boost::log::ipc::object_name::global, test_object_name1);
41 BOOST_CHECK(!name.empty());
42 }
43
44 // Copy constructor
45 {
46 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
47 boost::log::ipc::object_name name2 = name1;
48 BOOST_CHECK_EQUAL(name1, name2);
49 }
50
51 // Move constructor
52 {
53 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
54 std::string name_str = name1.c_str();
55 boost::log::ipc::object_name name2 = boost::move(name1);
56 BOOST_CHECK(equal_strings(name2.c_str(), name_str.c_str()));
57 }
58
59 // Copy assignment
60 {
61 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
62 boost::log::ipc::object_name name2;
63 name2 = name1;
64 BOOST_CHECK_EQUAL(name1, name2);
65 }
66
67 // Move assignment
68 {
69 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
70 std::string name_str = name1.c_str();
71 boost::log::ipc::object_name name2;
72 name2 = boost::move(name1);
73 BOOST_CHECK(equal_strings(name2.c_str(), name_str.c_str()));
74 }
75
76 // Output
77 {
78 std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::global, test_object_name1) << std::endl;
79 std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::user, test_object_name1) << std::endl;
80 std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::session, test_object_name1) << std::endl;
81 std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::process_group, test_object_name1) << std::endl;
82 }
83 }
84
BOOST_AUTO_TEST_CASE(from_native)85 BOOST_AUTO_TEST_CASE(from_native)
86 {
87 boost::log::ipc::object_name name = boost::log::ipc::object_name::from_native(test_object_name1);
88 BOOST_CHECK(equal_strings(name.c_str(), test_object_name1));
89 }
90
BOOST_AUTO_TEST_CASE(name_equivalence)91 BOOST_AUTO_TEST_CASE(name_equivalence)
92 {
93 // Test that the same names are equal
94 {
95 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
96 boost::log::ipc::object_name name2(boost::log::ipc::object_name::global, test_object_name1);
97 BOOST_CHECK_EQUAL(name1, name2);
98 }
99 {
100 boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
101 boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name1);
102 BOOST_CHECK_EQUAL(name1, name2);
103 }
104 {
105 boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, test_object_name1);
106 boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
107 BOOST_CHECK_EQUAL(name1, name2);
108 }
109 {
110 boost::log::ipc::object_name name1(boost::log::ipc::object_name::process_group, test_object_name1);
111 boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
112 BOOST_CHECK_EQUAL(name1, name2);
113 }
114
115 // Test that different names don't clash
116 {
117 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
118 boost::log::ipc::object_name name2(boost::log::ipc::object_name::global, test_object_name2);
119 BOOST_CHECK_NE(name1, name2);
120 }
121 {
122 boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
123 boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name2);
124 BOOST_CHECK_NE(name1, name2);
125 }
126 {
127 boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, test_object_name1);
128 boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name2);
129 BOOST_CHECK_NE(name1, name2);
130 }
131 {
132 boost::log::ipc::object_name name1(boost::log::ipc::object_name::process_group, test_object_name1);
133 boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name2);
134 BOOST_CHECK_NE(name1, name2);
135 }
136
137 // Test that same named in different scopes don't clash
138 {
139 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
140 boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name1);
141 BOOST_CHECK_NE(name1, name2);
142 }
143 {
144 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
145 boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
146 BOOST_CHECK_NE(name1, name2);
147 }
148 {
149 boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
150 boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
151 BOOST_CHECK_NE(name1, name2);
152 }
153 {
154 boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
155 boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
156 BOOST_CHECK_NE(name1, name2);
157 }
158 {
159 boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
160 boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
161 BOOST_CHECK_NE(name1, name2);
162 }
163 {
164 boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, test_object_name1);
165 boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
166 BOOST_CHECK_NE(name1, name2);
167 }
168 }
169
170 #else // !defined(BOOST_LOG_WITHOUT_IPC)
171
main()172 int main()
173 {
174 return 0;
175 }
176
177 #endif // !defined(BOOST_LOG_WITHOUT_IPC)
178