Browse Source

[master] Merge branch 'trac3959'

Marcin Siodelski 9 years ago
parent
commit
9045fd9d6d
2 changed files with 28 additions and 1 deletions
  1. 14 1
      src/lib/dhcp/option_int_array.h
  2. 14 0
      src/lib/dhcp/tests/option_int_array_unittest.cc

+ 14 - 1
src/lib/dhcp/option_int_array.h

@@ -262,7 +262,20 @@ public:
         std::string data_type = OptionDataTypeUtil::getDataTypeName(OptionDataTypeTraits<T>::type);
         for (typename std::vector<T>::const_iterator value = values_.begin();
              value != values_.end(); ++value) {
-            output << " " << *value << "(" << data_type << ")";
+            output << " ";
+
+            // For 1 byte long data types we need to cast to the integer
+            // because they are usually implemented as "char" types, in
+            // which case the character rather than number would be printed.
+            if (OptionDataTypeTraits<T>::len == 1) {
+                output << static_cast<int>(*value);
+
+            } else {
+                output << *value;
+            }
+
+            // Append data type.
+            output << "(" << data_type << ")";
         }
 
         return (output.str());

+ 14 - 0
src/lib/dhcp/tests/option_int_array_unittest.cc

@@ -476,4 +476,18 @@ TEST_F(OptionIntArrayTest, toText) {
               option.toText());
 }
 
+// This test checks that the option holding multiple uint8 values
+// is correctly converted to the textual format.
+TEST_F(OptionIntArrayTest, toTextUint8) {
+    OptionUint8Array option(Option::V4, 128);
+    option.addValue(1);
+    option.addValue(7);
+    option.addValue(15);
+
+    EXPECT_EQ("type=128, len=003: 1(uint8) 7(uint8) 15(uint8)",
+              option.toText());
+}
+
+
+
 } // anonymous namespace