You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

net_test.go 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Copyright (c) 2012-2014 Jeremy Latt
  2. // Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
  3. // released under the MIT license
  4. package utils
  5. import "net"
  6. import "reflect"
  7. import "testing"
  8. func assertEqual(supplied, expected interface{}, t *testing.T) {
  9. if !reflect.DeepEqual(supplied, expected) {
  10. t.Errorf("expected %v but got %v", expected, supplied)
  11. }
  12. }
  13. // hostnames from https://github.com/DanielOaks/irc-parser-tests
  14. var (
  15. goodHostnames = []string{
  16. "irc.example.com",
  17. "i.coolguy.net",
  18. "irc-srv.net.uk",
  19. "iRC.CooLguY.NeT",
  20. "gsf.ds342.co.uk",
  21. "324.net.uk",
  22. "xn--bcher-kva.ch",
  23. }
  24. badHostnames = []string{
  25. "-lol-.net.uk",
  26. "-lol.net.uk",
  27. "_irc._sctp.lol.net.uk",
  28. "irc",
  29. "com",
  30. "",
  31. }
  32. )
  33. func TestIsHostname(t *testing.T) {
  34. for _, name := range goodHostnames {
  35. if !IsHostname(name) {
  36. t.Error(
  37. "Expected to pass, but could not validate hostname",
  38. name,
  39. )
  40. }
  41. }
  42. for _, name := range badHostnames {
  43. if IsHostname(name) {
  44. t.Error(
  45. "Expected to fail, but successfully validated hostname",
  46. name,
  47. )
  48. }
  49. }
  50. }
  51. func TestNormalizeToNet(t *testing.T) {
  52. a := net.ParseIP("8.8.8.8")
  53. b := net.ParseIP("8.8.4.4")
  54. if a == nil || b == nil {
  55. panic("something has gone very wrong")
  56. }
  57. aNetwork := NormalizeIPToNet(a)
  58. bNetwork := NormalizeIPToNet(b)
  59. assertEqual(aNetwork.Contains(a), true, t)
  60. assertEqual(bNetwork.Contains(b), true, t)
  61. assertEqual(aNetwork.Contains(b), false, t)
  62. assertEqual(bNetwork.Contains(a), false, t)
  63. c := net.ParseIP("2001:4860:4860::8888")
  64. d := net.ParseIP("2001:db8::1")
  65. if c == nil || d == nil {
  66. panic("something has gone very wrong")
  67. }
  68. cNetwork := NormalizeIPToNet(c)
  69. dNetwork := NormalizeIPToNet(d)
  70. assertEqual(cNetwork.Contains(c), true, t)
  71. assertEqual(dNetwork.Contains(d), true, t)
  72. assertEqual(dNetwork.Contains(c), false, t)
  73. assertEqual(dNetwork.Contains(a), false, t)
  74. assertEqual(cNetwork.Contains(b), false, t)
  75. assertEqual(aNetwork.Contains(c), false, t)
  76. assertEqual(bNetwork.Contains(c), false, t)
  77. assertEqual(NetToNormalizedString(aNetwork), "8.8.8.8", t)
  78. assertEqual(NetToNormalizedString(bNetwork), "8.8.4.4", t)
  79. assertEqual(NetToNormalizedString(cNetwork), "2001:4860:4860::8888", t)
  80. assertEqual(NetToNormalizedString(dNetwork), "2001:db8::1", t)
  81. }
  82. func TestNormalizedNetToString(t *testing.T) {
  83. _, network, err := net.ParseCIDR("8.8.0.0/16")
  84. if err != nil {
  85. panic(err)
  86. }
  87. assertEqual(NetToNormalizedString(*network), "8.8.0.0/16", t)
  88. normalized := NormalizeNet(*network)
  89. assertEqual(normalized.Contains(net.ParseIP("8.8.4.4")), true, t)
  90. assertEqual(normalized.Contains(net.ParseIP("1.1.1.1")), false, t)
  91. assertEqual(NetToNormalizedString(normalized), "8.8.0.0/16", t)
  92. _, network, err = net.ParseCIDR("8.8.4.4/32")
  93. if err != nil {
  94. panic(err)
  95. }
  96. assertEqual(NetToNormalizedString(*network), "8.8.4.4", t)
  97. normalized = NormalizeNet(*network)
  98. assertEqual(normalized.Contains(net.ParseIP("8.8.4.4")), true, t)
  99. assertEqual(normalized.Contains(net.ParseIP("8.8.8.8")), false, t)
  100. assertEqual(NetToNormalizedString(normalized), "8.8.4.4", t)
  101. }
  102. func TestNormalizedNet(t *testing.T) {
  103. _, network, err := net.ParseCIDR("::ffff:8.8.4.4/128")
  104. assertEqual(err, nil, t)
  105. assertEqual(NetToNormalizedString(*network), "8.8.4.4", t)
  106. normalizedNet := NormalizeIPToNet(net.ParseIP("8.8.4.4"))
  107. assertEqual(NetToNormalizedString(normalizedNet), "8.8.4.4", t)
  108. _, network, err = net.ParseCIDR("::ffff:8.8.0.0/112")
  109. assertEqual(err, nil, t)
  110. assertEqual(NetToNormalizedString(*network), "8.8.0.0/16", t)
  111. _, v4Network, err := net.ParseCIDR("8.8.0.0/16")
  112. assertEqual(err, nil, t)
  113. normalizedNet = NormalizeNet(*v4Network)
  114. assertEqual(NetToNormalizedString(normalizedNet), "8.8.0.0/16", t)
  115. }
  116. func TestNormalizedNetFromString(t *testing.T) {
  117. network, err := NormalizedNetFromString("8.8.4.4/16")
  118. assertEqual(err, nil, t)
  119. assertEqual(NetToNormalizedString(network), "8.8.0.0/16", t)
  120. assertEqual(network.Contains(net.ParseIP("8.8.8.8")), true, t)
  121. network, err = NormalizedNetFromString("2001:0db8::1")
  122. assertEqual(err, nil, t)
  123. assertEqual(NetToNormalizedString(network), "2001:db8::1", t)
  124. assertEqual(network.Contains(net.ParseIP("2001:0db8::1")), true, t)
  125. }