serial_unittest.cc 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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 <gtest/gtest.h>
  15. #include <dns/serial.h>
  16. using namespace isc::dns;
  17. class SerialTest : public ::testing::Test {
  18. public:
  19. SerialTest() : one(1), one_2(1), two(2),
  20. date_zero(1980120100), date_one(1980120101),
  21. min(0), max(4294967295u),
  22. number_low(12345),
  23. number_medium(2000000000),
  24. number_high(4000000000u)
  25. {}
  26. Serial one, one_2, two, date_zero, date_one, min, max, number_low, number_medium, number_high;
  27. };
  28. //
  29. // Basic tests
  30. //
  31. TEST_F(SerialTest, get_value) {
  32. EXPECT_EQ(1, one.getValue());
  33. EXPECT_NE(2, one.getValue());
  34. EXPECT_EQ(2, two.getValue());
  35. EXPECT_EQ(1980120100, date_zero.getValue());
  36. EXPECT_EQ(1980120101, date_one.getValue());
  37. EXPECT_EQ(0, min.getValue());
  38. EXPECT_EQ(4294967295u, max.getValue());
  39. EXPECT_EQ(12345, number_low.getValue());
  40. EXPECT_EQ(2000000000, number_medium.getValue());
  41. EXPECT_EQ(4000000000u, number_high.getValue());
  42. }
  43. TEST_F(SerialTest, equals) {
  44. EXPECT_EQ(one, one);
  45. EXPECT_EQ(one, one);
  46. EXPECT_EQ(one, one_2);
  47. EXPECT_NE(one, two);
  48. EXPECT_NE(two, one);
  49. EXPECT_EQ(Serial(12345), number_low);
  50. EXPECT_NE(Serial(12346), number_low);
  51. }
  52. TEST_F(SerialTest, comparison) {
  53. // These should be true/false even without serial arithmetic
  54. EXPECT_LE(one, one);
  55. EXPECT_LE(one, one_2);
  56. EXPECT_LT(one, two);
  57. EXPECT_LE(one, two);
  58. EXPECT_GE(two, two);
  59. EXPECT_GT(two, one);
  60. EXPECT_LT(one, number_low);
  61. EXPECT_LT(number_low, number_medium);
  62. EXPECT_LT(number_medium, number_high);
  63. // now let's try some that 'wrap', as it were
  64. EXPECT_GT(min, max);
  65. EXPECT_LT(max, min);
  66. EXPECT_LT(number_high, number_low);
  67. }
  68. //
  69. // RFC 1982 Section 3.1
  70. //
  71. TEST_F(SerialTest, addition) {
  72. EXPECT_EQ(two, one + one);
  73. EXPECT_EQ(two, one + one_2);
  74. EXPECT_EQ(max, max + min);
  75. EXPECT_EQ(min, max + one);
  76. EXPECT_EQ(one, max + two);
  77. EXPECT_EQ(one, max + one + one);
  78. EXPECT_EQ(one + 100, max + 102);
  79. EXPECT_EQ(min + 2147483645, max + 2147483646);
  80. EXPECT_EQ(min + 2147483646, max + MAX_SERIAL_INCREMENT);
  81. }
  82. //
  83. // RFC 1982 Section 3.2 has been checked by the basic tests above
  84. //
  85. //
  86. // RFC 1982 Section 4.1
  87. //
  88. // Helper function for addition_always_larger test, add some numbers
  89. // and check that the result is always larger than the original
  90. void do_addition_larger_test(const Serial& number) {
  91. EXPECT_GE(number + 0, number);
  92. EXPECT_EQ(number + 0, number);
  93. EXPECT_GT(number + 1, number);
  94. EXPECT_GT(number + 2, number);
  95. EXPECT_GT(number + 100, number);
  96. EXPECT_GT(number + 1111111, number);
  97. EXPECT_GT(number + 2147483646, number);
  98. EXPECT_GT(number + MAX_SERIAL_INCREMENT, number);
  99. // Try MAX_SERIAL_INCREMENT as a hardcoded number as well
  100. EXPECT_GT(number + 2147483647, number);
  101. }
  102. TEST_F(SerialTest, addition_always_larger) {
  103. do_addition_larger_test(one);
  104. do_addition_larger_test(two);
  105. do_addition_larger_test(date_zero);
  106. do_addition_larger_test(date_one);
  107. do_addition_larger_test(min);
  108. do_addition_larger_test(max);
  109. do_addition_larger_test(number_low);
  110. do_addition_larger_test(number_medium);
  111. do_addition_larger_test(number_high);
  112. }
  113. //
  114. // RFC 1982 Section 4.2
  115. //
  116. // Helper function to do the second addition
  117. void
  118. do_two_additions_test_second(const Serial &original,
  119. const Serial &number)
  120. {
  121. EXPECT_NE(original, number);
  122. EXPECT_NE(original, number + 0);
  123. EXPECT_NE(original, number + 1);
  124. EXPECT_NE(original, number + 2);
  125. EXPECT_NE(original, number + 100);
  126. EXPECT_NE(original, number + 1111111);
  127. EXPECT_NE(original, number + 2147483646);
  128. EXPECT_NE(original, number + MAX_SERIAL_INCREMENT);
  129. EXPECT_NE(original, number + 2147483647);
  130. }
  131. void do_two_additions_test_first(const Serial &number) {
  132. do_two_additions_test_second(number, number + 1);
  133. do_two_additions_test_second(number, number + 2);
  134. do_two_additions_test_second(number, number + 100);
  135. do_two_additions_test_second(number, number + 1111111);
  136. do_two_additions_test_second(number, number + 2147483646);
  137. do_two_additions_test_second(number, number + MAX_SERIAL_INCREMENT);
  138. do_two_additions_test_second(number, number + 2147483647);
  139. }
  140. TEST_F(SerialTest, two_additions_never_equal) {
  141. do_two_additions_test_first(one);
  142. do_two_additions_test_first(two);
  143. do_two_additions_test_first(date_zero);
  144. do_two_additions_test_first(date_one);
  145. do_two_additions_test_first(min);
  146. do_two_additions_test_first(max);
  147. do_two_additions_test_first(number_low);
  148. do_two_additions_test_first(number_medium);
  149. do_two_additions_test_first(number_high);
  150. }
  151. //
  152. // RFC 1982 Section 4.3 and 4.4 have nothing to test
  153. //
  154. //
  155. // Tests from RFC 1982 examples
  156. //
  157. TEST(SerialTextRFCExamples, rfc_example_tests) {
  158. }