address_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package net_test
  2. import (
  3. "net"
  4. "testing"
  5. . "v2ray.com/core/common/net"
  6. . "v2ray.com/core/common/net/testing"
  7. . "v2ray.com/ext/assert"
  8. )
  9. func TestIPv4Address(t *testing.T) {
  10. assert := With(t)
  11. ip := []byte{byte(1), byte(2), byte(3), byte(4)}
  12. addr := IPAddress(ip)
  13. assert(addr, IsIPv4)
  14. assert(addr, Not(IsIPv6))
  15. assert(addr, Not(IsDomain))
  16. assert([]byte(addr.IP()), Equals, ip)
  17. assert(addr.String(), Equals, "1.2.3.4")
  18. }
  19. func TestIPv6Address(t *testing.T) {
  20. assert := With(t)
  21. ip := []byte{
  22. byte(1), byte(2), byte(3), byte(4),
  23. byte(1), byte(2), byte(3), byte(4),
  24. byte(1), byte(2), byte(3), byte(4),
  25. byte(1), byte(2), byte(3), byte(4),
  26. }
  27. addr := IPAddress(ip)
  28. assert(addr, IsIPv6)
  29. assert(addr, Not(IsIPv4))
  30. assert(addr, Not(IsDomain))
  31. assert(addr.IP(), Equals, net.IP(ip))
  32. assert(addr.String(), Equals, "[102:304:102:304:102:304:102:304]")
  33. }
  34. func TestIPv4Asv6(t *testing.T) {
  35. assert := With(t)
  36. ip := []byte{
  37. byte(0), byte(0), byte(0), byte(0),
  38. byte(0), byte(0), byte(0), byte(0),
  39. byte(0), byte(0), byte(255), byte(255),
  40. byte(1), byte(2), byte(3), byte(4),
  41. }
  42. addr := IPAddress(ip)
  43. assert(addr.String(), Equals, "1.2.3.4")
  44. }
  45. func TestDomainAddress(t *testing.T) {
  46. assert := With(t)
  47. domain := "v2ray.com"
  48. addr := DomainAddress(domain)
  49. assert(addr, IsDomain)
  50. assert(addr, Not(IsIPv6))
  51. assert(addr, Not(IsIPv4))
  52. assert(addr.Domain(), Equals, domain)
  53. assert(addr.String(), Equals, "v2ray.com")
  54. }
  55. func TestNetIPv4Address(t *testing.T) {
  56. assert := With(t)
  57. ip := net.IPv4(1, 2, 3, 4)
  58. addr := IPAddress(ip)
  59. assert(addr, IsIPv4)
  60. assert(addr.String(), Equals, "1.2.3.4")
  61. }
  62. func TestParseIPv6Address(t *testing.T) {
  63. assert := With(t)
  64. ip := ParseAddress("[2001:4860:0:2001::68]")
  65. assert(ip, IsIPv6)
  66. assert(ip.String(), Equals, "[2001:4860:0:2001::68]")
  67. ip = ParseAddress("[::ffff:123.151.71.143]")
  68. assert(ip, IsIPv4)
  69. assert(ip.String(), Equals, "123.151.71.143")
  70. }
  71. func TestInvalidAddressConvertion(t *testing.T) {
  72. assert := With(t)
  73. assert(func() { ParseAddress("8.8.8.8").Domain() }, Panics)
  74. assert(func() { ParseAddress("2001:4860:0:2001::68").Domain() }, Panics)
  75. assert(func() { ParseAddress("v2ray.com").IP() }, Panics)
  76. }
  77. func TestIPOrDomain(t *testing.T) {
  78. assert := With(t)
  79. assert(NewIPOrDomain(ParseAddress("v2ray.com")).AsAddress(), Equals, ParseAddress("v2ray.com"))
  80. assert(NewIPOrDomain(ParseAddress("8.8.8.8")).AsAddress(), Equals, ParseAddress("8.8.8.8"))
  81. assert(NewIPOrDomain(ParseAddress("2001:4860:0:2001::68")).AsAddress(), Equals, ParseAddress("2001:4860:0:2001::68"))
  82. }