PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/test/common/protocols/admin/descriptionlistresponse.cpp

https://gitlab.com/github-cloud-corporation/cynara
C++ | 242 lines | 163 code | 43 blank | 36 comment | 1 complexity | ab2f3f4b29b8db4870221157849ca336 MD5 | raw file
  1. /*
  2. * Copyright (c) 2014-2015 Samsung Electronics Co., Ltd All Rights Reserved
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /**
  17. * @file test/common/protocols/admin/descriptionlistresponse.cpp
  18. * @author Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
  19. * @author Pawel Wieczorek <p.wieczorek2@samsung.com>
  20. * @version 1.0
  21. * @brief Tests for Cynara::DescriptionListResponse usage in Cynara::ProtocolAdmin
  22. */
  23. #include <vector>
  24. #include <gtest/gtest.h>
  25. #include <protocol/ProtocolAdmin.h>
  26. #include <response/DescriptionListResponse.h>
  27. #include <types/PolicyDescription.h>
  28. #include <ResponseTestHelper.h>
  29. #include <TestDataCollection.h>
  30. namespace {
  31. template<>
  32. void compare(const Cynara::DescriptionListResponse &resp1,
  33. const Cynara::DescriptionListResponse &resp2) {
  34. ASSERT_EQ(resp1.descriptions().size(), resp2.descriptions().size());
  35. for (size_t i = 0U; i < resp1.descriptions().size(); ++i) {
  36. SCOPED_TRACE(std::to_string(i));
  37. EXPECT_EQ(resp1.descriptions()[i].name, resp2.descriptions()[i].name);
  38. EXPECT_EQ(resp1.descriptions()[i].type, resp2.descriptions()[i].type);
  39. }
  40. EXPECT_EQ(resp1.isDbCorrupted(), resp2.isDbCorrupted());
  41. }
  42. static const bool DB_OK = false;
  43. static const bool DB_CORRUPTED = true;
  44. } /* namespace anonymous */
  45. using namespace Cynara;
  46. using namespace ResponseTestHelper;
  47. using namespace TestDataCollection;
  48. /* *** compare by objects test cases *** */
  49. TEST(ProtocolAdmin, DescriptionListResponse01) {
  50. std::vector<PolicyDescription> descriptions = {
  51. PolicyDescription(Types::allow, "allow"),
  52. };
  53. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min);
  54. auto protocol = std::make_shared<ProtocolAdmin>();
  55. testResponse(response, protocol);
  56. }
  57. TEST(ProtocolAdmin, DescriptionListResponse02) {
  58. std::vector<PolicyDescription> descriptions = {
  59. PolicyDescription(Types::bucket, "bucket"),
  60. };
  61. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min_1);
  62. auto protocol = std::make_shared<ProtocolAdmin>();
  63. testResponse(response, protocol);
  64. }
  65. TEST(ProtocolAdmin, DescriptionListResponse03) {
  66. std::vector<PolicyDescription> descriptions = {
  67. PolicyDescription(Types::deny, "deny"),
  68. };
  69. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max);
  70. auto protocol = std::make_shared<ProtocolAdmin>();
  71. testResponse(response, protocol);
  72. }
  73. TEST(ProtocolAdmin, DescriptionListResponse04) {
  74. std::vector<PolicyDescription> descriptions = {
  75. PolicyDescription(Types::none, "none"),
  76. };
  77. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max_1);
  78. auto protocol = std::make_shared<ProtocolAdmin>();
  79. testResponse(response, protocol);
  80. }
  81. TEST(ProtocolAdmin, DescriptionListResponse05) {
  82. std::vector<PolicyDescription> descriptions = {
  83. PolicyDescription(Types::plugin_type, "plugin"),
  84. };
  85. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::mid);
  86. auto protocol = std::make_shared<ProtocolAdmin>();
  87. testResponse(response, protocol);
  88. }
  89. TEST(ProtocolAdmin, DescriptionListResponseMultipleDescriptions) {
  90. std::vector<PolicyDescription> descriptions = {
  91. PolicyDescription(Types::allow, "allow"),
  92. PolicyDescription(Types::bucket, "bucket"),
  93. PolicyDescription(Types::deny, "deny"),
  94. PolicyDescription(Types::none, "none"),
  95. PolicyDescription(Types::plugin_type, ""),
  96. PolicyDescription(Types::plugin_type, "plugin"),
  97. PolicyDescription(Types::plugin_type, "plugin"),
  98. };
  99. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max_2);
  100. auto protocol = std::make_shared<ProtocolAdmin>();
  101. testResponse(response, protocol);
  102. }
  103. TEST(ProtocolAdmin, DescriptionListResponseEmptyDescriptions) {
  104. std::vector<PolicyDescription> descriptions;
  105. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min_2);
  106. auto protocol = std::make_shared<ProtocolAdmin>();
  107. testResponse(response, protocol);
  108. }
  109. /**
  110. * @brief Verify if DescriptionListResponse is properly (de)serialized while database is corrupted
  111. * @test Expected result:
  112. * - descriptions vector contains predefined policies ALLOW and DENY
  113. * - dbCorrupted flag set to true (DB_CORRUPTED)
  114. */
  115. TEST(ProtocolAdmin, DescriptionListResponseDatabaseCorrupted) {
  116. std::vector<PolicyDescription> descriptions = {
  117. PolicyDescription(Types::allow, "allow"),
  118. PolicyDescription(Types::bucket, "bucket"),
  119. };
  120. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_CORRUPTED, SN::max);
  121. auto protocol = std::make_shared<ProtocolAdmin>();
  122. testResponse(response, protocol);
  123. }
  124. /* *** compare by serialized data test cases *** */
  125. TEST(ProtocolAdmin, DescriptionListResponseBinary01) {
  126. std::vector<PolicyDescription> descriptions = {
  127. PolicyDescription(Types::allow, "allow"),
  128. };
  129. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min);
  130. auto protocol = std::make_shared<ProtocolAdmin>();
  131. binaryTestResponse(response, protocol);
  132. }
  133. TEST(ProtocolAdmin, DescriptionListResponseBinary02) {
  134. std::vector<PolicyDescription> descriptions = {
  135. PolicyDescription(Types::bucket, "bucket"),
  136. };
  137. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min_1);
  138. auto protocol = std::make_shared<ProtocolAdmin>();
  139. binaryTestResponse(response, protocol);
  140. }
  141. TEST(ProtocolAdmin, DescriptionListResponseBinary03) {
  142. std::vector<PolicyDescription> descriptions = {
  143. PolicyDescription(Types::deny, "deny"),
  144. };
  145. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max);
  146. auto protocol = std::make_shared<ProtocolAdmin>();
  147. binaryTestResponse(response, protocol);
  148. }
  149. TEST(ProtocolAdmin, DescriptionListResponseBinary04) {
  150. std::vector<PolicyDescription> descriptions = {
  151. PolicyDescription(Types::none, "none"),
  152. };
  153. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max_1);
  154. auto protocol = std::make_shared<ProtocolAdmin>();
  155. binaryTestResponse(response, protocol);
  156. }
  157. TEST(ProtocolAdmin, DescriptionListResponseBinary05) {
  158. std::vector<PolicyDescription> descriptions = {
  159. PolicyDescription(Types::plugin_type, "plugin"),
  160. };
  161. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::mid);
  162. auto protocol = std::make_shared<ProtocolAdmin>();
  163. binaryTestResponse(response, protocol);
  164. }
  165. TEST(ProtocolAdmin, DescriptionListResponseBinaryMultipleDescriptions) {
  166. std::vector<PolicyDescription> descriptions = {
  167. PolicyDescription(Types::allow, "allow"),
  168. PolicyDescription(Types::bucket, "bucket"),
  169. PolicyDescription(Types::deny, "deny"),
  170. PolicyDescription(Types::none, "none"),
  171. PolicyDescription(Types::plugin_type, ""),
  172. PolicyDescription(Types::plugin_type, "plugin"),
  173. PolicyDescription(Types::plugin_type, "plugin"),
  174. };
  175. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::max_2);
  176. auto protocol = std::make_shared<ProtocolAdmin>();
  177. binaryTestResponse(response, protocol);
  178. }
  179. TEST(ProtocolAdmin, DescriptionListResponseBinaryEmptyDescriptions) {
  180. std::vector<PolicyDescription> descriptions;
  181. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_OK, SN::min_2);
  182. auto protocol = std::make_shared<ProtocolAdmin>();
  183. binaryTestResponse(response, protocol);
  184. }
  185. /**
  186. * @brief Verify if DescriptionListResponse is properly (de)serialized while database is corrupted
  187. * @test Expected result:
  188. * - descriptions vector contains predefined policies ALLOW and DENY
  189. * - dbCorrupted flag set to true (DB_CORRUPTED)
  190. */
  191. TEST(ProtocolAdmin, DescriptionListResponseBinaryDatabaseCorrupted) {
  192. std::vector<PolicyDescription> descriptions = {
  193. PolicyDescription(Types::allow, "allow"),
  194. PolicyDescription(Types::bucket, "bucket"),
  195. };
  196. auto response = std::make_shared<DescriptionListResponse>(descriptions, DB_CORRUPTED, SN::max);
  197. auto protocol = std::make_shared<ProtocolAdmin>();
  198. binaryTestResponse(response, protocol);
  199. }