Browse Source

[trac703] Added ability to set section count fields

Stephen Morris 14 years ago
parent
commit
3999bb246e

+ 1 - 1
tests/tools/badpacket/command_options.cc

@@ -252,7 +252,7 @@ CommandOptions::processOptionValue(int c, const char* value) {
     // Check that tokens lie inside the allowed ranges
     if ((tokens.size() == 1) &&
         ((limits_[index][0] < OptionInfo::minval(index)) || (limits_[index][0] > maxval))) {
-        isc_throw(isc::BadValue, "the tokens of " << limits_[index][0] <<
+        isc_throw(isc::BadValue, "the value of " << limits_[index][0] <<
                   " given for " << name << " is outside the range of " <<
                   minval << " to " << maxval);
     } else if (limits_[index][0] < minval) {

+ 1 - 1
tests/tools/badpacket/option_info.h

@@ -70,8 +70,8 @@ public:
         int             word;           // Byte offset of word in the header
         uint16_t        mask;           // Bit mask of field in the flags word
         int             offset;         // Offset of field in flags word
-        uint32_t        minval;         // Minimum valid value for this field
         uint32_t        defval;         // Default value
+        uint32_t        minval;         // Minimum valid value for this field
         uint32_t        maxval;         // Maximum valid value for this field
     };
 

+ 51 - 1
tests/tools/badpacket/tests/option_info_unittest.cc

@@ -31,74 +31,124 @@ public:
 
 // Check the values are as expected
 
-TEST_F(OptionInfoTest, values) {
+TEST_F(OptionInfoTest, FlagValues) {
     EXPECT_STREQ("qr", OptionInfo::name(OptionInfo::QR));
     EXPECT_STREQ("qr", OptionInfo::name(OptionInfo::getIndex('Q')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::QR));
     EXPECT_EQ(0x8000,  OptionInfo::mask(OptionInfo::QR));
     EXPECT_EQ(15,      OptionInfo::offset(OptionInfo::QR));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::QR));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::QR));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::QR));
 
     EXPECT_STREQ("op", OptionInfo::name(OptionInfo::OP));
     EXPECT_STREQ("op", OptionInfo::name(OptionInfo::getIndex('O')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::OP));
     EXPECT_EQ(0x7800,  OptionInfo::mask(OptionInfo::OP));
     EXPECT_EQ(11,      OptionInfo::offset(OptionInfo::OP));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::OP));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::OP));
     EXPECT_EQ(15,      OptionInfo::maxval(OptionInfo::OP));
 
     EXPECT_STREQ("aa", OptionInfo::name(OptionInfo::AA));
     EXPECT_STREQ("aa", OptionInfo::name(OptionInfo::getIndex('A')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::AA));
     EXPECT_EQ(0x0400,  OptionInfo::mask(OptionInfo::AA));
     EXPECT_EQ(10,      OptionInfo::offset(OptionInfo::AA));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::AA));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::AA));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::AA));
 
     EXPECT_STREQ("tc", OptionInfo::name(OptionInfo::TC));
     EXPECT_STREQ("tc", OptionInfo::name(OptionInfo::getIndex('T')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::TC));
     EXPECT_EQ(0x0200,  OptionInfo::mask(OptionInfo::TC));
     EXPECT_EQ(9,       OptionInfo::offset(OptionInfo::TC));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::TC));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::TC));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::TC));
 
     EXPECT_STREQ("rd", OptionInfo::name(OptionInfo::RD));
     EXPECT_STREQ("rd", OptionInfo::name(OptionInfo::getIndex('D')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::RD));
     EXPECT_EQ(0x0100,  OptionInfo::mask(OptionInfo::RD));
     EXPECT_EQ(8,       OptionInfo::offset(OptionInfo::RD));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::RD));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::RD));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::RD));
 
     EXPECT_STREQ("ra", OptionInfo::name(OptionInfo::RA));
     EXPECT_STREQ("ra", OptionInfo::name(OptionInfo::getIndex('R')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::RA));
     EXPECT_EQ(0x0080,  OptionInfo::mask(OptionInfo::RA));
     EXPECT_EQ(7,       OptionInfo::offset(OptionInfo::RA));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::RA));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::RA));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::RA));
 
     EXPECT_STREQ("z",  OptionInfo::name(OptionInfo::Z));
     EXPECT_STREQ("z",  OptionInfo::name(OptionInfo::getIndex('Z')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::Z));
     EXPECT_EQ(0x0040,  OptionInfo::mask(OptionInfo::Z));
     EXPECT_EQ(6,       OptionInfo::offset(OptionInfo::Z));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::Z));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::Z));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::Z));
 
     EXPECT_STREQ("ad", OptionInfo::name(OptionInfo::AD));
     EXPECT_STREQ("ad", OptionInfo::name(OptionInfo::getIndex('U')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::AD));
     EXPECT_EQ(0x0020,  OptionInfo::mask(OptionInfo::AD));
     EXPECT_EQ(5,       OptionInfo::offset(OptionInfo::AD));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::AD));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::AD));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::AD));
 
     EXPECT_STREQ("cd", OptionInfo::name(OptionInfo::CD));
     EXPECT_STREQ("cd", OptionInfo::name(OptionInfo::getIndex('C')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::CD));
     EXPECT_EQ(0x0010,  OptionInfo::mask(OptionInfo::CD));
     EXPECT_EQ(4,       OptionInfo::offset(OptionInfo::CD));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::CD));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::CD));
     EXPECT_EQ(1,       OptionInfo::maxval(OptionInfo::CD));
 
     EXPECT_STREQ("rc", OptionInfo::name(OptionInfo::RC));
     EXPECT_STREQ("rc", OptionInfo::name(OptionInfo::getIndex('E')));
