Add InMemoryStorageBackend::updateBucket() 48/24448/2
authorAleksander Zdyb <a.zdyb@partner.samsung.com>
Mon, 14 Jul 2014 09:22:32 +0000 (11:22 +0200)
committerAleksander Zdyb <a.zdyb@partner.samsung.com>
Wed, 16 Jul 2014 10:38:38 +0000 (12:38 +0200)
The function will be used by Cynara::Storage to update bucket's
default policy without altering its policies.

Change-Id: I777c930eedc9c63d8ce1f4a29b144eeee205f145

src/common/types/PolicyBucket.h
src/service/storage/InMemoryStorageBackend.cpp
src/service/storage/InMemoryStorageBackend.h
src/service/storage/StorageBackend.h
test/storage/inmemorystoragebackend/buckets.cpp
test/storage/storage/fakestoragebackend.h

index 2e76713..120cf36 100644 (file)
@@ -76,6 +76,7 @@ public:
         return m_policyCollection;
     }
 
+    // TODO: Consider StorageBackend to be only one to alter this property
     void setDefaultPolicy(const PolicyResult &defaultPolicy) {
         m_defaultPolicy = defaultPolicy;
     }
index 51583c7..ab80521 100644 (file)
@@ -58,6 +58,16 @@ void InMemoryStorageBackend::createBucket(const PolicyBucketId &bucketId,
     buckets().insert({ bucketId, newBucket });
 }
 
+void InMemoryStorageBackend::updateBucket(const PolicyBucketId &bucketId,
+                                          const PolicyResult &defaultPolicy) {
+    try {
+        auto &bucket = buckets().at(bucketId);
+        bucket.setDefaultPolicy(defaultPolicy);
+    } catch (const std::out_of_range &) {
+        throw BucketNotExistsException(bucketId);
+    }
+}
+
 void InMemoryStorageBackend::deleteBucket(const PolicyBucketId &bucketId) {
     auto bucketErased = buckets().erase(bucketId);
     if (bucketErased == 0) {
index f4db588..409a84c 100644 (file)
@@ -46,6 +46,7 @@ public:
     virtual PolicyBucket searchBucket(const PolicyBucketId &bucketId, const PolicyKey &key);
     virtual void insertPolicy(const PolicyBucketId &bucketId, PolicyPtr policy);
     virtual void createBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy);
+    virtual void updateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy);
     virtual void deleteBucket(const PolicyBucketId &bucketId);
     virtual bool hasBucket(const PolicyBucketId &bucketId);
     virtual void deletePolicy(const PolicyBucketId &bucketId, const PolicyKey &key);
index 005a00d..6689bae 100644 (file)
@@ -44,6 +44,7 @@ public:
     virtual void insertPolicy(const PolicyBucketId &bucket, PolicyPtr policy) = 0;
 
     virtual void createBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy) = 0;
+    virtual void updateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy) = 0;
     virtual void deleteBucket(const PolicyBucketId &bucketId) = 0;
     virtual bool hasBucket(const PolicyBucketId &bucketId) = 0;
 
index 37cf0ae..bc9fcf6 100644 (file)
@@ -48,6 +48,32 @@ TEST_F(InMemeoryStorageBackendFixture, createBucket) {
     ASSERT_THAT(m_buckets.at(bucketId).policyCollection(), IsEmpty());
 }
 
+TEST_F(InMemeoryStorageBackendFixture, updateBucket) {
+    using ::testing::ReturnRef;
+
+    FakeInMemoryStorageBackend backend;
+    EXPECT_CALL(backend, buckets())
+        .WillRepeatedly(ReturnRef(m_buckets));
+
+    PolicyBucketId bucketId = "bucket";
+    auto &bucket = this->createBucket(bucketId);
+    bucket.setDefaultPolicy(PredefinedPolicyType::ALLOW);
+
+    backend.updateBucket(bucketId, PredefinedPolicyType::DENY);
+
+    ASSERT_EQ(PredefinedPolicyType::DENY, bucket.defaultPolicy());
+}
+
+TEST_F(InMemeoryStorageBackendFixture, updateNonexistentBucket) {
+    using ::testing::ReturnRef;
+
+    FakeInMemoryStorageBackend backend;
+    EXPECT_CALL(backend, buckets())
+        .WillRepeatedly(ReturnRef(m_buckets));
+
+    EXPECT_THROW(backend.updateBucket("non-existent", PredefinedPolicyType::ALLOW),
+                 BucketNotExistsException);
+}
 
 TEST_F(InMemeoryStorageBackendFixture, deleteBucket) {
     using ::testing::ReturnRef;
index b2f7a45..bfa212d 100644 (file)
@@ -29,7 +29,10 @@ class FakeStorageBackend : public StorageBackend {
 public:
     MOCK_METHOD1(searchDefaultBucket, PolicyBucket(const PolicyKey &key));
     MOCK_METHOD2(searchBucket, PolicyBucket(const PolicyBucketId &bucket, const PolicyKey &key));
-    MOCK_METHOD2(createBucket, void(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy));
+    MOCK_METHOD2(createBucket, void(const PolicyBucketId &bucketId,
+                                    const PolicyResult &defaultPolicy));
+    MOCK_METHOD2(updateBucket, void(const PolicyBucketId &bucketId,
+                                    const PolicyResult &defaultPolicy));
     MOCK_METHOD1(deleteBucket, void(const PolicyBucketId &bucketId));
     MOCK_METHOD1(hasBucket, bool(const PolicyBucketId &bucketId));
     MOCK_METHOD2(deletePolicy, void(const PolicyBucketId &bucketId, const PolicyKey &key));