• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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