router_test.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package conf_test
  2. import (
  3. "net"
  4. "testing"
  5. v2net "v2ray.com/core/common/net"
  6. "v2ray.com/core/testing/assert"
  7. . "v2ray.com/core/tools/conf"
  8. )
  9. func makeDestination(ip string) v2net.Destination {
  10. return v2net.TCPDestination(v2net.IPAddress(net.ParseIP(ip)), 80)
  11. }
  12. func makeDomainDestination(domain string) v2net.Destination {
  13. return v2net.TCPDestination(v2net.DomainAddress(domain), 80)
  14. }
  15. func TestChinaIPJson(t *testing.T) {
  16. assert := assert.On(t)
  17. rule := ParseRule([]byte(`{
  18. "type": "chinaip",
  19. "outboundTag": "x"
  20. }`))
  21. assert.String(rule.Tag).Equals("x")
  22. cond, err := rule.BuildCondition()
  23. assert.Error(err).IsNil()
  24. assert.Bool(cond.Apply(makeDestination("121.14.1.189"))).IsTrue() // sina.com.cn
  25. assert.Bool(cond.Apply(makeDestination("101.226.103.106"))).IsTrue() // qq.com
  26. assert.Bool(cond.Apply(makeDestination("115.239.210.36"))).IsTrue() // image.baidu.com
  27. assert.Bool(cond.Apply(makeDestination("120.135.126.1"))).IsTrue()
  28. assert.Bool(cond.Apply(makeDestination("8.8.8.8"))).IsFalse()
  29. }
  30. func TestChinaSitesJson(t *testing.T) {
  31. assert := assert.On(t)
  32. rule := ParseRule([]byte(`{
  33. "type": "chinasites",
  34. "outboundTag": "y"
  35. }`))
  36. assert.String(rule.Tag).Equals("y")
  37. cond, err := rule.BuildCondition()
  38. assert.Error(err).IsNil()
  39. assert.Bool(cond.Apply(makeDomainDestination("v.qq.com"))).IsTrue()
  40. assert.Bool(cond.Apply(makeDomainDestination("www.163.com"))).IsTrue()
  41. assert.Bool(cond.Apply(makeDomainDestination("ngacn.cc"))).IsTrue()
  42. assert.Bool(cond.Apply(makeDomainDestination("12306.cn"))).IsTrue()
  43. assert.Bool(cond.Apply(makeDomainDestination("v2ray.com"))).IsFalse()
  44. }
  45. func TestDomainRule(t *testing.T) {
  46. assert := assert.On(t)
  47. rule := ParseRule([]byte(`{
  48. "type": "field",
  49. "domain": [
  50. "ooxx.com",
  51. "oxox.com",
  52. "regexp:\\.cn$"
  53. ],
  54. "network": "tcp",
  55. "outboundTag": "direct"
  56. }`))
  57. assert.Pointer(rule).IsNotNil()
  58. cond, err := rule.BuildCondition()
  59. assert.Error(err).IsNil()
  60. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.DomainAddress("www.ooxx.com"), 80))).IsTrue()
  61. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.DomainAddress("www.aabb.com"), 80))).IsFalse()
  62. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), 80))).IsFalse()
  63. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.DomainAddress("www.12306.cn"), 80))).IsTrue()
  64. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.DomainAddress("www.acn.com"), 80))).IsFalse()
  65. }
  66. func TestIPRule(t *testing.T) {
  67. assert := assert.On(t)
  68. rule := ParseRule([]byte(`{
  69. "type": "field",
  70. "ip": [
  71. "10.0.0.0/8",
  72. "192.0.0.0/24"
  73. ],
  74. "network": "tcp",
  75. "outboundTag": "direct"
  76. }`))
  77. assert.Pointer(rule).IsNotNil()
  78. cond, err := rule.BuildCondition()
  79. assert.Error(err).IsNil()
  80. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.DomainAddress("www.ooxx.com"), 80))).IsFalse()
  81. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}), 80))).IsTrue()
  82. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), 80))).IsFalse()
  83. assert.Bool(cond.Apply(v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80))).IsTrue()
  84. }