Implement Storage::addOrUpdateBucket() 49/24449/2
authorAleksander Zdyb <a.zdyb@partner.samsung.com>
Fri, 11 Jul 2014 08:58:35 +0000 (10:58 +0200)
committerAleksander Zdyb <a.zdyb@partner.samsung.com>
Wed, 16 Jul 2014 10:38:38 +0000 (12:38 +0200)
createBucket() has been is renamed to addOrUpdateBucket()
in Cynara::Storage. The function will now create new bucket or,
if it existed, only update its default policy.

Test asserting addition of default bucket has been removed,
because the common function Storage::addOrUpdateBucket()
will just update default policy in such case.

Change-Id: I2099f9306873d192cbbbcd34ac9769ca663bdbe3

src/service/storage/Storage.cpp
src/service/storage/Storage.h
test/storage/storage/buckets.cpp

index a35da0c..9e9f00d 100644 (file)
@@ -93,14 +93,12 @@ void Storage::insertPolicies(const std::vector<PolicyPolicyBucket> &policies) {
     }
 }
 
-void Storage::createBucket(const PolicyBucketId &newBucketId, const PolicyResult &defaultBucketPolicy) {
-    // TODO: Check if bucket already exists
-
-    if (newBucketId == defaultPolicyBucketId) {
-        throw BucketAlreadyExistsException(newBucketId);
+void Storage::addOrUpdateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultBucketPolicy) {
+    if (m_backend.hasBucket(bucketId)) {
+        m_backend.updateBucket(bucketId, defaultBucketPolicy);
+    } else {
+        m_backend.createBucket(bucketId, defaultBucketPolicy);
     }
-
-    m_backend.createBucket(newBucketId, defaultBucketPolicy);
 }
 
 void Storage::deleteBucket(const PolicyBucketId &bucketId) {
index e16d60c..177765c 100644 (file)
@@ -50,7 +50,7 @@ public:
     PolicyResult checkPolicy(const PolicyKey &key);
 
     void insertPolicies(const std::vector<PolicyPolicyBucket> &policies);
-    void createBucket(const PolicyBucketId &newBucketId, const PolicyResult &defaultBucketPolicy);
+    void addOrUpdateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultBucketPolicy);
     void deletePolicies(const std::vector<PolicyKeyBucket> &policies);
     void deleteBucket(const PolicyBucketId &bucketId);
 
index 44e4cfd..c7d19ec 100644 (file)
 using namespace Cynara;
 
 TEST(storage, addBucket) {
+    using ::testing::Return;
+
     FakeStorageBackend backend;
     Cynara::Storage storage(backend);
 
     PolicyBucketId bucketId = "test-bucket";
     PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
 
+    EXPECT_CALL(backend, hasBucket(bucketId)).WillOnce(Return(false));
     EXPECT_CALL(backend, createBucket(bucketId, defaultPolicy));
 
-    storage.createBucket(bucketId, defaultPolicy);
+    storage.addOrUpdateBucket(bucketId, defaultPolicy);
 }
 
-// Cannot add bucket with default bucket's name
-TEST(storage, addDefaultBucket) {
+TEST(storage, updateBucket) {
+    using ::testing::Return;
+
     FakeStorageBackend backend;
     Cynara::Storage storage(backend);
+
+    PolicyBucketId bucketId = "test-bucket";
     PolicyResult defaultPolicy(PredefinedPolicyType::DENY);
 
-    ASSERT_THROW(
-        storage.createBucket(defaultPolicyBucketId, defaultPolicy),
-        BucketAlreadyExistsException
-    );
+    EXPECT_CALL(backend, hasBucket(bucketId)).WillOnce(Return(true));
+    EXPECT_CALL(backend, updateBucket(bucketId, defaultPolicy));
+
+    storage.addOrUpdateBucket(bucketId, defaultPolicy);
 }
 
 // Cannot delete default bucket