From 69133dcfc371766e241f25c9a6b4d8fcf75939b4 Mon Sep 17 00:00:00 2001 From: Aleksander Zdyb Date: Mon, 14 Jul 2014 11:26:57 +0200 Subject: [PATCH] Add InMemoryStorageBackend::hasBucket() 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 | 4 ++++ src/service/storage/InMemoryStorageBackend.h | 1 + src/service/storage/StorageBackend.h | 1 + test/storage/inmemorystoragebackend/buckets.cpp | 23 +++++++++++++++++++---- test/storage/storage/fakestoragebackend.h | 1 + 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/service/storage/InMemoryStorageBackend.cpp b/src/service/storage/InMemoryStorageBackend.cpp index 212c13a..51583c7 100644 --- a/src/service/storage/InMemoryStorageBackend.cpp +++ b/src/service/storage/InMemoryStorageBackend.cpp @@ -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? diff --git a/src/service/storage/InMemoryStorageBackend.h b/src/service/storage/InMemoryStorageBackend.h index 6ed0518..f4db588 100644 --- a/src/service/storage/InMemoryStorageBackend.h +++ b/src/service/storage/InMemoryStorageBackend.h @@ -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); diff --git a/src/service/storage/StorageBackend.h b/src/service/storage/StorageBackend.h index 06a3a74..005a00d 100644 --- a/src/service/storage/StorageBackend.h +++ b/src/service/storage/StorageBackend.h @@ -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; diff --git a/test/storage/inmemorystoragebackend/buckets.cpp b/test/storage/inmemorystoragebackend/buckets.cpp index bf2c87c..37cf0ae 100644 --- a/test/storage/inmemorystoragebackend/buckets.cpp +++ b/test/storage/inmemorystoragebackend/buckets.cpp @@ -30,13 +30,13 @@ 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); } diff --git a/test/storage/storage/fakestoragebackend.h b/test/storage/storage/fakestoragebackend.h index d06c67d..b2f7a45 100644 --- a/test/storage/storage/fakestoragebackend.h +++ b/test/storage/storage/fakestoragebackend.h @@ -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)); -- 2.7.4