PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/test/socket/test_ancdata.rb

http://github.com/ruby/ruby
Ruby | 68 lines | 62 code | 5 blank | 1 comment | 5 complexity | 0477e939e09a19f78c109a1e739c82a9 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, AGPL-3.0
  1. # frozen_string_literal: true
  2. require 'test/unit'
  3. require 'socket'
  4. class TestSocketAncData < Test::Unit::TestCase
  5. def test_int
  6. ancdata = Socket::AncillaryData.int(0, 0, 0, 123)
  7. assert_equal(123, ancdata.int)
  8. assert_equal([123].pack("i"), ancdata.data)
  9. end
  10. def test_ip_pktinfo
  11. addr = Addrinfo.ip("127.0.0.1")
  12. ifindex = 0
  13. spec_dst = Addrinfo.ip("127.0.0.2")
  14. begin
  15. ancdata = Socket::AncillaryData.ip_pktinfo(addr, ifindex, spec_dst)
  16. rescue NotImplementedError
  17. return
  18. end
  19. assert_equal(Socket::AF_INET, ancdata.family)
  20. assert_equal(Socket::IPPROTO_IP, ancdata.level)
  21. assert_equal(Socket::IP_PKTINFO, ancdata.type)
  22. assert_equal(addr.ip_address, ancdata.ip_pktinfo[0].ip_address)
  23. assert_equal(ifindex, ancdata.ip_pktinfo[1])
  24. assert_equal(spec_dst.ip_address, ancdata.ip_pktinfo[2].ip_address)
  25. assert(ancdata.cmsg_is?(:IP, :PKTINFO))
  26. assert(ancdata.cmsg_is?("IP", "PKTINFO"))
  27. assert(ancdata.cmsg_is?(Socket::IPPROTO_IP, Socket::IP_PKTINFO))
  28. if defined? Socket::IPV6_PKTINFO
  29. assert(!ancdata.cmsg_is?(:IPV6, :PKTINFO))
  30. end
  31. ancdata2 = Socket::AncillaryData.ip_pktinfo(addr, ifindex)
  32. assert_equal(addr.ip_address, ancdata2.ip_pktinfo[2].ip_address)
  33. end
  34. def test_ipv6_pktinfo
  35. addr = Addrinfo.ip("::1")
  36. ifindex = 0
  37. begin
  38. ancdata = Socket::AncillaryData.ipv6_pktinfo(addr, ifindex)
  39. rescue NotImplementedError
  40. return
  41. end
  42. assert_equal(Socket::AF_INET6, ancdata.family)
  43. assert_equal(Socket::IPPROTO_IPV6, ancdata.level)
  44. assert_equal(Socket::IPV6_PKTINFO, ancdata.type)
  45. assert_equal(addr.ip_address, ancdata.ipv6_pktinfo[0].ip_address)
  46. assert_equal(ifindex, ancdata.ipv6_pktinfo[1])
  47. assert_equal(addr.ip_address, ancdata.ipv6_pktinfo_addr.ip_address)
  48. assert_equal(ifindex, ancdata.ipv6_pktinfo_ifindex)
  49. assert(ancdata.cmsg_is?(:IPV6, :PKTINFO))
  50. assert(ancdata.cmsg_is?("IPV6", "PKTINFO"))
  51. assert(ancdata.cmsg_is?(Socket::IPPROTO_IPV6, Socket::IPV6_PKTINFO))
  52. if defined? Socket::IP_PKTINFO
  53. assert(!ancdata.cmsg_is?(:IP, :PKTINFO))
  54. end
  55. end
  56. if defined?(Socket::SCM_RIGHTS) && defined?(Socket::SCM_TIMESTAMP)
  57. def test_unix_rights
  58. assert_raise(TypeError) {
  59. Socket::AncillaryData.int(:UNIX, :SOL_SOCKET, :TIMESTAMP, 1).unix_rights
  60. }
  61. end
  62. end
  63. end if defined? Socket::AncillaryData