Finish adding testing to tcp/udp forwarding
This commit is contained in:
parent
cef07dd0a4
commit
7d10e58d08
4
go.mod
4
go.mod
|
@ -7,11 +7,11 @@ require (
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/mrmelon54/mjwt v0.0.1
|
github.com/mrmelon54/mjwt v0.0.1
|
||||||
github.com/stretchr/testify v1.8.2
|
github.com/stretchr/testify v1.8.2
|
||||||
|
golang.org/x/net v0.9.0
|
||||||
xorm.io/xorm v1.3.2
|
xorm.io/xorm v1.3.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
code.mrmelon54.com/melon/summer v0.0.2 // indirect
|
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||||
github.com/goccy/go-json v0.8.1 // indirect
|
github.com/goccy/go-json v0.8.1 // indirect
|
||||||
|
@ -25,6 +25,8 @@ require (
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||||
golang.org/x/crypto v0.8.0 // indirect
|
golang.org/x/crypto v0.8.0 // indirect
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 // indirect
|
||||||
|
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect
|
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect
|
||||||
)
|
)
|
||||||
|
|
7
go.sum
7
go.sum
|
@ -1,9 +1,5 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
code.mrmelon54.com/melon/summer v0.0.2 h1:8VGzgS5BKULvbONwtLE3k2EiYJzMtyBqEHwUz9EaLec=
|
|
||||||
code.mrmelon54.com/melon/summer v0.0.2/go.mod h1:8RztDnjYO+04/+o6pWnyv74sGH8ZkaVMrF6wAt6H9D0=
|
|
||||||
code.mrmelon54.com/melon/summer-utils v0.0.1 h1:nuM7Bshl244F3HbzBH9KDRJ2GSV86+TyQZroof4bv1A=
|
|
||||||
code.mrmelon54.com/melon/summer-utils v0.0.1/go.mod h1:rDuABxgoMOhz3KgNqoCvVXIGixf7Xq76E/36Q1f5hCI=
|
|
||||||
code.mrmelon54.com/melon/summer-utils v0.0.3 h1:Bz4o5BBOqWCNGpKkxUum4rwMn/DIdyMCKGQ/D6SXD6Q=
|
code.mrmelon54.com/melon/summer-utils v0.0.3 h1:Bz4o5BBOqWCNGpKkxUum4rwMn/DIdyMCKGQ/D6SXD6Q=
|
||||||
code.mrmelon54.com/melon/summer-utils v0.0.3/go.mod h1:Gh/baXSzkf1ZhHonpPP8oQkyhhmFZcC2yTMlrwclDUw=
|
code.mrmelon54.com/melon/summer-utils v0.0.3/go.mod h1:Gh/baXSzkf1ZhHonpPP8oQkyhhmFZcC2yTMlrwclDUw=
|
||||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
|
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
|
||||||
|
@ -407,6 +403,7 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4=
|
golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
@ -426,6 +423,7 @@ golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
|
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
|
||||||
|
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
@ -491,6 +489,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
||||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI=
|
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI=
|
||||||
|
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
|
||||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|
|
@ -29,6 +29,9 @@ func NewTcpManager(db *xorm.Engine) *Manager {
|
||||||
|
|
||||||
func (m *Manager) Compile() {
|
func (m *Manager) Compile() {
|
||||||
m.empty()
|
m.empty()
|
||||||
|
if m.db == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
var a []web.TcpRedirect
|
var a []web.TcpRedirect
|
||||||
err := m.db.Where("enabled = ?", true).Find(&a)
|
err := m.db.Where("enabled = ?", true).Find(&a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1 +1,44 @@
|
||||||
package tcp
|
package tcp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.mrmelon54.com/melon/summer-utils/tables/web"
|
||||||
|
"code.mrmelon54.com/melon/summer-utils/utils"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"net"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewTcpManager(t *testing.T) {
|
||||||
|
m := NewTcpManager(nil)
|
||||||
|
m.Add(web.TcpRedirect{Id: 1, Port: 1238, Target: "127.0.0.1:1234", Enabled: utils.PBool(true)})
|
||||||
|
m.Add(web.TcpRedirect{Id: 2, Port: 1239, Target: "127.0.0.1:1234", Enabled: utils.PBool(true)})
|
||||||
|
|
||||||
|
dial, err := net.Dial("tcp", "127.0.0.1:1238")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
defer dial.Close()
|
||||||
|
|
||||||
|
dial, err = net.Dial("tcp", "127.0.0.1:1239")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
defer dial.Close()
|
||||||
|
|
||||||
|
// port 1237 closes
|
||||||
|
m.Close(2)
|
||||||
|
|
||||||
|
dial, err = net.Dial("tcp", "127.0.0.1:1238")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
defer dial.Close()
|
||||||
|
|
||||||
|
_, err = net.Dial("tcp", "127.0.0.1:1239")
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
// all ports close
|
||||||
|
m.Destroy()
|
||||||
|
|
||||||
|
_, err = net.Dial("tcp", "127.0.0.1:1238")
|
||||||
|
assert.Error(t, err)
|
||||||
|
_, err = net.Dial("tcp", "127.0.0.1:1239")
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"net"
|
"net"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewTcpProxy(t *testing.T) {
|
func TestNewTcpProxy(t *testing.T) {
|
||||||
|
@ -20,11 +21,11 @@ func TestNewTcpProxy(t *testing.T) {
|
||||||
defer listenTCP.Close()
|
defer listenTCP.Close()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
tcp, err := listenTCP.AcceptTCP()
|
accept, err := listenTCP.AcceptTCP()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
b := make([]byte, 2)
|
b := make([]byte, 2)
|
||||||
n, err := tcp.Read(b)
|
n, err := accept.Read(b)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 2, n)
|
assert.Equal(t, 2, n)
|
||||||
|
|
||||||
|
@ -46,8 +47,11 @@ func TestNewTcpProxy(t *testing.T) {
|
||||||
proxy.Quit()
|
proxy.Quit()
|
||||||
assert.False(t, proxy.done.Running())
|
assert.False(t, proxy.done.Running())
|
||||||
|
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
// Open connections prevent the proxy from quitting
|
// Open connections prevent the proxy from quitting
|
||||||
n, err := tcp.Write([]byte{0x32, 0x32})
|
_, err = tcp.Write([]byte{0x32, 0x32})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = tcp.Read(nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 2, n)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,9 @@ func NewUdpManager(db *xorm.Engine) *Manager {
|
||||||
|
|
||||||
func (m *Manager) Compile() {
|
func (m *Manager) Compile() {
|
||||||
m.empty()
|
m.empty()
|
||||||
|
if m.db == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
var a []web.UdpRedirect
|
var a []web.UdpRedirect
|
||||||
err := m.db.Where("enabled = ?", true).Find(&a)
|
err := m.db.Where("enabled = ?", true).Find(&a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1 +1,107 @@
|
||||||
package udp
|
package udp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"code.mrmelon54.com/melon/summer-utils/tables/web"
|
||||||
|
"code.mrmelon54.com/melon/summer-utils/utils"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"net"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewUdpManager(t *testing.T) {
|
||||||
|
m := NewUdpManager(nil)
|
||||||
|
m.Add(web.UdpRedirect{Id: 1, Port: 1240, Target: "127.0.0.1:1234", Enabled: utils.PBool(true)})
|
||||||
|
m.Add(web.UdpRedirect{Id: 2, Port: 1241, Target: "127.0.0.1:1234", Enabled: utils.PBool(true)})
|
||||||
|
|
||||||
|
packet, err := net.ListenPacket("udp", "127.0.0.1:1234")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
done := utils.NewDoneChan()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-done.C:
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
b := make([]byte, 2)
|
||||||
|
n, a, err := packet.ReadFrom(b)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
n, err = packet.WriteTo([]byte{b[0] + 1, b[1] + 1}, a)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
dial, err := net.Dial("udp", "127.0.0.1:1240")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
defer dial.Close()
|
||||||
|
|
||||||
|
dial2, err := net.Dial("udp", "127.0.0.1:1241")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
defer dial2.Close()
|
||||||
|
|
||||||
|
n, err := dial.Write([]byte{0x01, 0x15})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b := make([]byte, 2)
|
||||||
|
n, err = dial.Read(b)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
assert.Equal(t, 0, bytes.Compare(b, []byte{0x02, 0x16}))
|
||||||
|
|
||||||
|
n, err = dial2.Write([]byte{0x03, 0x17})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b = make([]byte, 2)
|
||||||
|
n, err = dial2.Read(b)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
assert.Equal(t, 0, bytes.Compare(b, []byte{0x04, 0x18}))
|
||||||
|
|
||||||
|
// port 1237 closes
|
||||||
|
m.Close(2)
|
||||||
|
|
||||||
|
n, err = dial.Write([]byte{0x05, 0x19})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b = make([]byte, 2)
|
||||||
|
n, err = dial.Read(b)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
assert.Equal(t, 0, bytes.Compare(b, []byte{0x06, 0x1a}))
|
||||||
|
|
||||||
|
n, err = dial2.Write([]byte{0x07, 0x1b})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b = make([]byte, 2)
|
||||||
|
n, err = dial2.Read(b)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Equal(t, 0, n)
|
||||||
|
|
||||||
|
// all ports close
|
||||||
|
m.Destroy()
|
||||||
|
|
||||||
|
n, err = dial2.Write([]byte{0x09, 0x1d})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b = make([]byte, 2)
|
||||||
|
n, err = dial2.Read(b)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Equal(t, 0, n)
|
||||||
|
|
||||||
|
n, err = dial2.Write([]byte{0x11, 0x25})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 2, n)
|
||||||
|
b = make([]byte, 2)
|
||||||
|
n, err = dial2.Read(b)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Equal(t, 0, n)
|
||||||
|
|
||||||
|
done.Close()
|
||||||
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ outer:
|
||||||
i, addr, err := p.l.ReadFromUDP(buf)
|
i, addr, err := p.l.ReadFromUDP(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[WARN %s @ %s] Read failed '%s'\n", addr, p.lAddr, err)
|
log.Printf("[WARN %s @ %s] Read failed '%s'\n", addr, p.lAddr, err)
|
||||||
continue outer
|
break outer
|
||||||
}
|
}
|
||||||
data := buf[:i]
|
data := buf[:i]
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewUdpProxy(t *testing.T) {
|
func TestNewUdpProxy(t *testing.T) {
|
||||||
addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:1234")
|
addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:1236")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
addr2, err := net.ResolveUDPAddr("udp", "127.0.0.1:1235")
|
addr2, err := net.ResolveUDPAddr("udp", "127.0.0.1:1237")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
listenUDP, err := net.ListenUDP("udp", addr2)
|
listenUDP, err := net.ListenUDP("udp", addr2)
|
||||||
|
|
Reference in New Issue