Add InMemoryStorageBackend::hasBucket() 47/24447/2
authorAleksander Zdyb <a.zdyb@partner.samsung.com>
Mon, 14 Jul 2014 09:26:57 +0000 (11:26 +0200)
committerAleksander Zdyb <a.zdyb@partner.samsung.com>
Wed, 16 Jul 2014 10:38:37 +0000 (12:38 +0200)
The function will be used by Cynara::Storage to check
if new bucket should be created or an old one updated.

Change-Id: I0c60724a112880010dcde7793346c1bc2fd687dc

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 212c13a..51583c7 100644 (file)
@@ -65,6 +65,10 @@ void InMemoryStorageBackend::deleteBucket(const PolicyBucketId &bucketId) {
     }
 }
 
+bool InMemoryStorageBackend::hasBucket(const PolicyBucketId &bucketId) {
+    return buckets().find(bucketId) != buckets().end();
+}
+
 void InMemoryStorageBackend::deletePolicy(const PolicyBucketId &bucketId, const PolicyKey &key) {
     try {
         // TODO: Move the erase code to PolicyCollection maybe?
index 6ed0518..f4db588 100644 (file)
@@ -47,6 +47,7 @@ public:
     virtual void insertPolicy(const PolicyBucketId &bucketId, PolicyPtr policy);
     virtual void createBucket(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);
     virtual void deleteLinking(const PolicyBucketId &bucketId);
 
index 06a3a74..005a00d 100644 (file)
@@ -45,6 +45,7 @@ public:
 
     virtual void createBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultPolicy) = 0;
     virtual void deleteBucket(const PolicyBucketId &bucketId) = 0;
+    virtual bool hasBucket(const PolicyBucketId &bucketId) = 0;
 
     virtual void deletePolicy(const PolicyBucketId &bucketId, const PolicyKey &key) = 0;
     virtual void deleteLinking(const PolicyBucketId &bucket) = 0;
index bf2c87c..37cf0ae 100644 (file)
 
 using namespace Cynara;
 
-TEST_F(InMemeoryStorageBackendFixture, addBucket) {
+TEST_F(InMemeoryStorageBackendFixture, createBucket) {
     using ::testing::ReturnRef;
     using ::testing::IsEmpty;
 
     FakeInMemoryStorageBackend backend;
     EXPECT_CALL(backend, buckets())
-        .WillOnce(ReturnRef(m_buckets));
+        .WillRepeatedly(ReturnRef(m_buckets));
 
     PolicyResult defaultPolicy(PredefinedPolicyType::ALLOW);
     PolicyBucketId bucketId = "new-bucket";
@@ -55,7 +55,7 @@ TEST_F(InMemeoryStorageBackendFixture, deleteBucket) {
 
     FakeInMemoryStorageBackend backend;
     EXPECT_CALL(backend, buckets())
-        .WillOnce(ReturnRef(m_buckets));
+        .WillRepeatedly(ReturnRef(m_buckets));
 
     PolicyBucketId bucketId = "delete-bucket";
     m_buckets.insert({ bucketId, PolicyBucket() });
@@ -65,12 +65,27 @@ TEST_F(InMemeoryStorageBackendFixture, deleteBucket) {
     ASSERT_THAT(m_buckets, IsEmpty());
 }
 
+TEST_F(InMemeoryStorageBackendFixture, hasBucket) {
+    using ::testing::ReturnRef;
+    using ::testing::IsEmpty;
+
+    FakeInMemoryStorageBackend backend;
+    EXPECT_CALL(backend, buckets())
+        .WillRepeatedly(ReturnRef(m_buckets));
+
+    PolicyBucketId bucketId = "bucket";
+    m_buckets.insert({ bucketId, PolicyBucket() });
+
+    ASSERT_TRUE(backend.hasBucket(bucketId));
+    ASSERT_FALSE(backend.hasBucket("non-existent"));
+}
+
 TEST_F(InMemeoryStorageBackendFixture, deleteNonexistentBucket) {
     using ::testing::ReturnRef;
 
     FakeInMemoryStorageBackend backend;
     EXPECT_CALL(backend, buckets())
-        .WillOnce(ReturnRef(m_buckets));
+        .WillRepeatedly(ReturnRef(m_buckets));
 
     EXPECT_THROW(backend.deleteBucket("non-existent"), BucketNotExistsException);
 }
index d06c67d..b2f7a45 100644 (file)
@@ -31,6 +31,7 @@ public:
     MOCK_METHOD2(searchBucket, PolicyBucket(const PolicyBucketId &bucket, const PolicyKey &key));
     MOCK_METHOD2(createBucket, 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));
     MOCK_METHOD1(deleteLinking, void(const PolicyBucketId &bucket));
     MOCK_METHOD2(insertPolicy, void(const PolicyBucketId &bucketId, PolicyPtr policy));