util_ipc_object_name.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. #if !defined(BOOST_LOG_WITHOUT_IPC)
  15. #define BOOST_TEST_MODULE util_ipc_object_name
  16. #include <boost/log/utility/ipc/object_name.hpp>
  17. #include <boost/test/unit_test.hpp>
  18. #include <string>
  19. #include <iostream>
  20. #include <boost/move/utility_core.hpp>
  21. #include "char_definitions.hpp"
  22. const char test_object_name1[] = "boost_log_test_object_name1";
  23. const char test_object_name2[] = "boost_log_test_object_name2";
  24. BOOST_AUTO_TEST_CASE(basic_functionality)
  25. {
  26. // Default constructor.
  27. {
  28. boost::log::ipc::object_name name;
  29. BOOST_CHECK(name.empty());
  30. BOOST_CHECK(equal_strings(name.c_str(), ""));
  31. }
  32. // Initializing constructor
  33. {
  34. boost::log::ipc::object_name name(boost::log::ipc::object_name::global, test_object_name1);
  35. BOOST_CHECK(!name.empty());
  36. }
  37. // Copy constructor
  38. {
  39. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  40. boost::log::ipc::object_name name2 = name1;
  41. BOOST_CHECK_EQUAL(name1, name2);
  42. }
  43. // Move constructor
  44. {
  45. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  46. std::string name_str = name1.c_str();
  47. boost::log::ipc::object_name name2 = boost::move(name1);
  48. BOOST_CHECK(equal_strings(name2.c_str(), name_str.c_str()));
  49. }
  50. // Copy assignment
  51. {
  52. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  53. boost::log::ipc::object_name name2;
  54. name2 = name1;
  55. BOOST_CHECK_EQUAL(name1, name2);
  56. }
  57. // Move assignment
  58. {
  59. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  60. std::string name_str = name1.c_str();
  61. boost::log::ipc::object_name name2;
  62. name2 = boost::move(name1);
  63. BOOST_CHECK(equal_strings(name2.c_str(), name_str.c_str()));
  64. }
  65. // Output
  66. {
  67. std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::global, test_object_name1) << std::endl;
  68. std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::user, test_object_name1) << std::endl;
  69. std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::session, test_object_name1) << std::endl;
  70. std::cout << boost::log::ipc::object_name(boost::log::ipc::object_name::process_group, test_object_name1) << std::endl;
  71. }
  72. }
  73. BOOST_AUTO_TEST_CASE(from_native)
  74. {
  75. boost::log::ipc::object_name name = boost::log::ipc::object_name::from_native(test_object_name1);
  76. BOOST_CHECK(equal_strings(name.c_str(), test_object_name1));
  77. }
  78. BOOST_AUTO_TEST_CASE(name_equivalence)
  79. {
  80. // Test that the same names are equal
  81. {
  82. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  83. boost::log::ipc::object_name name2(boost::log::ipc::object_name::global, test_object_name1);
  84. BOOST_CHECK_EQUAL(name1, name2);
  85. }
  86. {
  87. boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
  88. boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name1);
  89. BOOST_CHECK_EQUAL(name1, name2);
  90. }
  91. {
  92. boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, test_object_name1);
  93. boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
  94. BOOST_CHECK_EQUAL(name1, name2);
  95. }
  96. {
  97. boost::log::ipc::object_name name1(boost::log::ipc::object_name::process_group, test_object_name1);
  98. boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
  99. BOOST_CHECK_EQUAL(name1, name2);
  100. }
  101. // Test that different names don't clash
  102. {
  103. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  104. boost::log::ipc::object_name name2(boost::log::ipc::object_name::global, test_object_name2);
  105. BOOST_CHECK_NE(name1, name2);
  106. }
  107. {
  108. boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
  109. boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name2);
  110. BOOST_CHECK_NE(name1, name2);
  111. }
  112. {
  113. boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, test_object_name1);
  114. boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name2);
  115. BOOST_CHECK_NE(name1, name2);
  116. }
  117. {
  118. boost::log::ipc::object_name name1(boost::log::ipc::object_name::process_group, test_object_name1);
  119. boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name2);
  120. BOOST_CHECK_NE(name1, name2);
  121. }
  122. // Test that same named in different scopes don't clash
  123. {
  124. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  125. boost::log::ipc::object_name name2(boost::log::ipc::object_name::user, test_object_name1);
  126. BOOST_CHECK_NE(name1, name2);
  127. }
  128. {
  129. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  130. boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
  131. BOOST_CHECK_NE(name1, name2);
  132. }
  133. {
  134. boost::log::ipc::object_name name1(boost::log::ipc::object_name::global, test_object_name1);
  135. boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
  136. BOOST_CHECK_NE(name1, name2);
  137. }
  138. {
  139. boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
  140. boost::log::ipc::object_name name2(boost::log::ipc::object_name::session, test_object_name1);
  141. BOOST_CHECK_NE(name1, name2);
  142. }
  143. {
  144. boost::log::ipc::object_name name1(boost::log::ipc::object_name::user, test_object_name1);
  145. boost::log::ipc::object_name name2(boost::log::ipc::object_name::process_group, test_object_name1);
  146. BOOST_CHECK_NE(name1, name2);
  147. }
  148. {
  149. boost::log::ipc::object_name name1(boost::log::ipc::object_name::session, 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. #else // !defined(BOOST_LOG_WITHOUT_IPC)
  155. int main()
  156. {
  157. return 0;
  158. }
  159. #endif // !defined(BOOST_LOG_WITHOUT_IPC)