X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftest%2Fcommon%2Fget_command_descriptions.cc;fp=src%2Fceph%2Fsrc%2Ftest%2Fcommon%2Fget_command_descriptions.cc;h=93a8e842d3bf42c079369a371edcb23672a76e1c;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/test/common/get_command_descriptions.cc b/src/ceph/src/test/common/get_command_descriptions.cc new file mode 100644 index 0000000..93a8e84 --- /dev/null +++ b/src/ceph/src/test/common/get_command_descriptions.cc @@ -0,0 +1,129 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2013 Cloudwatt + * + * Author: Loic Dachary + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library Public License for more details. + * + */ + +#include +#include +#include "mon/Monitor.h" +#include "common/ceph_argparse.h" +#include "global/global_init.h" + +static void usage(ostream &out) +{ + out << "usage: get_command_descriptions [options ...]" << std::endl; + out << "print on stdout the result of JSON formatted options\n"; + out << "found in mon/MonCommands.h as produced by the\n"; + out << "Monitor.cc::get_command_descriptions function.\n"; + out << "Designed as a helper for ceph_argparse.py unit tests.\n"; + out << "\n"; + out << " --all all of mon/MonCommands.h \n"; + out << " --pull585 reproduce the bug fixed by #585\n"; + out << "\n"; + out << "Examples:\n"; + out << " get_command_descriptions --all\n"; + out << " get_command_descriptions --pull585\n"; +} + +static void json_print(const std::vector &mon_commands) +{ + bufferlist rdata; + Formatter *f = Formatter::create("json"); + Monitor::format_command_descriptions(mon_commands, f, &rdata); + delete f; + string data(rdata.c_str(), rdata.length()); + cout << data << std::endl; +} + +static void all() +{ +#undef FLAG +#undef COMMAND +#undef COMMAND_WITH_FLAG + std::vector mon_commands = { +#define FLAG(f) (MonCommand::FLAG_##f) +#define COMMAND(parsesig, helptext, modulename, req_perms, avail) \ + {parsesig, helptext, modulename, req_perms, avail, 0}, +#define COMMAND_WITH_FLAG(parsesig, helptext, modulename, req_perms, avail, flags) \ + {parsesig, helptext, modulename, req_perms, avail, flags}, +#include +#undef COMMAND +#undef COMMAND_WITH_FLAG + +#define COMMAND(parsesig, helptext, modulename, req_perms, avail) \ + {parsesig, helptext, modulename, req_perms, avail, FLAG(MGR)}, +#define COMMAND_WITH_FLAG(parsesig, helptext, modulename, req_perms, avail, flags) \ + {parsesig, helptext, modulename, req_perms, avail, flags | FLAG(MGR)}, +#include + #undef COMMAND +#undef COMMAND_WITH_FLAG + }; + + json_print(mon_commands); +} + +// syntax error https://github.com/ceph/ceph/pull/585 +static void pull585() +{ + std::vector mon_commands = { + { "osd pool create " + "name=pool,type=CephPoolname " + "name=pg_num,type=CephInt,range=0 " + "name=pgp_num,type=CephInt,range=0,req=false" // !!! missing trailing space + "name=properties,type=CephString,n=N,req=false,goodchars=[A-Za-z0-9-_.=]", + "create pool", "osd", "rw", "cli,rest" } + }; + + json_print(mon_commands); +} + +int main(int argc, char **argv) { + vector args; + argv_to_vec(argc, (const char **)argv, args); + + auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, + CODE_ENVIRONMENT_UTILITY, 0); + common_init_finish(g_ceph_context); + + if (args.empty()) { + usage(cerr); + exit(1); + } + for (std::vector::iterator i = args.begin(); i != args.end(); ++i) { + string err; + + if (*i == string("help") || *i == string("-h") || *i == string("--help")) { + usage(cout); + exit(0); + } else if (*i == string("--all")) { + all(); + } else if (*i == string("--pull585")) { + pull585(); + } + } +} + +/* + * Local Variables: + * compile-command: "cd ../.. ; + * make get_command_descriptions && + * ./get_command_descriptions --all --pull585" + * End: + */ +