+    EXPECT_EQ(2,       OptionInfo::word(OptionInfo::RC));
     EXPECT_EQ(0x000F,  OptionInfo::mask(OptionInfo::RC));
     EXPECT_EQ(0,       OptionInfo::offset(OptionInfo::RC));
     EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::RC));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::RC));
     EXPECT_EQ(15,      OptionInfo::maxval(OptionInfo::RC));
 }
+
+TEST_F(OptionInfoTest, CountValues) {
+    EXPECT_STREQ("qc", OptionInfo::name(OptionInfo::QC));
+    EXPECT_STREQ("qc", OptionInfo::name(OptionInfo::getIndex('Y')));
+    EXPECT_EQ(4,       OptionInfo::word(OptionInfo::QC));
+    EXPECT_EQ(1,       OptionInfo::defval(OptionInfo::QC));
+    EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::QC));
+    EXPECT_EQ(0xFFFF,  OptionInfo::maxval(OptionInfo::QC));
+
+    EXPECT_STREQ("ac", OptionInfo::name(OptionInfo::AC));
+    EXPECT_STREQ("ac", OptionInfo::name(OptionInfo::getIndex('W')));
+    EXPECT_EQ(6,       OptionInfo::word(OptionInfo::AC));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::AC));
+    EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::AC));
+    EXPECT_EQ(0xFFFF,  OptionInfo::maxval(OptionInfo::AC));
+
+    EXPECT_STREQ("uc", OptionInfo::name(OptionInfo::UC));
+    EXPECT_STREQ("uc", OptionInfo::name(OptionInfo::getIndex('H')));
+    EXPECT_EQ(8,       OptionInfo::word(OptionInfo::UC));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::UC));
+    EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::UC));
+    EXPECT_EQ(0xFFFF,  OptionInfo::maxval(OptionInfo::UC));
+
+    EXPECT_STREQ("dc", OptionInfo::name(OptionInfo::DC));
+    EXPECT_STREQ("dc", OptionInfo::name(OptionInfo::getIndex('I')));
+    EXPECT_EQ(10,      OptionInfo::word(OptionInfo::DC));
+    EXPECT_EQ(0,       OptionInfo::defval(OptionInfo::DC));
+    EXPECT_EQ(0,       OptionInfo::minval(OptionInfo::DC));
+    EXPECT_EQ(0xFFFF,  OptionInfo::maxval(OptionInfo::DC));
+}