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

/test/storage/storage/policies.cpp

https://gitlab.com/github-cloud-corporation/cynara
C++ | 206 lines | 137 code | 47 blank | 22 comment | 3 complexity | 6e963ae9b6d57ccbf00a594cf99b703c MD5 | raw file
  1. /*
  2. * Copyright (c) 2014 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/storage/storage/policies.cpp
  18. * @author Aleksander Zdyb <a.zdyb@samsung.com>
  19. * @version 1.0
  20. * @brief Tests of policies in Storage
  21. */
  22. #include <map>
  23. #include <memory>
  24. #include <tuple>
  25. #include <vector>
  26. #include <gmock/gmock.h>
  27. #include <gtest/gtest.h>
  28. #include <exceptions/BucketNotExistsException.h>
  29. #include <storage/Storage.h>
  30. #include <storage/StorageBackend.h>
  31. #include <types/pointers.h>
  32. #include <types/PolicyCollection.h>
  33. #include <types/PolicyKey.h>
  34. #include <types/PolicyResult.h>
  35. #include <types/PolicyType.h>
  36. #include "../../helpers.h"
  37. #include "fakestoragebackend.h"
  38. using namespace Cynara;
  39. TEST(storage, deletePolicies) {
  40. FakeStorageBackend backend;
  41. Cynara::Storage storage(backend);
  42. auto pk1 = Helpers::generatePolicyKey("1");
  43. auto pk2 = Helpers::generatePolicyKey("2");
  44. PolicyBucketId bucketId1 = "bucket-1";
  45. PolicyBucketId bucketId2 = "bucket-2";
  46. EXPECT_CALL(backend, deletePolicy(bucketId1, pk1));
  47. EXPECT_CALL(backend, deletePolicy(bucketId1, pk2));
  48. EXPECT_CALL(backend, deletePolicy(bucketId2, pk1));
  49. typedef std::pair<PolicyBucketId, std::vector<PolicyKey>> BucketPoliciesPair;
  50. storage.deletePolicies({
  51. BucketPoliciesPair(bucketId1, { pk1, pk2 }),
  52. BucketPoliciesPair(bucketId2, { pk1 }),
  53. });
  54. }
  55. // TODO: isn't it the same test as storage.deleteBucket?
  56. TEST(storage, deleteBucketWithLinkedPolicies) {
  57. FakeStorageBackend backend;
  58. Cynara::Storage storage(backend);
  59. PolicyBucketId bucketId = "test-bucket";
  60. EXPECT_CALL(backend, deleteLinking(bucketId));
  61. EXPECT_CALL(backend, deleteBucket(bucketId));
  62. storage.deleteBucket(bucketId);
  63. }
  64. TEST(storage, insertPolicies) {
  65. using ::testing::Pointee;
  66. using ::testing::Return;
  67. using PredefinedPolicyType::ALLOW;
  68. using PredefinedPolicyType::BUCKET;
  69. using PredefinedPolicyType::DENY;
  70. FakeStorageBackend backend;
  71. Storage storage(backend);
  72. std::vector<PolicyBucketId> testBuckets = {
  73. PolicyBucketId("test-bucket-1"),
  74. PolicyBucketId("test-bucket-2"),
  75. };
  76. PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
  77. typedef std::pair<PolicyBucketId, std::vector<Policy>> BucketPolicyPair;
  78. auto createPolicy = [] (const std::string &keySuffix, const PolicyResult &result) -> Policy {
  79. return Policy(Helpers::generatePolicyKey(keySuffix), result);
  80. };
  81. std::map<PolicyBucketId, std::vector<Policy>> policiesToInsert = {
  82. BucketPolicyPair(testBuckets[0], {
  83. createPolicy("1", ALLOW),
  84. createPolicy("2", DENY),
  85. createPolicy("3", DENY)
  86. }),
  87. BucketPolicyPair(testBuckets[1], {
  88. createPolicy("4", { BUCKET, testBuckets[0] }),
  89. createPolicy("5", PredefinedPolicyType::ALLOW)
  90. })
  91. };
  92. for (const auto &bucket: testBuckets) {
  93. EXPECT_CALL(backend, hasBucket(bucket)).WillOnce(Return(false));
  94. EXPECT_CALL(backend, createBucket(bucket, defaultPolicy)).WillOnce(Return());
  95. storage.addOrUpdateBucket(bucket, defaultPolicy);
  96. }
  97. EXPECT_CALL(backend, hasBucket(testBuckets[0])).WillRepeatedly(Return(true));
  98. EXPECT_CALL(backend, hasBucket(testBuckets[1])).WillOnce(Return(true));
  99. for (const auto &group : policiesToInsert) {
  100. const auto &bucketId = group.first;
  101. const auto &policies = group.second;
  102. for (const auto &policy : policies) {
  103. EXPECT_CALL(backend, insertPolicy(bucketId, Pointee(policy)));
  104. }
  105. }
  106. storage.insertPolicies(policiesToInsert);
  107. }
  108. TEST(storage, insertPointingToNonexistentBucket) {
  109. using ::testing::Pointee;
  110. using ::testing::Return;
  111. FakeStorageBackend backend;
  112. Storage storage(backend);
  113. PolicyBucketId testBucketId = "test-bucket-1";
  114. PolicyBucketId nonexistentBucketId = "nonexistent";
  115. PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
  116. typedef std::pair<PolicyBucketId, std::vector<Policy>> BucketPolicyPair;
  117. auto createPolicy = [] (const std::string &keySuffix, const PolicyResult &result) -> Policy {
  118. return Policy(Helpers::generatePolicyKey(keySuffix), result);
  119. };
  120. std::map<PolicyBucketId, std::vector<Policy>> policiesToInsert = {
  121. BucketPolicyPair(testBucketId, {
  122. createPolicy("1", { PredefinedPolicyType::DENY }),
  123. createPolicy("2", { PredefinedPolicyType::BUCKET, nonexistentBucketId }),
  124. }),
  125. };
  126. EXPECT_CALL(backend, hasBucket(testBucketId)).WillOnce(Return(false));
  127. EXPECT_CALL(backend, createBucket(testBucketId, defaultPolicy)).WillOnce(Return());
  128. storage.addOrUpdateBucket(testBucketId, defaultPolicy);
  129. EXPECT_CALL(backend, hasBucket(testBucketId)).WillOnce(Return(true));
  130. EXPECT_CALL(backend, hasBucket(nonexistentBucketId)).WillOnce(Return(false));
  131. ASSERT_THROW(storage.insertPolicies(policiesToInsert), BucketNotExistsException);
  132. }
  133. TEST(storage, listPolicies) {
  134. using ::testing::Return;
  135. using PredefinedPolicyType::DENY;
  136. FakeStorageBackend backend;
  137. Storage storage(backend);
  138. PolicyBucketId testBucket("test-bucket");
  139. PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
  140. EXPECT_CALL(backend, hasBucket(testBucket)).WillOnce(Return(false));
  141. EXPECT_CALL(backend, createBucket(testBucket, defaultPolicy)).WillOnce(Return());
  142. storage.addOrUpdateBucket(testBucket, defaultPolicy);
  143. PolicyKey filter = Helpers::generatePolicyKey("1");
  144. EXPECT_CALL(backend, listPolicies(testBucket, filter))
  145. .WillOnce(Return(PolicyBucket::Policies()));
  146. storage.listPolicies(testBucket, filter);
  147. }
  148. TEST(storage, listPoliciesFromNonexistentBucket) {
  149. using ::testing::Return;
  150. using PredefinedPolicyType::DENY;
  151. FakeStorageBackend backend;
  152. Storage storage(backend);
  153. PolicyBucketId testBucket("test-bucket");
  154. PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
  155. PolicyKey filter = Helpers::generatePolicyKey("1");
  156. EXPECT_CALL(backend, listPolicies(testBucket, filter))
  157. .WillOnce(Return(PolicyBucket::Policies()));
  158. storage.listPolicies(testBucket, filter);
  159. }