123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- /*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- #include "test/core/util/cmdline.h"
- #include <string.h>
- #include <grpc/support/alloc.h>
- #include <grpc/support/log.h>
- #include "src/core/lib/gpr/useful.h"
- #include "test/core/util/test_config.h"
- #define LOG_TEST() gpr_log(GPR_INFO, "test at %s:%d", __FILE__, __LINE__)
- static void test_simple_int(void) {
- int x = 1;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("-foo"),
- const_cast<char*>("3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_int(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 1);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_eq_int(void) {
- int x = 1;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("-foo=3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_int(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 1);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_2dash_int(void) {
- int x = 1;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo"),
- const_cast<char*>("3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_int(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 1);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_2dash_eq_int(void) {
- int x = 1;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo=3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_int(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 1);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_simple_string(void) {
- const char* x = nullptr;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("-foo"),
- const_cast<char*>("3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == nullptr);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(0 == strcmp(x, "3"));
- gpr_cmdline_destroy(cl);
- }
- static void test_eq_string(void) {
- const char* x = nullptr;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("-foo=3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == nullptr);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(0 == strcmp(x, "3"));
- gpr_cmdline_destroy(cl);
- }
- static void test_2dash_string(void) {
- const char* x = nullptr;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo"),
- const_cast<char*>("3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == nullptr);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(0 == strcmp(x, "3"));
- gpr_cmdline_destroy(cl);
- }
- static void test_2dash_eq_string(void) {
- const char* x = nullptr;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo=3")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == nullptr);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(0 == strcmp(x, "3"));
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_on(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 1);
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_no(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--no-foo")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 0);
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_val_1(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo=1")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 1);
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_val_0(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo=0")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 0);
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_val_true(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--foo=true")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 1);
- gpr_cmdline_destroy(cl);
- }
- static void test_flag_val_false(void) {
- int x = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__),
- const_cast<char*>("--foo=false")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_flag(cl, "foo", nullptr, &x);
- GPR_ASSERT(x == 2);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 0);
- gpr_cmdline_destroy(cl);
- }
- static void test_many(void) {
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- gpr_cmdline* cl;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--str"),
- const_cast<char*>("hello"), const_cast<char*>("-x=4"),
- const_cast<char*>("-no-flag")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(x == 4);
- GPR_ASSERT(0 == strcmp(str, "hello"));
- GPR_ASSERT(flag == 0);
- gpr_cmdline_destroy(cl);
- }
- static void extra_arg_cb(void* user_data, const char* arg) {
- int* count = static_cast<int*>(user_data);
- GPR_ASSERT(arg != nullptr);
- GPR_ASSERT(strlen(arg) == 1);
- GPR_ASSERT(arg[0] == 'a' + *count);
- ++*count;
- }
- static void test_extra(void) {
- gpr_cmdline* cl;
- int count = 0;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("a"),
- const_cast<char*>("b"), const_cast<char*>("c")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- &count);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(count == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_extra_dashdash(void) {
- gpr_cmdline* cl;
- int count = 0;
- char* args[] = {const_cast<char*>(__FILE__), const_cast<char*>("--"),
- const_cast<char*>("a"), const_cast<char*>("b"),
- const_cast<char*>("c")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- &count);
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(args), args);
- GPR_ASSERT(count == 3);
- gpr_cmdline_destroy(cl);
- }
- static void test_usage(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- std::string usage = gpr_cmdline_usage_string(cl, "test");
- GPR_ASSERT(usage ==
- "Usage: test [--str=string] [--x=int] "
- "[--flag|--no-flag] [file...]\n");
- usage = gpr_cmdline_usage_string(cl, "/foo/test");
- GPR_ASSERT(usage ==
- "Usage: test [--str=string] [--x=int] "
- "[--flag|--no-flag] [file...]\n");
- gpr_cmdline_destroy(cl);
- }
- static void test_help(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- char* help[] = {const_cast<char*>(__FILE__), const_cast<char*>("-h")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_set_survive_failure(cl);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- GPR_ASSERT(0 == gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(help), help));
- gpr_cmdline_destroy(cl);
- }
- static void test_badargs1(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- char* bad_arg_name[] = {const_cast<char*>(__FILE__),
- const_cast<char*>("--y")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_set_survive_failure(cl);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- GPR_ASSERT(0 ==
- gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(bad_arg_name), bad_arg_name));
- gpr_cmdline_destroy(cl);
- }
- static void test_badargs2(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- char* bad_int_value[] = {const_cast<char*>(__FILE__),
- const_cast<char*>("--x"),
- const_cast<char*>("henry")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_set_survive_failure(cl);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- GPR_ASSERT(
- 0 == gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(bad_int_value), bad_int_value));
- gpr_cmdline_destroy(cl);
- }
- static void test_badargs3(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- char* bad_bool_value[] = {const_cast<char*>(__FILE__),
- const_cast<char*>("--flag=henry")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_set_survive_failure(cl);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- GPR_ASSERT(0 == gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(bad_bool_value),
- bad_bool_value));
- gpr_cmdline_destroy(cl);
- }
- static void test_badargs4(void) {
- gpr_cmdline* cl;
- const char* str = nullptr;
- int x = 0;
- int flag = 2;
- char* bad_bool_value[] = {const_cast<char*>(__FILE__),
- const_cast<char*>("--no-str")};
- LOG_TEST();
- cl = gpr_cmdline_create(nullptr);
- gpr_cmdline_set_survive_failure(cl);
- gpr_cmdline_add_string(cl, "str", nullptr, &str);
- gpr_cmdline_add_int(cl, "x", nullptr, &x);
- gpr_cmdline_add_flag(cl, "flag", nullptr, &flag);
- gpr_cmdline_on_extra_arg(cl, "file", "filenames to process", extra_arg_cb,
- nullptr);
- GPR_ASSERT(0 == gpr_cmdline_parse(cl, GPR_ARRAY_SIZE(bad_bool_value),
- bad_bool_value));
- gpr_cmdline_destroy(cl);
- }
- int main(int argc, char** argv) {
- grpc::testing::TestEnvironment env(argc, argv);
- test_simple_int();
- test_eq_int();
- test_2dash_int();
- test_2dash_eq_int();
- test_simple_string();
- test_eq_string();
- test_2dash_string();
- test_2dash_eq_string();
- test_flag_on();
- test_flag_no();
- test_flag_val_1();
- test_flag_val_0();
- test_flag_val_true();
- test_flag_val_false();
- test_many();
- test_extra();
- test_extra_dashdash();
- test_usage();
- test_help();
- test_badargs1();
- test_badargs2();
- test_badargs3();
- test_badargs4();
- return 0;
- }
|