dhcp4_srv_unittest.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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 <config.h>
  15. #include <iostream>
  16. #include <sstream>
  17. #include <arpa/inet.h>
  18. #include <gtest/gtest.h>
  19. #include <dhcp/dhcp4.h>
  20. #include <dhcp4/dhcp4_srv.h>
  21. #include <dhcp/option.h>
  22. using namespace std;
  23. using namespace isc;
  24. using namespace isc::dhcp;
  25. namespace {
  26. class NakedDhcpv4Srv: public Dhcpv4Srv {
  27. // "naked" DHCPv4 server, exposes internal fields
  28. public:
  29. NakedDhcpv4Srv() { }
  30. boost::shared_ptr<Pkt4> processDiscover(boost::shared_ptr<Pkt4>& discover) {
  31. return Dhcpv4Srv::processDiscover(discover);
  32. }
  33. boost::shared_ptr<Pkt4> processRequest(boost::shared_ptr<Pkt4>& request) {
  34. return Dhcpv4Srv::processRequest(request);
  35. }
  36. void processRelease(boost::shared_ptr<Pkt4>& release) {
  37. return Dhcpv4Srv::processRelease(release);
  38. }
  39. void processDecline(boost::shared_ptr<Pkt4>& decline) {
  40. Dhcpv4Srv::processDecline(decline);
  41. }
  42. boost::shared_ptr<Pkt4> processInform(boost::shared_ptr<Pkt4>& inform) {
  43. return Dhcpv4Srv::processInform(inform);
  44. }
  45. };
  46. class Dhcpv4SrvTest : public ::testing::Test {
  47. public:
  48. Dhcpv4SrvTest() {
  49. }
  50. ~Dhcpv4SrvTest() {
  51. };
  52. };
  53. TEST_F(Dhcpv4SrvTest, basic) {
  54. // nothing to test. DHCPv4_srv instance is created
  55. // in test fixture. It is destroyed in destructor
  56. Dhcpv4Srv* srv = NULL;
  57. ASSERT_NO_THROW({
  58. srv = new Dhcpv4Srv();
  59. });
  60. delete srv;
  61. }
  62. TEST_F(Dhcpv4SrvTest, processDiscover) {
  63. NakedDhcpv4Srv* srv = new NakedDhcpv4Srv();
  64. boost::shared_ptr<Pkt4> pkt(new Pkt4(DHCPDISCOVER, 1234));
  65. // should not throw
  66. EXPECT_NO_THROW(
  67. srv->processDiscover(pkt);
  68. );
  69. // should return something
  70. EXPECT_TRUE(srv->processDiscover(pkt));
  71. // TODO: Implement more reasonable tests before starting
  72. // work on processSomething() method.
  73. delete srv;
  74. }
  75. TEST_F(Dhcpv4SrvTest, processRequest) {
  76. NakedDhcpv4Srv* srv = new NakedDhcpv4Srv();
  77. boost::shared_ptr<Pkt4> pkt(new Pkt4(DHCPREQUEST, 1234));
  78. // should not throw
  79. EXPECT_NO_THROW(
  80. srv->processRequest(pkt);
  81. );
  82. // should return something
  83. EXPECT_TRUE(srv->processRequest(pkt));
  84. // TODO: Implement more reasonable tests before starting
  85. // work on processSomething() method.
  86. delete srv;
  87. }
  88. TEST_F(Dhcpv4SrvTest, processRelease) {
  89. NakedDhcpv4Srv* srv = new NakedDhcpv4Srv();
  90. boost::shared_ptr<Pkt4> pkt(new Pkt4(DHCPRELEASE, 1234));
  91. // should not throw
  92. EXPECT_NO_THROW(
  93. srv->processRelease(pkt);
  94. );
  95. // TODO: Implement more reasonable tests before starting
  96. // work on processSomething() method.
  97. delete srv;
  98. }
  99. TEST_F(Dhcpv4SrvTest, processDecline) {
  100. NakedDhcpv4Srv* srv = new NakedDhcpv4Srv();
  101. boost::shared_ptr<Pkt4> pkt(new Pkt4(DHCPDECLINE, 1234));
  102. // should not throw
  103. EXPECT_NO_THROW(
  104. srv->processDecline(pkt);
  105. );
  106. // TODO: Implement more reasonable tests before starting
  107. // work on processSomething() method.
  108. delete srv;
  109. }
  110. TEST_F(Dhcpv4SrvTest, processInform) {
  111. NakedDhcpv4Srv* srv = new NakedDhcpv4Srv();
  112. boost::shared_ptr<Pkt4> pkt(new Pkt4(DHCPINFORM, 1234));
  113. // should not throw
  114. EXPECT_NO_THROW(
  115. srv->processInform(pkt);
  116. );
  117. // should return something
  118. EXPECT_TRUE(srv->processInform(pkt));
  119. // TODO: Implement more reasonable tests before starting
  120. // work on processSomething() method.
  121. delete srv;
  122. }
  123. } // end of anonymous namespace