trie_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package trie
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestIpv4AddSuccess(t *testing.T) {
  8. trie := NewIpCidrTrie()
  9. err := trie.AddIpCidrForString("10.0.0.2/16")
  10. assert.Equal(t, nil, err)
  11. }
  12. func TestIpv4AddFail(t *testing.T) {
  13. trie := NewIpCidrTrie()
  14. err := trie.AddIpCidrForString("333.00.23.2/23")
  15. assert.IsType(t, new(net.ParseError), err)
  16. err = trie.AddIpCidrForString("22.3.34.2/222")
  17. assert.IsType(t, new(net.ParseError), err)
  18. err = trie.AddIpCidrForString("2.2.2.2")
  19. assert.IsType(t, new(net.ParseError), err)
  20. }
  21. func TestIpv4Search(t *testing.T) {
  22. trie := NewIpCidrTrie()
  23. // Boundary testing
  24. assert.NoError(t, trie.AddIpCidrForString("149.154.160.0/20"))
  25. assert.Equal(t, true, trie.IsContainForString("149.154.160.0"))
  26. assert.Equal(t, true, trie.IsContainForString("149.154.175.255"))
  27. assert.Equal(t, false, trie.IsContainForString("149.154.176.0"))
  28. assert.Equal(t, false, trie.IsContainForString("149.154.159.255"))
  29. assert.NoError(t, trie.AddIpCidrForString("129.2.36.0/16"))
  30. assert.NoError(t, trie.AddIpCidrForString("10.2.36.0/18"))
  31. assert.NoError(t, trie.AddIpCidrForString("16.2.23.0/24"))
  32. assert.NoError(t, trie.AddIpCidrForString("11.2.13.2/26"))
  33. assert.NoError(t, trie.AddIpCidrForString("55.5.6.3/8"))
  34. assert.NoError(t, trie.AddIpCidrForString("66.23.25.4/6"))
  35. assert.Equal(t, true, trie.IsContainForString("129.2.3.65"))
  36. assert.Equal(t, false, trie.IsContainForString("15.2.3.1"))
  37. assert.Equal(t, true, trie.IsContainForString("11.2.13.1"))
  38. assert.Equal(t, true, trie.IsContainForString("55.0.0.0"))
  39. assert.Equal(t, true, trie.IsContainForString("64.0.0.0"))
  40. assert.Equal(t, false, trie.IsContainForString("128.0.0.0"))
  41. assert.Equal(t, false, trie.IsContain(net.ParseIP("22")))
  42. assert.Equal(t, false, trie.IsContain(net.ParseIP("")))
  43. }
  44. func TestIpv6AddSuccess(t *testing.T) {
  45. trie := NewIpCidrTrie()
  46. err := trie.AddIpCidrForString("2001:0db8:02de:0000:0000:0000:0000:0e13/32")
  47. assert.Equal(t, nil, err)
  48. err = trie.AddIpCidrForString("2001:1db8:f2de::0e13/18")
  49. assert.Equal(t, nil, err)
  50. }
  51. func TestIpv6AddFail(t *testing.T) {
  52. trie := NewIpCidrTrie()
  53. err := trie.AddIpCidrForString("2001::25de::cade/23")
  54. assert.IsType(t, new(net.ParseError), err)
  55. err = trie.AddIpCidrForString("2001:0fa3:25de::cade/222")
  56. assert.IsType(t, new(net.ParseError), err)
  57. err = trie.AddIpCidrForString("2001:0fa3:25de::cade")
  58. assert.IsType(t, new(net.ParseError), err)
  59. }
  60. func TestIpv6SearchSub(t *testing.T) {
  61. trie := NewIpCidrTrie()
  62. assert.NoError(t, trie.AddIpCidrForString("240e::/18"))
  63. assert.Equal(t, true, trie.IsContainForString("240e:964:ea02:100:1800::71"))
  64. }
  65. func TestIpv6Search(t *testing.T) {
  66. trie := NewIpCidrTrie()
  67. // Boundary testing
  68. assert.NoError(t, trie.AddIpCidrForString("2a0a:f280::/32"))
  69. assert.Equal(t, true, trie.IsContainForString("2a0a:f280:0000:0000:0000:0000:0000:0000"))
  70. assert.Equal(t, true, trie.IsContainForString("2a0a:f280:ffff:ffff:ffff:ffff:ffff:ffff"))
  71. assert.Equal(t, false, trie.IsContainForString("2a0a:f279:ffff:ffff:ffff:ffff:ffff:ffff"))
  72. assert.Equal(t, false, trie.IsContainForString("2a0a:f281:0000:0000:0000:0000:0000:0000"))
  73. assert.NoError(t, trie.AddIpCidrForString("2001:b28:f23d:f001::e/128"))
  74. assert.NoError(t, trie.AddIpCidrForString("2001:67c:4e8:f002::e/12"))
  75. assert.NoError(t, trie.AddIpCidrForString("2001:b28:f23d:f003::e/96"))
  76. assert.NoError(t, trie.AddIpCidrForString("2001:67c:4e8:f002::a/32"))
  77. assert.NoError(t, trie.AddIpCidrForString("2001:67c:4e8:f004::a/60"))
  78. assert.NoError(t, trie.AddIpCidrForString("2001:b28:f23f:f005::a/64"))
  79. assert.Equal(t, true, trie.IsContainForString("2001:b28:f23d:f001::e"))
  80. assert.Equal(t, false, trie.IsContainForString("2222::fff2"))
  81. assert.Equal(t, true, trie.IsContainForString("2000::ffa0"))
  82. assert.Equal(t, true, trie.IsContainForString("2001:b28:f23f:f005:5662::"))
  83. assert.Equal(t, true, trie.IsContainForString("2001:67c:4e8:9666::1213"))
  84. assert.Equal(t, false, trie.IsContain(net.ParseIP("22233:22")))
  85. }
  86. func TestIpv4InIpv6(t *testing.T) {
  87. trie := NewIpCidrTrie()
  88. // Boundary testing
  89. assert.NoError(t, trie.AddIpCidrForString("::ffff:198.18.5.138/128"))
  90. }