1require 'test/unit' 2require 'socket' 3 4class 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 11 def test_ip_pktinfo 12 addr = Addrinfo.ip("127.0.0.1") 13 ifindex = 0 14 spec_dst = Addrinfo.ip("127.0.0.2") 15 begin 16 ancdata = Socket::AncillaryData.ip_pktinfo(addr, ifindex, spec_dst) 17 rescue NotImplementedError 18 return 19 end 20 assert_equal(Socket::AF_INET, ancdata.family) 21 assert_equal(Socket::IPPROTO_IP, ancdata.level) 22 assert_equal(Socket::IP_PKTINFO, ancdata.type) 23 assert_equal(addr.ip_address, ancdata.ip_pktinfo[0].ip_address) 24 assert_equal(ifindex, ancdata.ip_pktinfo[1]) 25 assert_equal(spec_dst.ip_address, ancdata.ip_pktinfo[2].ip_address) 26 assert(ancdata.cmsg_is?(:IP, :PKTINFO)) 27 assert(ancdata.cmsg_is?("IP", "PKTINFO")) 28 assert(ancdata.cmsg_is?(Socket::IPPROTO_IP, Socket::IP_PKTINFO)) 29 if defined? Socket::IPV6_PKTINFO 30 assert(!ancdata.cmsg_is?(:IPV6, :PKTINFO)) 31 end 32 ancdata2 = Socket::AncillaryData.ip_pktinfo(addr, ifindex) 33 assert_equal(addr.ip_address, ancdata2.ip_pktinfo[2].ip_address) 34 end 35 36 def test_ipv6_pktinfo 37 addr = Addrinfo.ip("::1") 38 ifindex = 0 39 begin 40 ancdata = Socket::AncillaryData.ipv6_pktinfo(addr, ifindex) 41 rescue NotImplementedError 42 return 43 end 44 assert_equal(Socket::AF_INET6, ancdata.family) 45 assert_equal(Socket::IPPROTO_IPV6, ancdata.level) 46 assert_equal(Socket::IPV6_PKTINFO, ancdata.type) 47 assert_equal(addr.ip_address, ancdata.ipv6_pktinfo[0].ip_address) 48 assert_equal(ifindex, ancdata.ipv6_pktinfo[1]) 49 assert_equal(addr.ip_address, ancdata.ipv6_pktinfo_addr.ip_address) 50 assert_equal(ifindex, ancdata.ipv6_pktinfo_ifindex) 51 assert(ancdata.cmsg_is?(:IPV6, :PKTINFO)) 52 assert(ancdata.cmsg_is?("IPV6", "PKTINFO")) 53 assert(ancdata.cmsg_is?(Socket::IPPROTO_IPV6, Socket::IPV6_PKTINFO)) 54 if defined? Socket::IP_PKTINFO 55 assert(!ancdata.cmsg_is?(:IP, :PKTINFO)) 56 end 57 end 58 59 if defined?(Socket::SCM_RIGHTS) && defined?(Socket::SCM_TIMESTAMP) 60 def test_unix_rights 61 assert_raise(TypeError) { 62 Socket::AncillaryData.int(:UNIX, :SOL_SOCKET, :TIMESTAMP, 1).unix_rights 63 } 64 end 65 end 66end if defined? Socket::AncillaryData 67