}
}
-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) {
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);
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