#include <string>
+#include <types/PolicyBucketId.h>
+#include <types/PolicyResult.h>
+
namespace Cynara {
class CommandsDispatcher;
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_ */
*/
#include <cynara-error.h>
+#include <cynara-policy-types.h>
#include <cyad/AdminLibraryInitializationFailedException.h>
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 */
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;
* @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>
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);
+ }
+}