Add --set-bucket and --delete-bucket to Cyad 79/32179/6
authorAleksander Zdyb <a.zdyb@samsung.com>
Sat, 20 Dec 2014 12:05:23 +0000 (13:05 +0100)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Mon, 29 Dec 2014 14:36:36 +0000 (15:36 +0100)
Change-Id: I54b8199b3daf59bf9a8f81222391e42980ba2f41

src/cyad/CommandlineParser/CyadCommand.cpp
src/cyad/CommandlineParser/CyadCommand.h
src/cyad/CommandsDispatcher.cpp
src/cyad/CommandsDispatcher.h
test/cyad/commands_dispatcher.cpp

index 6723e7e..8d27cf8 100644 (file)
@@ -38,4 +38,12 @@ int HelpCyadCommand::run(CommandsDispatcher &dispatcher) {
     return dispatcher.execute(*this);
 }
 
+int SetBucketCyadCommand::run(CommandsDispatcher &dispatcher) {
+    return dispatcher.execute(*this);
+}
+
+int DeleteBucketCyadCommand::run(CommandsDispatcher &dispatcher) {
+    return dispatcher.execute(*this);
+}
+
 } /* namespace Cynara */
index 2a233d7..e5d3277 100644 (file)
@@ -25,6 +25,9 @@
 
 #include <string>
 
+#include <types/PolicyBucketId.h>
+#include <types/PolicyResult.h>
+
 namespace Cynara {
 
 class CommandsDispatcher;
@@ -67,6 +70,44 @@ public:
     virtual int run(CommandsDispatcher &dispatcher);
 };
 
+class SetBucketCyadCommand : public CyadCommand {
+public:
+    SetBucketCyadCommand(const PolicyBucketId &bucketId, const PolicyResult &policyResult)
+        : m_bucketId(bucketId), m_policyResult(policyResult) {}
+
+    virtual ~SetBucketCyadCommand() {}
+
+    virtual int run(CommandsDispatcher &dispatcher);
+
+    const PolicyBucketId &bucketId(void) const {
+        return m_bucketId;
+    }
+
+    const PolicyResult &policyResult(void) const {
+        return m_policyResult;
+    }
+
+private:
+    PolicyBucketId m_bucketId;
+    PolicyResult m_policyResult;
+};
+
+class DeleteBucketCyadCommand : public CyadCommand {
+public:
+    explicit DeleteBucketCyadCommand(const PolicyBucketId &bucketId) : m_bucketId(bucketId) {}
+
+    virtual ~DeleteBucketCyadCommand() {}
+
+    virtual int run(CommandsDispatcher &dispatcher);
+
+    const PolicyBucketId &bucketId(void) const {
+        return m_bucketId;
+    }
+
+private:
+    PolicyBucketId m_bucketId;
+};
+
 } /* namespace Cynara */
 
 #endif /* SRC_CYAD_COMMANDLINEPARSER_CYADCOMMAND_H_ */
index dee8ce3..b8e256c 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include <cynara-error.h>
+#include <cynara-policy-types.h>
 
 #include <cyad/AdminLibraryInitializationFailedException.h>
 
@@ -58,4 +59,18 @@ int CommandsDispatcher::execute(ErrorCyadCommand &result) {
     return CYNARA_API_INVALID_COMMANDLINE_PARAM;
 }
 
+int CommandsDispatcher::execute(DeleteBucketCyadCommand &result) {
+    return m_adminApiWrapper.cynara_admin_set_bucket(m_cynaraAdmin, result.bucketId().c_str(),
+                                                     CYNARA_ADMIN_DELETE, nullptr);
+}
+
+int CommandsDispatcher::execute(SetBucketCyadCommand &result) {
+    const auto &policyResult = result.policyResult();
+    const char *metadata = policyResult.metadata().empty() ? nullptr
+                                                           : policyResult.metadata().c_str();
+    return m_adminApiWrapper.cynara_admin_set_bucket(m_cynaraAdmin,
+                                                     result.bucketId().c_str(),
+                                                     policyResult.policyType(), metadata);
+}
+
 } /* namespace Cynara */
index a776682..36dfc60 100644 (file)
@@ -40,10 +40,20 @@ public:
     virtual int execute(CyadCommand &);
     virtual int execute(HelpCyadCommand &);
     virtual int execute(ErrorCyadCommand &);
+    virtual int execute(DeleteBucketCyadCommand &);
+    virtual int execute(SetBucketCyadCommand &);
 
 private:
     // TODO: Get argv[0] instead of hardcoded name
     const std::string helpMessage = "Usage: cyad [OPTIONS]\n\n"
