option_info_unittest.cc 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. // Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. #include <cstddef>
  15. #include <stdint.h>
  16. #include <gtest/gtest.h>
  17. #include "../option_info.h"
  18. using namespace isc::badpacket;
  19. // Test fixture class
  20. class OptionInfoTest : public ::testing::Test {
  21. public:
  22. OptionInfoTest() {}
  23. };
  24. // Check the values are as expected
  25. TEST_F(OptionInfoTest, FlagValues) {
  26. EXPECT_STREQ("qr", OptionInfo::name(OptionInfo::QR));
  27. EXPECT_STREQ("qr", OptionInfo::name(OptionInfo::getIndex('Q')));
  28. EXPECT_EQ(2, OptionInfo::word(OptionInfo::QR));
  29. EXPECT_EQ(0x8000, OptionInfo::mask(OptionInfo::QR));
  30. EXPECT_EQ(15, OptionInfo::offset(OptionInfo::QR));
  31. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::QR));
  32. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::QR));
  33. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::QR));
  34. EXPECT_STREQ("op", OptionInfo::name(OptionInfo::OP));
  35. EXPECT_STREQ("op", OptionInfo::name(OptionInfo::getIndex('O')));
  36. EXPECT_EQ(2, OptionInfo::word(OptionInfo::OP));
  37. EXPECT_EQ(0x7800, OptionInfo::mask(OptionInfo::OP));
  38. EXPECT_EQ(11, OptionInfo::offset(OptionInfo::OP));
  39. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::OP));
  40. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::OP));
  41. EXPECT_EQ(15, OptionInfo::maxval(OptionInfo::OP));
  42. EXPECT_STREQ("aa", OptionInfo::name(OptionInfo::AA));
  43. EXPECT_STREQ("aa", OptionInfo::name(OptionInfo::getIndex('A')));
  44. EXPECT_EQ(2, OptionInfo::word(OptionInfo::AA));
  45. EXPECT_EQ(0x0400, OptionInfo::mask(OptionInfo::AA));
  46. EXPECT_EQ(10, OptionInfo::offset(OptionInfo::AA));
  47. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::AA));
  48. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::AA));
  49. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::AA));
  50. EXPECT_STREQ("tc", OptionInfo::name(OptionInfo::TC));
  51. EXPECT_STREQ("tc", OptionInfo::name(OptionInfo::getIndex('T')));
  52. EXPECT_EQ(2, OptionInfo::word(OptionInfo::TC));
  53. EXPECT_EQ(0x0200, OptionInfo::mask(OptionInfo::TC));
  54. EXPECT_EQ(9, OptionInfo::offset(OptionInfo::TC));
  55. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::TC));
  56. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::TC));
  57. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::TC));
  58. EXPECT_STREQ("rd", OptionInfo::name(OptionInfo::RD));
  59. EXPECT_STREQ("rd", OptionInfo::name(OptionInfo::getIndex('D')));
  60. EXPECT_EQ(2, OptionInfo::word(OptionInfo::RD));
  61. EXPECT_EQ(0x0100, OptionInfo::mask(OptionInfo::RD));
  62. EXPECT_EQ(8, OptionInfo::offset(OptionInfo::RD));
  63. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::RD));
  64. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::RD));
  65. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::RD));
  66. EXPECT_STREQ("ra", OptionInfo::name(OptionInfo::RA));
  67. EXPECT_STREQ("ra", OptionInfo::name(OptionInfo::getIndex('R')));
  68. EXPECT_EQ(2, OptionInfo::word(OptionInfo::RA));
  69. EXPECT_EQ(0x0080, OptionInfo::mask(OptionInfo::RA));
  70. EXPECT_EQ(7, OptionInfo::offset(OptionInfo::RA));
  71. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::RA));
  72. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::RA));
  73. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::RA));
  74. EXPECT_STREQ("z", OptionInfo::name(OptionInfo::Z));
  75. EXPECT_STREQ("z", OptionInfo::name(OptionInfo::getIndex('Z')));
  76. EXPECT_EQ(2, OptionInfo::word(OptionInfo::Z));
  77. EXPECT_EQ(0x0040, OptionInfo::mask(OptionInfo::Z));
  78. EXPECT_EQ(6, OptionInfo::offset(OptionInfo::Z));
  79. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::Z));
  80. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::Z));
  81. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::Z));
  82. EXPECT_STREQ("ad", OptionInfo::name(OptionInfo::AD));
  83. EXPECT_STREQ("ad", OptionInfo::name(OptionInfo::getIndex('U')));
  84. EXPECT_EQ(2, OptionInfo::word(OptionInfo::AD));
  85. EXPECT_EQ(0x0020, OptionInfo::mask(OptionInfo::AD));
  86. EXPECT_EQ(5, OptionInfo::offset(OptionInfo::AD));
  87. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::AD));
  88. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::AD));
  89. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::AD));
  90. EXPECT_STREQ("cd", OptionInfo::name(OptionInfo::CD));
  91. EXPECT_STREQ("cd", OptionInfo::name(OptionInfo::getIndex('C')));
  92. EXPECT_EQ(2, OptionInfo::word(OptionInfo::CD));
  93. EXPECT_EQ(0x0010, OptionInfo::mask(OptionInfo::CD));
  94. EXPECT_EQ(4, OptionInfo::offset(OptionInfo::CD));
  95. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::CD));
  96. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::CD));
  97. EXPECT_EQ(1, OptionInfo::maxval(OptionInfo::CD));
  98. EXPECT_STREQ("rc", OptionInfo::name(OptionInfo::RC));
  99. EXPECT_STREQ("rc", OptionInfo::name(OptionInfo::getIndex('E')));
  100. EXPECT_EQ(2, OptionInfo::word(OptionInfo::RC));
  101. EXPECT_EQ(0x000F, OptionInfo::mask(OptionInfo::RC));
  102. EXPECT_EQ(0, OptionInfo::offset(OptionInfo::RC));
  103. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::RC));
  104. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::RC));
  105. EXPECT_EQ(15, OptionInfo::maxval(OptionInfo::RC));
  106. }
  107. TEST_F(OptionInfoTest, CountValues) {
  108. EXPECT_STREQ("qc", OptionInfo::name(OptionInfo::QC));
  109. EXPECT_STREQ("qc", OptionInfo::name(OptionInfo::getIndex('Y')));
  110. EXPECT_EQ(4, OptionInfo::word(OptionInfo::QC));
  111. EXPECT_EQ(1, OptionInfo::defval(OptionInfo::QC));
  112. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::QC));
  113. EXPECT_EQ(0xFFFF, OptionInfo::maxval(OptionInfo::QC));
  114. EXPECT_STREQ("ac", OptionInfo::name(OptionInfo::AC));
  115. EXPECT_STREQ("ac", OptionInfo::name(OptionInfo::getIndex('W')));
  116. EXPECT_EQ(6, OptionInfo::word(OptionInfo::AC));
  117. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::AC));
  118. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::AC));
  119. EXPECT_EQ(0xFFFF, OptionInfo::maxval(OptionInfo::AC));
  120. EXPECT_STREQ("uc", OptionInfo::name(OptionInfo::UC));
  121. EXPECT_STREQ("uc", OptionInfo::name(OptionInfo::getIndex('H')));
  122. EXPECT_EQ(8, OptionInfo::word(OptionInfo::UC));
  123. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::UC));
  124. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::UC));
  125. EXPECT_EQ(0xFFFF, OptionInfo::maxval(OptionInfo::UC));
  126. EXPECT_STREQ("dc", OptionInfo::name(OptionInfo::DC));
  127. EXPECT_STREQ("dc", OptionInfo::name(OptionInfo::getIndex('I')));
  128. EXPECT_EQ(10, OptionInfo::word(OptionInfo::DC));
  129. EXPECT_EQ(0, OptionInfo::defval(OptionInfo::DC));
  130. EXPECT_EQ(0, OptionInfo::minval(OptionInfo::DC));
  131. EXPECT_EQ(0xFFFF, OptionInfo::maxval(OptionInfo::DC));
  132. }
  133. TEST_F(OptionInfoTest, OtherValues) {
  134. EXPECT_STREQ("ms", OptionInfo::name(OptionInfo::MS));
  135. EXPECT_STREQ("ms", OptionInfo::name(OptionInfo::getIndex('M')));
  136. EXPECT_EQ(1, OptionInfo::minval(OptionInfo::MS));
  137. EXPECT_EQ(65536, OptionInfo::maxval(OptionInfo::MS));
  138. }