]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2834] Adding UTs for relayed v6 opts
authorPiotrek Zadroga <piotrek@isc.org>
Mon, 22 May 2023 20:50:23 +0000 (22:50 +0200)
committerPiotrek Zadroga <piotrek@isc.org>
Fri, 26 May 2023 13:20:31 +0000 (15:20 +0200)
src/bin/perfdhcp/command_options.cc
src/bin/perfdhcp/tests/command_options_unittest.cc

index cb8a557e0f8392435ce6d6d15f77651e32e4c59b..5167421c820e7e3855cf5b49c7d99c44b3d48397 100644 (file)
@@ -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 -D<value>argument
     size_t percent_loc = 0;     // Location of % sign in -D<value>
     double drop_percent = 0;    // % value (1..100) in -D<value%>
@@ -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<char>(opt);
+                             long_options, &opt_long_index)) != -1) {
+        stream << " -";
+        opt <= 'z' ? stream << static_cast<char>(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));
index 1854937b52db5801226d1d5e2e50a9a9b6181cbc..1d063de209dfcfd768d41ecafd547802f8845ddf 100644 (file)
@@ -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);
+}