io_endpoint_unittest.cc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 <gtest/gtest.h>
  16. #include <asiolink/io_endpoint.h>
  17. #include <asiolink/io_error.h>
  18. using namespace isc::asiolink;
  19. TEST(IOEndpointTest, createUDPv4) {
  20. const IOEndpoint* ep;
  21. ep = IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.1"), 53210);
  22. EXPECT_EQ("192.0.2.1", ep->getAddress().toText());
  23. EXPECT_EQ(53210, ep->getPort());
  24. EXPECT_EQ(AF_INET, ep->getFamily());
  25. EXPECT_EQ(AF_INET, ep->getAddress().getFamily());
  26. EXPECT_EQ(IPPROTO_UDP, ep->getProtocol());
  27. }
  28. TEST(IOEndpointTest, createTCPv4) {
  29. const IOEndpoint* ep;
  30. ep = IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.1"), 5301);
  31. EXPECT_EQ("192.0.2.1", ep->getAddress().toText());
  32. EXPECT_EQ(5301, ep->getPort());
  33. EXPECT_EQ(AF_INET, ep->getFamily());
  34. EXPECT_EQ(AF_INET, ep->getAddress().getFamily());
  35. EXPECT_EQ(IPPROTO_TCP, ep->getProtocol());
  36. }
  37. TEST(IOEndpointTest, createUDPv6) {
  38. const IOEndpoint* ep;
  39. ep = IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1234"), 5302);
  40. EXPECT_EQ("2001:db8::1234", ep->getAddress().toText());
  41. EXPECT_EQ(5302, ep->getPort());
  42. EXPECT_EQ(AF_INET6, ep->getFamily());
  43. EXPECT_EQ(AF_INET6, ep->getAddress().getFamily());
  44. EXPECT_EQ(IPPROTO_UDP, ep->getProtocol());
  45. }
  46. TEST(IOEndpointTest, createTCPv6) {
  47. const IOEndpoint* ep;
  48. ep = IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1234"), 5303);
  49. EXPECT_EQ("2001:db8::1234", ep->getAddress().toText());
  50. EXPECT_EQ(5303, ep->getPort());
  51. EXPECT_EQ(AF_INET6, ep->getFamily());
  52. EXPECT_EQ(AF_INET6, ep->getAddress().getFamily());
  53. EXPECT_EQ(IPPROTO_TCP, ep->getProtocol());
  54. }
  55. TEST(IOEndpointTest, equality) {
  56. std::vector<const IOEndpoint *> epv;
  57. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1234"), 5303));
  58. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1234"), 5303));
  59. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1234"), 5304));
  60. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1234"), 5304));
  61. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1235"), 5303));
  62. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1235"), 5303));
  63. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1235"), 5304));
  64. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1235"), 5304));
  65. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.1"), 5303));
  66. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.1"), 5303));
  67. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.1"), 5304));
  68. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.1"), 5304));
  69. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.2"), 5303));
  70. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.2"), 5303));
  71. epv.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.2"), 5304));
  72. epv.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.2"), 5304));
  73. for (size_t i = 0; i < epv.size(); ++i) {
  74. for (size_t j = 0; j < epv.size(); ++j) {
  75. if (i != j) {
  76. // We use EXPECT_TRUE/FALSE instead of _EQ here, since
  77. // _EQ requires there is an operator<< as well
  78. EXPECT_FALSE(*epv[i] == *epv[j]);
  79. EXPECT_TRUE(*epv[i] != *epv[j]);
  80. }
  81. }
  82. }
  83. // Create a second array with exactly the same values. We use create()
  84. // again to make sure we get different endpoints
  85. std::vector<const IOEndpoint *> epv2;
  86. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1234"), 5303));
  87. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1234"), 5303));
  88. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1234"), 5304));
  89. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1234"), 5304));
  90. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1235"), 5303));
  91. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1235"), 5303));
  92. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("2001:db8::1235"), 5304));
  93. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("2001:db8::1235"), 5304));
  94. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.1"), 5303));
  95. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.1"), 5303));
  96. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.1"), 5304));
  97. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.1"), 5304));
  98. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.2"), 5303));
  99. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.2"), 5303));
  100. epv2.push_back(IOEndpoint::create(IPPROTO_TCP, IOAddress("192.0.2.2"), 5304));
  101. epv2.push_back(IOEndpoint::create(IPPROTO_UDP, IOAddress("192.0.2.2"), 5304));
  102. for (size_t i = 0; i < epv.size(); ++i) {
  103. EXPECT_TRUE(*epv[i] == *epv2[i]);
  104. EXPECT_FALSE(*epv[i] != *epv2[i]);
  105. }
  106. }
  107. TEST(IOEndpointTest, createIPProto) {
  108. EXPECT_THROW(IOEndpoint::create(IPPROTO_IP, IOAddress("192.0.2.1"),
  109. 53210)->getAddress().toText(),
  110. IOError);
  111. }