fakedns_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package fakedns
  2. import (
  3. "testing"
  4. gonet "net"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/v2fly/v2ray-core/v4/common"
  7. "github.com/v2fly/v2ray-core/v4/common/net"
  8. "github.com/v2fly/v2ray-core/v4/common/uuid"
  9. )
  10. func TestNewFakeDnsHolder(_ *testing.T) {
  11. _, err := NewFakeDNSHolder()
  12. common.Must(err)
  13. }
  14. func TestFakeDnsHolderCreateMapping(t *testing.T) {
  15. fkdns, err := NewFakeDNSHolder()
  16. common.Must(err)
  17. addr := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  18. assert.Equal(t, "198.18.0.0", addr[0].IP().String())
  19. }
  20. func TestFakeDnsHolderCreateMappingMany(t *testing.T) {
  21. fkdns, err := NewFakeDNSHolder()
  22. common.Must(err)
  23. addr := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  24. assert.Equal(t, "198.18.0.0", addr[0].IP().String())
  25. addr2 := fkdns.GetFakeIPForDomain("fakednstest2.v2fly.org")
  26. assert.Equal(t, "198.18.0.1", addr2[0].IP().String())
  27. }
  28. func TestFakeDnsHolderCreateMappingManyAndResolve(t *testing.T) {
  29. fkdns, err := NewFakeDNSHolder()
  30. common.Must(err)
  31. {
  32. addr := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  33. assert.Equal(t, "198.18.0.0", addr[0].IP().String())
  34. }
  35. {
  36. addr2 := fkdns.GetFakeIPForDomain("fakednstest2.v2fly.org")
  37. assert.Equal(t, "198.18.0.1", addr2[0].IP().String())
  38. }
  39. {
  40. result := fkdns.GetDomainFromFakeDNS(net.ParseAddress("198.18.0.0"))
  41. assert.Equal(t, "fakednstest.v2fly.org", result)
  42. }
  43. {
  44. result := fkdns.GetDomainFromFakeDNS(net.ParseAddress("198.18.0.1"))
  45. assert.Equal(t, "fakednstest2.v2fly.org", result)
  46. }
  47. }
  48. func TestFakeDnsHolderCreateMappingManySingleDomain(t *testing.T) {
  49. fkdns, err := NewFakeDNSHolder()
  50. common.Must(err)
  51. addr := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  52. assert.Equal(t, "198.18.0.0", addr[0].IP().String())
  53. addr2 := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  54. assert.Equal(t, "198.18.0.0", addr2[0].IP().String())
  55. }
  56. func TestFakeDnsHolderCreateMappingAndRollOver(t *testing.T) {
  57. fkdns, err := NewFakeDNSHolderConfigOnly(&FakeDnsPool{
  58. IpPool: "240.0.0.0/12",
  59. LruSize: 256,
  60. })
  61. common.Must(err)
  62. err = fkdns.Start()
  63. common.Must(err)
  64. {
  65. addr := fkdns.GetFakeIPForDomain("fakednstest.v2fly.org")
  66. assert.Equal(t, "240.0.0.0", addr[0].IP().String())
  67. }
  68. {
  69. addr2 := fkdns.GetFakeIPForDomain("fakednstest2.v2fly.org")
  70. assert.Equal(t, "240.0.0.1", addr2[0].IP().String())
  71. }
  72. for i := 0; i <= 8192; i++ {
  73. {
  74. result := fkdns.GetDomainFromFakeDNS(net.ParseAddress("240.0.0.0"))
  75. assert.Equal(t, "fakednstest.v2fly.org", result)
  76. }
  77. {
  78. result := fkdns.GetDomainFromFakeDNS(net.ParseAddress("240.0.0.1"))
  79. assert.Equal(t, "fakednstest2.v2fly.org", result)
  80. }
  81. {
  82. uuid := uuid.New()
  83. domain := uuid.String() + ".fakednstest.v2fly.org"
  84. addr := fkdns.GetFakeIPForDomain(domain)
  85. rsaddr := addr[0].IP().String()
  86. result := fkdns.GetDomainFromFakeDNS(net.ParseAddress(rsaddr))
  87. assert.Equal(t, domain, result)
  88. }
  89. }
  90. }
  91. func TestFakeDNSMulti(t *testing.T) {
  92. fakeMulti, err := NewFakeDNSHolderMulti(&FakeDnsPoolMulti{
  93. Pools: []*FakeDnsPool{&FakeDnsPool{
  94. IpPool: "240.0.0.0/12",
  95. LruSize: 256,
  96. }, &FakeDnsPool{
  97. IpPool: "fddd:c5b4:ff5f:f4f0::/64",
  98. LruSize: 256,
  99. }},
  100. },
  101. )
  102. err = fakeMulti.Start()
  103. common.Must(err)
  104. assert.Nil(t, err, "Should not throw error")
  105. _ = fakeMulti
  106. t.Run("checkInRange", func(t *testing.T) {
  107. t.Run("ipv4", func(t *testing.T) {
  108. inPool := fakeMulti.IsIPInIPPool(net.IPAddress([]byte{240, 0, 0, 5}))
  109. assert.True(t, inPool)
  110. })
  111. t.Run("ipv6", func(t *testing.T) {
  112. ip, err := gonet.ResolveIPAddr("ip", "fddd:c5b4:ff5f:f4f0::5")
  113. assert.Nil(t, err)
  114. inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP))
  115. assert.True(t, inPool)
  116. })
  117. t.Run("ipv4_inverse", func(t *testing.T) {
  118. inPool := fakeMulti.IsIPInIPPool(net.IPAddress([]byte{241, 0, 0, 5}))
  119. assert.False(t, inPool)
  120. })
  121. t.Run("ipv6_inverse", func(t *testing.T) {
  122. ip, err := gonet.ResolveIPAddr("ip", "fcdd:c5b4:ff5f:f4f0::5")
  123. assert.Nil(t, err)
  124. inPool := fakeMulti.IsIPInIPPool(net.IPAddress(ip.IP))
  125. assert.False(t, inPool)
  126. })
  127. })
  128. t.Run("allocateTwoAddressForTwoPool", func(t *testing.T) {
  129. address := fakeMulti.GetFakeIPForDomain("fakednstest.v2fly.org")
  130. assert.Len(t, address, 2, "should be 2 address one for each pool")
  131. t.Run("eachOfThemShouldResolve:0", func(t *testing.T) {
  132. domain := fakeMulti.GetDomainFromFakeDNS(address[0])
  133. assert.Equal(t, "fakednstest.v2fly.org", domain)
  134. })
  135. t.Run("eachOfThemShouldResolve:1", func(t *testing.T) {
  136. domain := fakeMulti.GetDomainFromFakeDNS(address[1])
  137. assert.Equal(t, "fakednstest.v2fly.org", domain)
  138. })
  139. })
  140. t.Run("understandIPTypeSelector", func(t *testing.T) {
  141. t.Run("ipv4", func(t *testing.T) {
  142. address := fakeMulti.GetFakeIPForDomain3("fakednstestipv4.v2fly.org", true, false)
  143. assert.Len(t, address, 1, "should be 1 address")
  144. assert.True(t, address[0].Family().IsIPv4())
  145. })
  146. t.Run("ipv6", func(t *testing.T) {
  147. address := fakeMulti.GetFakeIPForDomain3("fakednstestipv6.v2fly.org", false, true)
  148. assert.Len(t, address, 1, "should be 1 address")
  149. assert.True(t, address[0].Family().IsIPv6())
  150. })
  151. t.Run("ipv46", func(t *testing.T) {
  152. address := fakeMulti.GetFakeIPForDomain3("fakednstestipv46.v2fly.org", true, true)
  153. assert.Len(t, address, 2, "should be 2 address")
  154. assert.True(t, address[0].Family().IsIPv4())
  155. assert.True(t, address[1].Family().IsIPv6())
  156. })
  157. })
  158. }