From: Aleksander Zdyb Date: Sat, 20 Dec 2014 12:05:23 +0000 (+0100) Subject: Add --set-bucket and --delete-bucket to Cyad X-Git-Tag: accepted/tizen/common/20150119.084431~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83664a6430bce4c76aa30ad49cdd603cce908530;p=platform%2Fcore%2Fsecurity%2Fcynara.git Add --set-bucket and --delete-bucket to Cyad Change-Id: I54b8199b3daf59bf9a8f81222391e42980ba2f41 --- diff --git a/src/cyad/CommandlineParser/CyadCommand.cpp b/src/cyad/CommandlineParser/CyadCommand.cpp index 6723e7e..8d27cf8 100644 --- a/src/cyad/CommandlineParser/CyadCommand.cpp +++ b/src/cyad/CommandlineParser/CyadCommand.cpp @@ -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 */ diff --git a/src/cyad/CommandlineParser/CyadCommand.h b/src/cyad/CommandlineParser/CyadCommand.h index 2a233d7..e5d3277 100644 --- a/src/cyad/CommandlineParser/CyadCommand.h +++ b/src/cyad/CommandlineParser/CyadCommand.h @@ -25,6 +25,9 @@ #include +#include +#include + 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_ */ diff --git a/src/cyad/CommandsDispatcher.cpp b/src/cyad/CommandsDispatcher.cpp index dee8ce3..b8e256c 100644 --- a/src/cyad/CommandsDispatcher.cpp +++ b/src/cyad/CommandsDispatcher.cpp @@ -21,6 +21,7 @@ */ #include +#include #include @@ -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 */ diff --git a/src/cyad/CommandsDispatcher.h b/src/cyad/CommandsDispatcher.h index a776682..36dfc60 100644 --- a/src/cyad/CommandsDispatcher.h +++ b/src/cyad/CommandsDispatcher.h @@ -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 of bucket\n" + " -p, --policy= default policy\n" + " -m, --metadata= metadata for default policy\n" + "\n" + "Bucket delete options (with -d or --delete-bucket)\n" + " -d, --delete-bucket= name of bucket to delete\n" + "\n" "Help options:\n" " -h, --help print help message"; BaseDispatcherIO &m_io; diff --git a/test/cyad/commands_dispatcher.cpp b/test/cyad/commands_dispatcher.cpp index 9a948e6..6f70770 100644 --- a/test/cyad/commands_dispatcher.cpp +++ b/test/cyad/commands_dispatcher.cpp @@ -20,11 +20,17 @@ * @brief Tests for CommandsDispatcher */ +#include +#include + #include #include #include +#include +#include +#include #include #include @@ -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 BucketData; + typedef std::vector 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); + } +}