PolicyKey m_policyKey;
};
+class SetPolicyBulkCyadCommand : public CyadCommand {
+public:
+ SetPolicyBulkCyadCommand(const std::string &filename) : m_filename(filename) {}
+
+ virtual ~SetPolicyBulkCyadCommand() {}
+
+ virtual int run(CommandsDispatcher &dispatcher);
+
+ const std::string &filename(void) const {
+ return m_filename;
+ }
+
+private:
+ std::string m_filename;
+};
+
} /* namespace Cynara */
#endif /* SRC_CYAD_COMMANDLINEPARSER_CYADCOMMAND_H_ */
#include <cynara-error.h>
#include <cynara-policy-types.h>
+#include <exceptions/BucketRecordCorruptedException.h>
+
#include <cyad/AdminLibraryInitializationFailedException.h>
#include <cyad/CynaraAdminPolicies.h>
+#include <cyad/AdminPolicyParser.h>
#include "CommandsDispatcher.h"
return m_adminApiWrapper.cynara_admin_set_policies(m_cynaraAdmin, policies.data());
}
+int CommandsDispatcher::execute(SetPolicyBulkCyadCommand &result) {
+ auto input = m_io.openFile(result.filename());
+
+ try {
+ auto policies = Cynara::AdminPolicyParser::parse(input);
+ return m_adminApiWrapper.cynara_admin_set_policies(m_cynaraAdmin, policies.data());
+ } catch (const BucketRecordCorruptedException &ex) {
+ m_io.cerr() << ex.message();
+ return CYNARA_API_INVALID_COMMANDLINE_PARAM;
+ }
+}
+
} /* namespace Cynara */
virtual int execute(DeleteBucketCyadCommand &);
virtual int execute(SetBucketCyadCommand &);
virtual int execute(SetPolicyCyadCommand &);
+ virtual int execute(SetPolicyBulkCyadCommand &);
private:
// TODO: Get argv[0] instead of hardcoded name
" -r, --privilege=<privilege> privilege value\n"
" -p, --policy=<policy> policy\n"
" -m, --metadata=<metadata> metadata for policy\n"
+ " -f, --bulk=<filename> path or - for stdin\n"
"\n"
"Help options:\n"
" -h, --help print help message";
* @brief Tests for CommandsDispatcher
*/
+#include <ostream>
#include <tuple>
#include <vector>
dispatcher.execute(result);
}
+
+TEST_F(CyadCommandlineDispatcherTest, setPoliciesBulk) {
+ using ::testing::_;
+ using ::testing::Return;
+
+ 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::SetPolicyBulkCyadCommand result("-");
+
+ // fake stdin ;)
+ m_io.file() << "bucket;cli;usr;privilege;0;metadata" << std::endl;
+ m_io.file() << "bucket-2;cli;usr;privilege;0xFFFF";
+
+ Cynara::CynaraAdminPolicies expectedPolicies;
+ expectedPolicies.add("bucket", { CYNARA_ADMIN_DENY, "metadata" }, {"cli", "usr", "privilege"} );
+ expectedPolicies.add("bucket-2", { CYNARA_ADMIN_ALLOW, "" }, {"cli", "usr", "privilege"} );
+ expectedPolicies.seal();
+
+ EXPECT_CALL(adminApi, cynara_admin_set_policies(_, AdmPolicyListEq(expectedPolicies.data())))
+ .WillOnce(Return(CYNARA_API_SUCCESS));
+
+ dispatcher.execute(result);
+}
+
+TEST_F(CyadCommandlineDispatcherTest, setPoliciesBulkInputError) {
+ using ::testing::_;
+ using ::testing::Return;
+
+ 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::SetPolicyBulkCyadCommand result("-");
+
+ // fake stdin ;)
+ m_io.file() << "invalid input" << std::endl;
+
+ dispatcher.execute(result);
+
+ ASSERT_FALSE(m_io.cerrRaw().str().empty());
+}