| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | package jsonimport (	"encoding/json"	"testing"	v2net "github.com/v2ray/v2ray-core/common/net"	v2nettesting "github.com/v2ray/v2ray-core/common/net/testing"	v2testing "github.com/v2ray/v2ray-core/testing"	"github.com/v2ray/v2ray-core/testing/assert")func TestStringListParsingList(t *testing.T) {	v2testing.Current(t)	rawJson := `["a", "b", "c", "d"]`	var strList StringList	err := json.Unmarshal([]byte(rawJson), &strList)	assert.Error(err).IsNil()	assert.Int(strList.Len()).Equals(4)}func TestStringListParsingString(t *testing.T) {	v2testing.Current(t)	rawJson := `"abcd"`	var strList StringList	err := json.Unmarshal([]byte(rawJson), &strList)	assert.Error(err).IsNil()	assert.Int(strList.Len()).Equals(1)}func TestDomainMatching(t *testing.T) {	v2testing.Current(t)	rule := &FieldRule{		Domain: NewStringList("v2ray.com"),	}	dest := v2net.NewTCPDestination(v2net.DomainAddress("www.v2ray.com", 80))	assert.Bool(rule.Apply(dest)).IsTrue()}func TestPortMatching(t *testing.T) {	v2testing.Current(t)	rule := &FieldRule{		Port: &v2nettesting.PortRange{			FromValue: 0,			ToValue:   100,		},	}	dest := v2net.NewTCPDestination(v2net.DomainAddress("www.v2ray.com", 80))	assert.Bool(rule.Apply(dest)).IsTrue()}func TestIPMatching(t *testing.T) {	v2testing.Current(t)	rawJson := `{    "type": "field",    "ip": "10.0.0.0/8",    "tag": "test"  }`	rule := parseRule([]byte(rawJson))	dest := v2net.NewTCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}, 80))	assert.Bool(rule.Apply(dest)).IsTrue()}func TestIPListMatching(t *testing.T) {	v2testing.Current(t)	rawJson := `{    "type": "field",    "ip": ["10.0.0.0/8", "192.168.0.0/16"],    "tag": "test"  }`	rule := parseRule([]byte(rawJson))	dest := v2net.NewTCPDestination(v2net.IPAddress([]byte{192, 168, 1, 1}, 80))	assert.Bool(rule.Apply(dest)).IsTrue()}func TestPortNotMatching(t *testing.T) {	v2testing.Current(t)	rawJson := `{    "type": "field",    "port": "80-100",    "tag": "test"  }`	rule := parseRule([]byte(rawJson))	dest := v2net.NewTCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}, 79))	assert.Bool(rule.Apply(dest)).IsFalse()}func TestDomainNotMatching(t *testing.T) {	v2testing.Current(t)	rawJson := `{    "type": "field",    "domain": ["google.com", "v2ray.com"],    "tag": "test"  }`	rule := parseRule([]byte(rawJson))	dest := v2net.NewTCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}, 80))	assert.Bool(rule.Apply(dest)).IsFalse()}func TestDomainNotMatchingDomain(t *testing.T) {	v2testing.Current(t)	rawJson := `{    "type": "field",    "domain": ["google.com", "v2ray.com"],    "tag": "test"  }`	rule := parseRule([]byte(rawJson))	dest := v2net.NewTCPDestination(v2net.DomainAddress("baidu.com", 80))	assert.Bool(rule.Apply(dest)).IsFalse()}
 |