| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- package conf_test
- import (
- "encoding/json"
- "os"
- "testing"
- "github.com/google/go-cmp/cmp"
- "github.com/google/go-cmp/cmp/cmpopts"
- "github.com/xtls/xray-core/common"
- "github.com/xtls/xray-core/common/net"
- "github.com/xtls/xray-core/common/protocol"
- . "github.com/xtls/xray-core/infra/conf"
- )
- func TestStringListUnmarshalError(t *testing.T) {
- rawJSON := `1234`
- list := new(StringList)
- err := json.Unmarshal([]byte(rawJSON), list)
- if err == nil {
- t.Error("expected error, but got nil")
- }
- }
- func TestStringListLen(t *testing.T) {
- rawJSON := `"a, b, c, d"`
- var list StringList
- err := json.Unmarshal([]byte(rawJSON), &list)
- common.Must(err)
- if r := cmp.Diff([]string(list), []string{"a", " b", " c", " d"}); r != "" {
- t.Error(r)
- }
- }
- func TestIPParsing(t *testing.T) {
- rawJSON := "\"8.8.8.8\""
- var address Address
- err := json.Unmarshal([]byte(rawJSON), &address)
- common.Must(err)
- if r := cmp.Diff(address.IP(), net.IP{8, 8, 8, 8}); r != "" {
- t.Error(r)
- }
- }
- func TestDomainParsing(t *testing.T) {
- rawJSON := "\"example.com\""
- var address Address
- common.Must(json.Unmarshal([]byte(rawJSON), &address))
- if address.Domain() != "example.com" {
- t.Error("domain: ", address.Domain())
- }
- }
- func TestURLParsing(t *testing.T) {
- {
- rawJSON := "\"https://dns.google/dns-query\""
- var address Address
- common.Must(json.Unmarshal([]byte(rawJSON), &address))
- if address.Domain() != "https://dns.google/dns-query" {
- t.Error("URL: ", address.Domain())
- }
- }
- {
- rawJSON := "\"https+local://dns.google/dns-query\""
- var address Address
- common.Must(json.Unmarshal([]byte(rawJSON), &address))
- if address.Domain() != "https+local://dns.google/dns-query" {
- t.Error("URL: ", address.Domain())
- }
- }
- }
- func TestInvalidAddressJson(t *testing.T) {
- rawJSON := "1234"
- var address Address
- err := json.Unmarshal([]byte(rawJSON), &address)
- if err == nil {
- t.Error("nil error")
- }
- }
- func TestStringNetwork(t *testing.T) {
- var network Network
- common.Must(json.Unmarshal([]byte(`"tcp"`), &network))
- if v := network.Build(); v != net.Network_TCP {
- t.Error("network: ", v)
- }
- }
- func TestArrayNetworkList(t *testing.T) {
- var list NetworkList
- common.Must(json.Unmarshal([]byte("[\"Tcp\"]"), &list))
- nlist := list.Build()
- if !net.HasNetwork(nlist, net.Network_TCP) {
- t.Error("no tcp network")
- }
- if net.HasNetwork(nlist, net.Network_UDP) {
- t.Error("has udp network")
- }
- }
- func TestStringNetworkList(t *testing.T) {
- var list NetworkList
- common.Must(json.Unmarshal([]byte("\"TCP, ip\""), &list))
- nlist := list.Build()
- if !net.HasNetwork(nlist, net.Network_TCP) {
- t.Error("no tcp network")
- }
- if net.HasNetwork(nlist, net.Network_UDP) {
- t.Error("has udp network")
- }
- }
- func TestInvalidNetworkJson(t *testing.T) {
- var list NetworkList
- err := json.Unmarshal([]byte("0"), &list)
- if err == nil {
- t.Error("nil error")
- }
- }
- func TestIntPort(t *testing.T) {
- var portRange PortRange
- common.Must(json.Unmarshal([]byte("1234"), &portRange))
- if r := cmp.Diff(portRange, PortRange{
- From: 1234, To: 1234,
- }); r != "" {
- t.Error(r)
- }
- }
- func TestOverRangeIntPort(t *testing.T) {
- var portRange PortRange
- err := json.Unmarshal([]byte("70000"), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- err = json.Unmarshal([]byte("-1"), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- }
- func TestEnvPort(t *testing.T) {
- common.Must(os.Setenv("PORT", "1234"))
- var portRange PortRange
- common.Must(json.Unmarshal([]byte("\"env:PORT\""), &portRange))
- if r := cmp.Diff(portRange, PortRange{
- From: 1234, To: 1234,
- }); r != "" {
- t.Error(r)
- }
- }
- func TestSingleStringPort(t *testing.T) {
- var portRange PortRange
- common.Must(json.Unmarshal([]byte("\"1234\""), &portRange))
- if r := cmp.Diff(portRange, PortRange{
- From: 1234, To: 1234,
- }); r != "" {
- t.Error(r)
- }
- }
- func TestStringPairPort(t *testing.T) {
- var portRange PortRange
- common.Must(json.Unmarshal([]byte("\"1234-5678\""), &portRange))
- if r := cmp.Diff(portRange, PortRange{
- From: 1234, To: 5678,
- }); r != "" {
- t.Error(r)
- }
- }
- func TestOverRangeStringPort(t *testing.T) {
- var portRange PortRange
- err := json.Unmarshal([]byte("\"65536\""), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- err = json.Unmarshal([]byte("\"70000-80000\""), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- err = json.Unmarshal([]byte("\"1-90000\""), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- err = json.Unmarshal([]byte("\"700-600\""), &portRange)
- if err == nil {
- t.Error("nil error")
- }
- }
- func TestUserParsing(t *testing.T) {
- user := new(User)
- common.Must(json.Unmarshal([]byte(`{
- "id": "96edb838-6d68-42ef-a933-25f7ac3a9d09",
- "email": "[email protected]",
- "level": 1
- }`), user))
- nUser := user.Build()
- if r := cmp.Diff(nUser, &protocol.User{
- Level: 1,
- Email: "[email protected]",
- }, cmpopts.IgnoreUnexported(protocol.User{})); r != "" {
- t.Error(r)
- }
- }
- func TestInvalidUserJson(t *testing.T) {
- user := new(User)
- err := json.Unmarshal([]byte(`{"email": 1234}`), user)
- if err == nil {
- t.Error("nil error")
- }
- }
|