Add tests for parsing shadowsocks binding addresses

pull/132/head
Andy Wang 4 years ago
parent a86899f007
commit 8b0a7425f8

@ -1,10 +1,14 @@
package main
import "testing"
import (
"github.com/stretchr/testify/assert"
"net"
"testing"
)
func TestParseBindAddr(t *testing.T) {
t.Run("port only", func(t *testing.T) {
addrs, err := parseBindAddr([]string{":443"})
addrs, err := resolveBindAddr([]string{":443"})
if err != nil {
t.Error(err)
return
@ -15,7 +19,7 @@ func TestParseBindAddr(t *testing.T) {
})
t.Run("specific address", func(t *testing.T) {
addrs, err := parseBindAddr([]string{"192.168.1.123:443"})
addrs, err := resolveBindAddr([]string{"192.168.1.123:443"})
if err != nil {
t.Error(err)
return
@ -26,7 +30,7 @@ func TestParseBindAddr(t *testing.T) {
})
t.Run("ipv6", func(t *testing.T) {
addrs, err := parseBindAddr([]string{"[::]:443"})
addrs, err := resolveBindAddr([]string{"[::]:443"})
if err != nil {
t.Error(err)
return
@ -37,7 +41,7 @@ func TestParseBindAddr(t *testing.T) {
})
t.Run("mixed", func(t *testing.T) {
addrs, err := parseBindAddr([]string{":80", "[::]:443"})
addrs, err := resolveBindAddr([]string{":80", "[::]:443"})
if err != nil {
t.Error(err)
return
@ -50,3 +54,104 @@ func TestParseBindAddr(t *testing.T) {
}
})
}
func assertSetEqual(t *testing.T, list1, list2 interface{}, msgAndArgs ...interface{}) (ok bool) {
return assert.Subset(t, list1, list2, msgAndArgs) && assert.Subset(t, list2, list1, msgAndArgs)
}
func TestParseSSBindAddr(t *testing.T) {
testTable := []struct {
name string
ssRemoteHost string
ssRemotePort string
ckBindAddr []net.Addr
expectedAddr []net.Addr
}{
{
"ss only ipv4",
"127.0.0.1",
"443",
[]net.Addr{},
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 443,
},
},
},
{
"ss only ipv6",
"::",
"443",
[]net.Addr{},
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("::"),
Port: 443,
},
},
},
//{
// "ss only ipv4 and v6",
// "::|127.0.0.1",
// "443",
// []net.Addr{},
// []net.Addr{
// &net.TCPAddr{
// IP: net.ParseIP("::"),
// Port: 443,
// },
// &net.TCPAddr{
// IP: net.ParseIP("127.0.0.1"),
// Port: 443,
// },
// },
//},
{
"ss and existing agrees",
"::",
"443",
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("::"),
Port: 443,
},
},
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("::"),
Port: 443,
},
},
},
{
"ss adds onto existing",
"127.0.0.1",
"80",
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("::"),
Port: 443,
},
},
[]net.Addr{
&net.TCPAddr{
IP: net.ParseIP("::"),
Port: 443,
},
&net.TCPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 80,
},
},
},
}
for _, test := range testTable {
test := test
t.Run(test.name, func(t *testing.T) {
assert.NoError(t, parseSSBindAddr(test.ssRemoteHost, test.ssRemotePort, &test.ckBindAddr))
assertSetEqual(t, test.ckBindAddr, test.expectedAddr)
})
}
}

Loading…
Cancel
Save