tsigerror_unittest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 <string>
  15. #include <ostream>
  16. #include <gtest/gtest.h>
  17. #include <exceptions/exceptions.h>
  18. #include <dns/rcode.h>
  19. #include <dns/tsigerror.h>
  20. using namespace std;
  21. using namespace isc;
  22. using namespace isc::dns;
  23. namespace {
  24. TEST(TSIGErrorTest, constructFromErrorCode) {
  25. // These are pretty trivial, and also test getCode();
  26. EXPECT_EQ(0, TSIGError(0).getCode());
  27. EXPECT_EQ(18, TSIGError(18).getCode());
  28. EXPECT_EQ(65535, TSIGError(65535).getCode());
  29. }
  30. TEST(TSIGErrorTest, constructFromRcode) {
  31. // We use RCODE for code values from 0-15.
  32. EXPECT_EQ(0, TSIGError(Rcode::NOERROR()).getCode());
  33. EXPECT_EQ(15, TSIGError(Rcode(15)).getCode());
  34. // From error code 16 TSIG errors define a separate space, so passing
  35. // corresponding RCODE for such code values should be prohibited.
  36. EXPECT_THROW(TSIGError(Rcode(16)).getCode(), OutOfRange);
  37. }
  38. TEST(TSIGErrorTest, constants) {
  39. // We'll only test arbitrarily chosen subsets of the codes.
  40. // This class is quite simple, so it should be suffice.
  41. EXPECT_EQ(TSIGError::BAD_SIG_CODE, TSIGError(16).getCode());
  42. EXPECT_EQ(TSIGError::BAD_KEY_CODE, TSIGError(17).getCode());
  43. EXPECT_EQ(TSIGError::BAD_TIME_CODE, TSIGError(18).getCode());
  44. EXPECT_EQ(0, TSIGError::NOERROR().getCode());
  45. EXPECT_EQ(9, TSIGError::NOTAUTH().getCode());
  46. EXPECT_EQ(14, TSIGError::RESERVED14().getCode());
  47. EXPECT_EQ(TSIGError::BAD_SIG_CODE, TSIGError::BAD_SIG().getCode());
  48. EXPECT_EQ(TSIGError::BAD_KEY_CODE, TSIGError::BAD_KEY().getCode());
  49. EXPECT_EQ(TSIGError::BAD_TIME_CODE, TSIGError::BAD_TIME().getCode());
  50. }
  51. TEST(TSIGErrorTest, equal) {
  52. EXPECT_TRUE(TSIGError::NOERROR() == TSIGError(Rcode::NOERROR()));
  53. EXPECT_TRUE(TSIGError(Rcode::NOERROR()) == TSIGError::NOERROR());
  54. EXPECT_TRUE(TSIGError::NOERROR().equals(TSIGError(Rcode::NOERROR())));
  55. EXPECT_TRUE(TSIGError::NOERROR().equals(TSIGError(Rcode::NOERROR())));
  56. EXPECT_TRUE(TSIGError::BAD_SIG() == TSIGError(16));
  57. EXPECT_TRUE(TSIGError(16) == TSIGError::BAD_SIG());
  58. EXPECT_TRUE(TSIGError::BAD_SIG().equals(TSIGError(16)));
  59. EXPECT_TRUE(TSIGError(16).equals(TSIGError::BAD_SIG()));
  60. }
  61. TEST(TSIGErrorTest, nequal) {
  62. EXPECT_TRUE(TSIGError::BAD_KEY() != TSIGError(Rcode::NOERROR()));
  63. EXPECT_TRUE(TSIGError(Rcode::NOERROR()) != TSIGError::BAD_KEY());
  64. EXPECT_TRUE(TSIGError::BAD_KEY().nequals(TSIGError(Rcode::NOERROR())));
  65. EXPECT_TRUE(TSIGError(Rcode::NOERROR()).nequals(TSIGError::BAD_KEY()));
  66. }
  67. TEST(TSIGErrorTest, toText) {
  68. // TSIGError derived from the standard Rcode
  69. EXPECT_EQ("NOERROR", TSIGError(Rcode::NOERROR()).toText());
  70. // Well known TSIG errors
  71. EXPECT_EQ("BADSIG", TSIGError::BAD_SIG().toText());
  72. EXPECT_EQ("BADKEY", TSIGError::BAD_KEY().toText());
  73. EXPECT_EQ("BADTIME", TSIGError::BAD_TIME().toText());
  74. // Unknown (or not yet supported) codes. Simply converted as numeric.
  75. EXPECT_EQ("19", TSIGError(19).toText());
  76. EXPECT_EQ("65535", TSIGError(65535).toText());
  77. }
  78. // test operator<<. We simply confirm it appends the result of toText().
  79. TEST(TSIGErrorTest, LeftShiftOperator) {
  80. ostringstream oss;
  81. oss << TSIGError::BAD_KEY();
  82. EXPECT_EQ(TSIGError::BAD_KEY().toText(), oss.str());
  83. }
  84. } // end namespace