+                                    "Bucket set options (with -b or --set-bucket)\n"
+                                    "  -b, --set-bucket=<name>        name of bucket\n"
+                                    "  -p, --policy=<policy>          default policy\n"
+                                    "  -m, --metadata=<metadata>      metadata for default policy\n"
+                                    "\n"
+                                    "Bucket delete options (with -d or --delete-bucket)\n"
+                                    "  -d, --delete-bucket=<name>     name of bucket to delete\n"
+                                    "\n"
                                     "Help options:\n"
                                     "  -h, --help                     print help message";
     BaseDispatcherIO &m_io;
index 9a948e6..6f70770 100644 (file)
  * @brief       Tests for CommandsDispatcher
  */
 
+#include <tuple>
+#include <vector>
+
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
 #include <cynara-error.h>
+#include <cynara-policy-types.h>
 
+#include <common/types/PolicyKey.h>
+#include <common/types/PolicyResult.h>
 #include <cyad/CommandlineParser/CyadCommand.h>
 #include <cyad/CommandsDispatcher.h>
 
@@ -56,3 +62,72 @@ TEST_F(CyadCommandlineDispatcherTest, noApi) {
     dispatcher.execute(helpResult);
     dispatcher.execute(errorResult);
 }
+
+TEST_F(CyadCommandlineDispatcherTest, deleteBucket) {
+    using ::testing::_;
+    using ::testing::Return;
+    using ::testing::StrEq;
+    using ::testing::IsNull;
+
+    FakeAdminApiWrapper adminApi;
+
+    EXPECT_CALL(adminApi, cynara_admin_initialize(_)).WillOnce(Return(CYNARA_API_SUCCESS));
+    EXPECT_CALL(adminApi, cynara_admin_finish(_)).WillOnce(Return(CYNARA_API_SUCCESS));
+
+    Cynara::CommandsDispatcher dispatcher(m_io, adminApi);
+    Cynara::DeleteBucketCyadCommand result("test-bucket");
+
+    EXPECT_CALL(adminApi,
+            cynara_admin_set_bucket(_, StrEq("test-bucket"), CYNARA_ADMIN_DELETE, IsNull()))
+        .WillOnce(Return(CYNARA_API_SUCCESS));
+
+    dispatcher.execute(result);
+}
+
+TEST_F(CyadCommandlineDispatcherTest, setBucket) {
+    using ::testing::_;
+    using ::testing::Return;
+    using ::testing::StrEq;
+    using ::testing::IsNull;
+    using Cynara::PolicyBucketId;
+    using Cynara::PolicyType;
+    using Cynara::PolicyResult;
+
+    FakeAdminApiWrapper adminApi;
+
+    EXPECT_CALL(adminApi, cynara_admin_initialize(_)).WillOnce(Return(CYNARA_API_SUCCESS));
+    EXPECT_CALL(adminApi, cynara_admin_finish(_)).WillOnce(Return(CYNARA_API_SUCCESS));
+
+    Cynara::CommandsDispatcher dispatcher(m_io, adminApi);
+
+    typedef std::tuple<PolicyBucketId, PolicyResult> BucketData;
+    typedef std::vector<BucketData> Buckets;
+    const Buckets buckets = { BucketData("test-bucket-1", { CYNARA_ADMIN_ALLOW, "" }),
+                              BucketData("test-bucket-2", { CYNARA_ADMIN_DENY, "" }),
+                              BucketData("test-bucket-3", { CYNARA_ADMIN_BUCKET, "other-bucket" }),
+                              BucketData("test-bucket-2", { CYNARA_ADMIN_NONE, "" }),
+                              BucketData("test-bucket-4", { 42, "douglas-noel-adams" }) };
+
+    for (const auto &bucket : buckets) {
+        const auto &bucketId = std::get<0>(bucket);
+        const auto &policyResult = std::get<1>(bucket);
+
+        SCOPED_TRACE(bucketId);
+
+        Cynara::SetBucketCyadCommand result(bucketId, policyResult);
+
+        if (policyResult.metadata().empty() == false) {
+            EXPECT_CALL(adminApi,
+                    cynara_admin_set_bucket(_, StrEq(bucketId.c_str()), policyResult.policyType(),
+                                            StrEq(policyResult.metadata().c_str())))
+                .WillOnce(Return(CYNARA_API_SUCCESS));
+        } else {
+            EXPECT_CALL(adminApi,
+                    cynara_admin_set_bucket(_, StrEq(bucketId.c_str()), policyResult.policyType(),
+                                           IsNull()))
+                .WillOnce(Return(CYNARA_API_SUCCESS));
+        }
+
+        dispatcher.execute(result);
+    }
+}