master_loader_callbacks_test.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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/master_loader_callbacks.h>
  15. #include <dns/rrset.h>
  16. #include <dns/name.h>
  17. #include <dns/rrttl.h>
  18. #include <dns/rrclass.h>
  19. #include <exceptions/exceptions.h>
  20. #include <gtest/gtest.h>
  21. #include <boost/bind.hpp>
  22. namespace {
  23. using std::string;
  24. using namespace isc::dns;
  25. class MasterLoaderCallbacksTest : public ::testing::Test {
  26. protected:
  27. MasterLoaderCallbacksTest() :
  28. last_was_error_(false), // Not needed, but then cppcheck complains
  29. issue_called_(false),
  30. rrset_(new RRset(Name("example.org"), RRClass::IN(), RRType::A(),
  31. RRTTL(3600))),
  32. error_(boost::bind(&MasterLoaderCallbacksTest::checkCallback, this,
  33. true, _1, _2, _3)),
  34. warning_(boost::bind(&MasterLoaderCallbacksTest::checkCallback, this,
  35. false, _1, _2, _3)),
  36. callbacks_(error_, warning_)
  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. bool last_was_error_;
  48. bool issue_called_;
  49. const RRsetPtr rrset_;
  50. const MasterLoaderCallbacks::IssueCallback error_, warning_;
  51. MasterLoaderCallbacks callbacks_;
  52. };
  53. // Check the constructor rejects empty callbacks, but accepts non-empty ones
  54. TEST_F(MasterLoaderCallbacksTest, constructor) {
  55. EXPECT_THROW(MasterLoaderCallbacks(MasterLoaderCallbacks::IssueCallback(),
  56. warning_), isc::InvalidParameter);
  57. EXPECT_THROW(MasterLoaderCallbacks(error_,
  58. MasterLoaderCallbacks::IssueCallback()),
  59. isc::InvalidParameter);
  60. EXPECT_NO_THROW(MasterLoaderCallbacks(error_, warning_));
  61. }
  62. // Call the issue callbacks
  63. TEST_F(MasterLoaderCallbacksTest, issueCall) {
  64. callbacks_.error("source", 1, "reason");
  65. EXPECT_TRUE(last_was_error_);
  66. EXPECT_TRUE(issue_called_);
  67. issue_called_ = false;
  68. callbacks_.warning("source", 1, "reason");
  69. EXPECT_FALSE(last_was_error_);
  70. EXPECT_TRUE(issue_called_);
  71. }
  72. }