/test/common/protocols/admin/listresponse.cpp

https://gitlab.com/admin-github-cloud/cynara · C++ · 291 lines · 198 code · 55 blank · 38 comment · 0 complexity · d5cf55ea01114314e4317adca6c68022 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/listresponse.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::ListResponse usage in Cynara::ProtocolAdmin
  22. */
  23. #include <vector>
  24. #include <gtest/gtest.h>
  25. #include <protocol/ProtocolAdmin.h>
  26. #include <response/ListResponse.h>
  27. #include <types/Policy.h>
  28. #include <ResponseTestHelper.h>
  29. #include <TestDataCollection.h>
  30. namespace {
  31. template<>
  32. void compare(const Cynara::ListResponse &resp1, const Cynara::ListResponse &resp2) {
  33. EXPECT_EQ(resp1.policies(), resp2.policies());
  34. EXPECT_EQ(resp1.isBucketValid(), resp2.isBucketValid());
  35. EXPECT_EQ(resp1.isDbCorrupted(), resp2.isDbCorrupted());
  36. }
  37. static const bool VALID_BUCKET = true;
  38. static const bool NO_BUCKET = false;
  39. static const bool DB_OK = false;
  40. static const bool DB_CORRUPTED = true;
  41. } /* namespace anonymous */
  42. using namespace Cynara;
  43. using namespace ResponseTestHelper;
  44. using namespace TestDataCollection;
  45. /* *** compare by objects test cases *** */
  46. TEST(ProtocolAdmin, ListResponse01) {
  47. std::vector<Policy> policies = {
  48. Policy(Keys::k_nun, Results::allow),
  49. };
  50. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min);
  51. auto protocol = std::make_shared<ProtocolAdmin>();
  52. testResponse(response, protocol);
  53. }
  54. TEST(ProtocolAdmin, ListResponse02) {
  55. std::vector<Policy> policies = {
  56. Policy(Keys::k_cup, Results::deny),
  57. };
  58. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_1);
  59. auto protocol = std::make_shared<ProtocolAdmin>();
  60. testResponse(response, protocol);
  61. }
  62. TEST(ProtocolAdmin, ListResponse03) {
  63. std::vector<Policy> policies = {
  64. Policy(Keys::k_www, Results::bucket_empty),
  65. };
  66. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_2);
  67. auto protocol = std::make_shared<ProtocolAdmin>();
  68. testResponse(response, protocol);
  69. }
  70. TEST(ProtocolAdmin, ListResponse04) {
  71. std::vector<Policy> policies = {
  72. Policy(Keys::k_wuw, Results::bucket_not_empty),
  73. };
  74. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max);
  75. auto protocol = std::make_shared<ProtocolAdmin>();
  76. testResponse(response, protocol);
  77. }
  78. TEST(ProtocolAdmin, ListResponse05) {
  79. std::vector<Policy> policies = {
  80. Policy(Keys::k_aaa, Results::none),
  81. };
  82. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max_1);
  83. auto protocol = std::make_shared<ProtocolAdmin>();
  84. testResponse(response, protocol);
  85. }
  86. TEST(ProtocolAdmin, ListResponse06) {
  87. std::vector<Policy> policies = {
  88. Policy(Keys::k_wua, Results::plugin_1),
  89. };
  90. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max_2);
  91. auto protocol = std::make_shared<ProtocolAdmin>();
  92. testResponse(response, protocol);
  93. }
  94. TEST(ProtocolAdmin, ListResponse07) {
  95. std::vector<Policy> policies = {
  96. Policy(Keys::k_nua, Results::plugin_2),
  97. };
  98. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::mid);
  99. auto protocol = std::make_shared<ProtocolAdmin>();
  100. testResponse(response, protocol);
  101. }
  102. TEST(ProtocolAdmin, ListResponseMultiplePolicies) {
  103. std::vector<Policy> policies = {
  104. Policy(Keys::k_nun, Results::allow),
  105. Policy(Keys::k_cup, Results::deny),
  106. Policy(Keys::k_www, Results::bucket_empty),
  107. Policy(Keys::k_wuw, Results::bucket_not_empty),
  108. Policy(Keys::k_aaa, Results::none),
  109. Policy(Keys::k_wua, Results::plugin_1),
  110. Policy(Keys::k_nua, Results::plugin_2),
  111. };
  112. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min);
  113. auto protocol = std::make_shared<ProtocolAdmin>();
  114. testResponse(response, protocol);
  115. }
  116. TEST(ProtocolAdmin, ListResponseEmptyPolicies) {
  117. std::vector<Policy> policies;
  118. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_1);
  119. auto protocol = std::make_shared<ProtocolAdmin>();
  120. testResponse(response, protocol);
  121. }
  122. TEST(ProtocolAdmin, ListResponseNoBucket) {
  123. std::vector<Policy> policies;
  124. auto response = std::make_shared<ListResponse>(policies, NO_BUCKET, DB_OK, SN::min_2);
  125. auto protocol = std::make_shared<ProtocolAdmin>();
  126. testResponse(response, protocol);
  127. }
  128. /**
  129. * @brief Verify if ListResponse is properly (de)serialized while database is corrupted
  130. * @test Expected result:
  131. * - policies vector is empty
  132. * - bucketValid flag set to false (NO_BUCKET)
  133. * - dbCorrupted flag set to true (DB_CORRUPTED)
  134. */
  135. TEST(ProtocolAdmin, ListResponseDatabaseCorrupted) {
  136. std::vector<Policy> policies;
  137. auto response = std::make_shared<ListResponse>(policies, NO_BUCKET, DB_CORRUPTED, SN::max);
  138. auto protocol = std::make_shared<ProtocolAdmin>();
  139. testResponse(response, protocol);
  140. }
  141. /* *** compare by serialized data test cases *** */
  142. TEST(ProtocolAdmin, ListResponseBinary01) {
  143. std::vector<Policy> policies = {
  144. Policy(Keys::k_nun, Results::allow),
  145. };
  146. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min);
  147. auto protocol = std::make_shared<ProtocolAdmin>();
  148. binaryTestResponse(response, protocol);
  149. }
  150. TEST(ProtocolAdmin, ListResponseBinary02) {
  151. std::vector<Policy> policies = {
  152. Policy(Keys::k_cup, Results::deny),
  153. };
  154. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_1);
  155. auto protocol = std::make_shared<ProtocolAdmin>();
  156. binaryTestResponse(response, protocol);
  157. }
  158. TEST(ProtocolAdmin, ListResponseBinary03) {
  159. std::vector<Policy> policies = {
  160. Policy(Keys::k_www, Results::bucket_empty),
  161. };
  162. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_2);
  163. auto protocol = std::make_shared<ProtocolAdmin>();
  164. binaryTestResponse(response, protocol);
  165. }
  166. TEST(ProtocolAdmin, ListResponseBinary04) {
  167. std::vector<Policy> policies = {
  168. Policy(Keys::k_wuw, Results::bucket_not_empty),
  169. };
  170. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max);
  171. auto protocol = std::make_shared<ProtocolAdmin>();
  172. binaryTestResponse(response, protocol);
  173. }
  174. TEST(ProtocolAdmin, ListResponseBinary05) {
  175. std::vector<Policy> policies = {
  176. Policy(Keys::k_aaa, Results::none),
  177. };
  178. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max_1);
  179. auto protocol = std::make_shared<ProtocolAdmin>();
  180. binaryTestResponse(response, protocol);
  181. }
  182. TEST(ProtocolAdmin, ListResponseBinary06) {
  183. std::vector<Policy> policies = {
  184. Policy(Keys::k_wua, Results::plugin_1),
  185. };
  186. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::max_2);
  187. auto protocol = std::make_shared<ProtocolAdmin>();
  188. binaryTestResponse(response, protocol);
  189. }
  190. TEST(ProtocolAdmin, ListResponseBinary07) {
  191. std::vector<Policy> policies = {
  192. Policy(Keys::k_nua, Results::plugin_2),
  193. };
  194. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::mid);
  195. auto protocol = std::make_shared<ProtocolAdmin>();
  196. binaryTestResponse(response, protocol);
  197. }
  198. TEST(ProtocolAdmin, ListResponseBinaryMultiplePolicies) {
  199. std::vector<Policy> policies = {
  200. Policy(Keys::k_nun, Results::allow),
  201. Policy(Keys::k_cup, Results::deny),
  202. Policy(Keys::k_www, Results::bucket_empty),
  203. Policy(Keys::k_wuw, Results::bucket_not_empty),
  204. Policy(Keys::k_aaa, Results::none),
  205. Policy(Keys::k_wua, Results::plugin_1),
  206. Policy(Keys::k_nua, Results::plugin_2),
  207. };
  208. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min);
  209. auto protocol = std::make_shared<ProtocolAdmin>();
  210. binaryTestResponse(response, protocol);
  211. }
  212. TEST(ProtocolAdmin, ListResponseBinaryEmptyPolicies) {
  213. std::vector<Policy> policies;
  214. auto response = std::make_shared<ListResponse>(policies, VALID_BUCKET, DB_OK, SN::min_1);
  215. auto protocol = std::make_shared<ProtocolAdmin>();
  216. binaryTestResponse(response, protocol);
  217. }
  218. TEST(ProtocolAdmin, ListResponseBinaryNoBucket) {
  219. std::vector<Policy> policies;
  220. auto response = std::make_shared<ListResponse>(policies, NO_BUCKET, DB_OK, SN::min_2);
  221. auto protocol = std::make_shared<ProtocolAdmin>();
  222. binaryTestResponse(response, protocol);
  223. }
  224. /**
  225. * @brief Verify if ListResponse is properly (de)serialized while database is corrupted
  226. * @test Expected result:
  227. * - policies vector is empty
  228. * - bucketValid flag set to false (NO_BUCKET)
  229. * - dbCorrupted flag set to true (DB_CORRUPTED)
  230. */
  231. TEST(ProtocolAdmin, ListResponseBinaryDatabaseCorrupted) {
  232. std::vector<Policy> policies;
  233. auto response = std::make_shared<ListResponse>(policies, NO_BUCKET, DB_CORRUPTED, SN::max);
  234. auto protocol = std::make_shared<ProtocolAdmin>();
  235. binaryTestResponse(response, protocol);
  236. }