init
This commit is contained in:
317
forward_test.go
Normal file
317
forward_test.go
Normal file
@ -0,0 +1,317 @@
|
||||
package gost
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func tcpDirectForwardRoundtrip(targetURL string, data []byte) error {
|
||||
ln, err := TCPListener("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
u, err := url.Parse(targetURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: TCPTransporter(),
|
||||
}
|
||||
|
||||
h := TCPDirectForwardHandler(u.Host)
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
return proxyRoundtrip(client, server, targetURL, data)
|
||||
}
|
||||
|
||||
func TestTCPDirectForward(t *testing.T) {
|
||||
httpSrv := httptest.NewServer(httpTestHandler)
|
||||
defer httpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
err := tcpDirectForwardRoundtrip(httpSrv.URL, sendData)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTCPDirectForward(b *testing.B) {
|
||||
httpSrv := httptest.NewServer(httpTestHandler)
|
||||
defer httpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
ln, err := TCPListener("")
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: TCPTransporter(),
|
||||
}
|
||||
|
||||
u, err := url.Parse(httpSrv.URL)
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
h := TCPDirectForwardHandler(u.Host)
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
if err := proxyRoundtrip(client, server, httpSrv.URL, sendData); err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTCPDirectForwardParallel(b *testing.B) {
|
||||
httpSrv := httptest.NewServer(httpTestHandler)
|
||||
defer httpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
ln, err := TCPListener("")
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: TCPTransporter(),
|
||||
}
|
||||
|
||||
u, err := url.Parse(httpSrv.URL)
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
h := TCPDirectForwardHandler(u.Host)
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
if err := proxyRoundtrip(client, server, httpSrv.URL, sendData); err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func udpDirectForwardRoundtrip(t *testing.T, host string, data []byte) error {
|
||||
ln, err := UDPListener("localhost:0", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: UDPTransporter(),
|
||||
}
|
||||
|
||||
h := UDPDirectForwardHandler(host)
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
return udpRoundtrip(t, client, server, host, data)
|
||||
}
|
||||
|
||||
func TestUDPDirectForward(t *testing.T) {
|
||||
udpSrv := newUDPTestServer(udpTestHandler)
|
||||
udpSrv.Start()
|
||||
defer udpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
err := udpDirectForwardRoundtrip(t, udpSrv.Addr(), sendData)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkUDPDirectForward(b *testing.B) {
|
||||
udpSrv := newUDPTestServer(udpTestHandler)
|
||||
udpSrv.Start()
|
||||
defer udpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
ln, err := UDPListener("localhost:0", nil)
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: UDPTransporter(),
|
||||
}
|
||||
|
||||
h := UDPDirectForwardHandler(udpSrv.Addr())
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
if err := udpRoundtrip(b, client, server, udpSrv.Addr(), sendData); err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkUDPDirectForwardParallel(b *testing.B) {
|
||||
udpSrv := newUDPTestServer(udpTestHandler)
|
||||
udpSrv.Start()
|
||||
defer udpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
ln, err := UDPListener("localhost:0", nil)
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: UDPTransporter(),
|
||||
}
|
||||
|
||||
h := UDPDirectForwardHandler(udpSrv.Addr())
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
if err := udpRoundtrip(b, client, server, udpSrv.Addr(), sendData); err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func tcpRemoteForwardRoundtrip(t *testing.T, targetURL string, data []byte) error {
|
||||
ln, err := TCPRemoteForwardListener("localhost:0", nil) // listening on localhost
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
u, err := url.Parse(targetURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: TCPTransporter(),
|
||||
}
|
||||
|
||||
h := TCPRemoteForwardHandler(u.Host) // forward to u.Host
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
return proxyRoundtrip(client, server, targetURL, data)
|
||||
}
|
||||
|
||||
func TestTCPRemoteForward(t *testing.T) {
|
||||
httpSrv := httptest.NewServer(httpTestHandler)
|
||||
defer httpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
err := tcpRemoteForwardRoundtrip(t, httpSrv.URL, sendData)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func udpRemoteForwardRoundtrip(t *testing.T, host string, data []byte) error {
|
||||
ln, err := UDPRemoteForwardListener("localhost:0", nil, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := &Client{
|
||||
Connector: ForwardConnector(),
|
||||
Transporter: UDPTransporter(),
|
||||
}
|
||||
|
||||
h := UDPRemoteForwardHandler(host)
|
||||
h.Init()
|
||||
server := &Server{
|
||||
Listener: ln,
|
||||
Handler: h,
|
||||
}
|
||||
|
||||
go server.Run()
|
||||
defer server.Close()
|
||||
|
||||
return udpRoundtrip(t, client, server, host, data)
|
||||
}
|
||||
|
||||
func TestUDPRemoteForward(t *testing.T) {
|
||||
udpSrv := newUDPTestServer(udpTestHandler)
|
||||
udpSrv.Start()
|
||||
defer udpSrv.Close()
|
||||
|
||||
sendData := make([]byte, 128)
|
||||
rand.Read(sendData)
|
||||
|
||||
err := udpRemoteForwardRoundtrip(t, udpSrv.Addr(), sendData)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user