From: Piotrek Zadroga Date: Mon, 22 May 2023 20:50:23 +0000 (+0200) Subject: [#2834] Adding UTs for relayed v6 opts X-Git-Tag: Kea-2.3.8~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=718e7c683571a41bff13f19ebfaaddca03d267ee;p=thirdparty%2Fkea.git [#2834] Adding UTs for relayed v6 opts --- diff --git a/src/bin/perfdhcp/command_options.cc b/src/bin/perfdhcp/command_options.cc index cb8a557e0f..5167421c82 100644 --- a/src/bin/perfdhcp/command_options.cc +++ b/src/bin/perfdhcp/command_options.cc @@ -221,6 +221,7 @@ const int LONG_OPT_RELAY_1_OPTION = 400; bool CommandOptions::initialize(int argc, char** argv, bool print_cmd_line) { int opt = 0; // Subsequent options returned by getopt() + int opt_long_index = 0; // Holds index of long_option inside of long_options[] std::string drop_arg; // Value of -Dargument size_t percent_loc = 0; // Location of % sign in -D double drop_percent = 0; // % value (1..100) in -D @@ -246,8 +247,10 @@ CommandOptions::initialize(int argc, char** argv, bool print_cmd_line) { while((opt = getopt_long(argc, argv, "huv46A:r:t:R:b:n:p:d:D:l:P:a:L:N:M:s:iBc1" "J:T:X:O:o:E:S:I:x:W:w:e:f:F:g:C:y:Y:", - long_options, NULL)) != -1) { - stream << " -" << static_cast(opt); + long_options, &opt_long_index)) != -1) { + stream << " -"; + opt <= 'z' ? stream << static_cast(opt) : + stream << "-" << long_options[opt_long_index].name; if (optarg) { stream << " " << optarg; } @@ -633,14 +636,14 @@ CommandOptions::initialize(int argc, char** argv, bool print_cmd_line) { try { isc::util::encode::decodeHex(opt_text, bin); } catch (const BadValue& e) { - isc_throw(InvalidParameter, "Error during encoding option --o1r:" + isc_throw(InvalidParameter, "Error during decoding option --o1r:" << e.what()); } // Create and remember the option. OptionPtr option(new Option(Option::V6, code, bin)); // For now, only 1 level of encapsulation is allowed for relay options, - // thus 1 key is hardcoded below. But in future, if needed, level of + // thus 1 key is hardcoded below. But in the future, if needed, level of // encapsulation of relay option could be taken from command option. auto relay_1_opts = relay_opts_.find(1); relay_1_opts->second.insert(make_pair(code, option)); diff --git a/src/bin/perfdhcp/tests/command_options_unittest.cc b/src/bin/perfdhcp/tests/command_options_unittest.cc index 1854937b52..1d063de209 100644 --- a/src/bin/perfdhcp/tests/command_options_unittest.cc +++ b/src/bin/perfdhcp/tests/command_options_unittest.cc @@ -898,3 +898,34 @@ TEST_F(CommandOptionsTest, ElapsedTime) { EXPECT_EQ(3, opt.getIncreaseElapsedTime()); EXPECT_EQ(10, opt.getWaitForElapsedTime()); } + +TEST_F(CommandOptionsTest, UseRelayV6OptionsWithoutRelayEncapsulation) { + CommandOptions opt; + EXPECT_NO_THROW(process(opt, "perfdhcp -6 -A1 --o1r 32,00000E10 -l ethx all")); + EXPECT_TRUE(opt.isUseRelayedV6()); + EXPECT_EQ(1, opt.getRelayOpts().size()); + + // --o1r must be used together with -A + EXPECT_THROW(process(opt, "perfdhcp -6 --o1r 32,00000E10 -l ethx all"), isc::InvalidParameter); +} + +TEST_F(CommandOptionsTest, UseRelayV6OptionsNoComma) { + CommandOptions opt; + + // --o1r must be followed by option code, a coma and hexstring + EXPECT_THROW(process(opt, "perfdhcp -6 --o1r 3200000E10 -l ethx all"), isc::InvalidParameter); +} + +TEST_F(CommandOptionsTest, UseRelayV6OptionsNegativeOptionCode) { + CommandOptions opt; + + // --o1r must be followed by positive option code, a coma and hexstring + EXPECT_THROW(process(opt, "perfdhcp -6 --o1r -32,00000E10 -l ethx all"), isc::InvalidParameter); +} + +TEST_F(CommandOptionsTest, UseRelayV6OptionsWrongHexstring) { + CommandOptions opt; + + // --o1r hexstring containing char Z which is not correct + EXPECT_THROW(process(opt, "perfdhcp -6 --o1r -32,Z0000E10 -l ethx all"), isc::InvalidParameter); +}