resolver_callback_unittest.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright (C) 2010 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 <asiolink/dns_server.h>
  16. #include <resolve/resolver_callback.h>
  17. using namespace isc::resolve;
  18. // Dummy subclass for DNSServer*
  19. // We want to check if resume is called
  20. // Since the server will get cloned(), we want the clones to share
  21. // our bools for whether resume got called and with what value
  22. class DummyServer : public asiolink::DNSServer {
  23. public:
  24. DummyServer(DummyServer* orig) {
  25. resume_called_ = orig->getResumeCalled();
  26. resume_value_ = orig->getResumeValue();
  27. }
  28. DummyServer(bool* resume_called, bool* resume_value) :
  29. resume_called_(resume_called), resume_value_(resume_value)
  30. {}
  31. bool* getResumeCalled() { return resume_called_; }
  32. bool* getResumeValue() { return resume_value_; }
  33. DNSServer* clone() {
  34. DummyServer* n = new DummyServer(this);
  35. return n;
  36. }
  37. void resume(bool value) {
  38. *resume_called_ = true;
  39. *resume_value_ = value;
  40. }
  41. private:
  42. bool* resume_called_;
  43. bool* resume_value_;
  44. };
  45. class ResolverCallbackServerTest : public ::testing::Test {
  46. public:
  47. ResolverCallbackServerTest() : resume_called_(false),
  48. resume_value_(false) {
  49. server_ = new DummyServer(&resume_called_, &resume_value_);
  50. callback_ = new ResolverCallbackServer(server_);
  51. };
  52. ~ResolverCallbackServerTest() {
  53. delete callback_;
  54. delete server_;
  55. }
  56. DummyServer* getServer() { return server_; }
  57. ResolverCallbackServer* getCallback() { return callback_; }
  58. bool getResumeCalled() { return resume_called_; }
  59. bool getResumeValue() { return resume_value_; }
  60. private:
  61. DummyServer* server_;
  62. ResolverCallbackServer* callback_;
  63. bool resume_called_;
  64. bool resume_value_;
  65. };
  66. TEST_F(ResolverCallbackServerTest, testSuccess) {
  67. EXPECT_FALSE(getResumeCalled());
  68. getCallback()->success(isc::dns::MessagePtr());
  69. EXPECT_TRUE(getResumeCalled());
  70. EXPECT_TRUE(getResumeValue());
  71. }
  72. TEST_F(ResolverCallbackServerTest, testFailure) {
  73. EXPECT_FALSE(getResumeCalled());
  74. getCallback()->failure();
  75. EXPECT_TRUE(getResumeCalled());
  76. EXPECT_FALSE(getResumeValue());
  77. }