loader_callbacks_test.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright (C) 2012 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 <dns/loader_callbacks.h>
  15. #include <dns/name.h>
  16. #include <dns/rrttl.h>
  17. #include <dns/rrclass.h>
  18. #include <exceptions/exceptions.h>
  19. #include <gtest/gtest.h>
  20. #include <boost/bind.hpp>
  21. namespace {
  22. using std::string;
  23. using namespace isc::dns;
  24. class LoaderCallbacksTest : public ::testing::Test {
  25. protected:
  26. LoaderCallbacksTest() :
  27. issue_called_(false),
  28. add_called_(false),
  29. rrset_(new RRset(Name("example.org"), RRClass::IN(), RRType::A(),
  30. RRTTL(3600))),
  31. error_(boost::bind(&LoaderCallbacksTest::checkCallback, this, true, _1,
  32. _2, _3)),
  33. warning_(boost::bind(&LoaderCallbacksTest::checkCallback, this, false,
  34. _1, _2, _3)),
  35. add_(boost::bind(&LoaderCallbacksTest::checkAdd, this, _1)),
  36. callbacks_(error_, warning_, add_)
  37. {}
  38. void checkCallback(bool error, const string& source, size_t line,
  39. const string& reason)
  40. {
  41. issue_called_ = true;
  42. last_was_error_ = error;
  43. EXPECT_EQ("source", source);
  44. EXPECT_EQ(1, line);
  45. EXPECT_EQ("reason", reason);
  46. }
  47. void checkAdd(const RRsetPtr& rrset) {
  48. add_called_ = true;
  49. EXPECT_EQ(rrset_, rrset);
  50. }
  51. bool last_was_error_;
  52. bool issue_called_, add_called_;
  53. const RRsetPtr rrset_;
  54. const LoaderCallbacks::IssueCallback error_, warning_;
  55. const LoaderCallbacks::AddCallback add_;
  56. LoaderCallbacks callbacks_;
  57. };
  58. // Check the constructor rejects empty callbacks, but accepts non-empty ones
  59. TEST_F(LoaderCallbacksTest, constructor) {
  60. EXPECT_THROW(LoaderCallbacks(LoaderCallbacks::IssueCallback(), warning_,
  61. add_), isc::InvalidParameter);
  62. EXPECT_THROW(LoaderCallbacks(error_, LoaderCallbacks::IssueCallback(),
  63. add_), isc::InvalidParameter);
  64. EXPECT_THROW(LoaderCallbacks(error_, warning_,
  65. LoaderCallbacks::AddCallback()),
  66. isc::InvalidParameter);
  67. EXPECT_NO_THROW(LoaderCallbacks(error_, warning_, add_));
  68. }
  69. // Call the issue callbacks
  70. TEST_F(LoaderCallbacksTest, issueCall) {
  71. callbacks_.error("source", 1, "reason");
  72. EXPECT_TRUE(last_was_error_);
  73. EXPECT_TRUE(issue_called_);
  74. issue_called_ = false;
  75. callbacks_.warning("source", 1, "reason");
  76. EXPECT_FALSE(last_was_error_);
  77. EXPECT_TRUE(issue_called_);
  78. }
  79. // Call the add callback
  80. TEST_F(LoaderCallbacksTest, addCall) {
  81. EXPECT_FALSE(issue_called_);
  82. callbacks_.addRRset(rrset_);
  83. EXPECT_TRUE(add_called_);
  84. }
  85. }