From 74e95bd76deed9310c3ea966d9e2b9f89c9a2f40 Mon Sep 17 00:00:00 2001 From: Aleksander Zdyb Date: Fri, 11 Jul 2014 10:58:35 +0200 Subject: [PATCH] Implement Storage::addOrUpdateBucket() 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 | 12 +++++------- src/service/storage/Storage.h | 2 +- test/storage/storage/buckets.cpp | 20 +++++++++++++------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/service/storage/Storage.cpp b/src/service/storage/Storage.cpp index a35da0c..9e9f00d 100644 --- a/src/service/storage/Storage.cpp +++ b/src/service/storage/Storage.cpp @@ -93,14 +93,12 @@ void Storage::insertPolicies(const std::vector &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) { diff --git a/src/service/storage/Storage.h b/src/service/storage/Storage.h index e16d60c..177765c 100644 --- a/src/service/storage/Storage.h +++ b/src/service/storage/Storage.h @@ -50,7 +50,7 @@ public: PolicyResult checkPolicy(const PolicyKey &key); void insertPolicies(const std::vector &policies); - void createBucket(const PolicyBucketId &newBucketId, const PolicyResult &defaultBucketPolicy); + void addOrUpdateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultBucketPolicy); void deletePolicies(const std::vector &policies); void deleteBucket(const PolicyBucketId &bucketId); diff --git a/test/storage/storage/buckets.cpp b/test/storage/storage/buckets.cpp index 44e4cfd..c7d19ec 100644 --- a/test/storage/storage/buckets.cpp +++ b/test/storage/storage/buckets.cpp @@ -44,27 +44,33 @@ 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 -- 2.7.4