Files
trojan-go/test/api_test.go
T
2020-05-28 07:58:11 +00:00

92 lines
2.3 KiB
Go

package test
import (
"context"
"fmt"
"testing"
"time"
"github.com/p4gefau1t/trojan-go/api/service"
"github.com/p4gefau1t/trojan-go/common"
"golang.org/x/net/proxy"
"google.golang.org/grpc"
)
func TestServerAPI(t *testing.T) {
serverConfig := addAPIConfig(getBasicServerConfig())
clientConfig := getBasicClientConfig()
clientConfig.Hash = getHash("apitest")
clientConfig.Passwords = getPasswords("apitest")
ctx, cancel := context.WithCancel(context.Background())
go RunBlackHoleTCPServer(ctx)
go RunServer(ctx, serverConfig)
go RunClient(ctx, clientConfig)
time.Sleep(time.Second * 2)
grpcConn, err := grpc.Dial("127.0.0.1:10000", grpc.WithInsecure())
common.Must(err)
server := service.NewTrojanServerServiceClient(grpcConn)
listUserStream, err := server.ListUsers(ctx, &service.ListUsersRequest{})
common.Must(err)
defer listUserStream.CloseSend()
for {
resp, err := listUserStream.Recv()
if err != nil {
break
}
fmt.Println(resp.User.Hash)
fmt.Println(*resp.Status.SpeedCurrent)
fmt.Println(*resp.Status.SpeedLimit)
}
listUserStream.CloseSend()
setUserStream, err := server.SetUsers(ctx)
setUserStream.Send(&service.SetUsersRequest{
User: &service.User{
Hash: common.SHA224String("apitest"),
},
SpeedLimit: &service.Speed{
UploadSpeed: 1024 * 1024 * 2,
},
Operation: service.SetUsersRequest_Add,
})
resp3, err := setUserStream.Recv()
if err != nil || !resp3.Success {
t.Fail()
}
setUserStream.CloseSend()
go func() {
dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:4444", nil, nil)
common.Must(err)
conn, err := dialer.Dial("tcp", "127.0.0.1:5000")
common.Must(err)
mbytes := 16
payload := GeneratePayload(1024 * 1024 * mbytes)
t1 := time.Now()
conn.Write(payload)
t2 := time.Now()
speed := float64(mbytes) / t2.Sub(t1).Seconds()
t.Log("single-thread link speed:", speed, "MiB/s")
conn.Close()
}()
time.Sleep(time.Second * 5)
listUserStream, err = server.ListUsers(ctx, &service.ListUsersRequest{})
common.Must(err)
defer listUserStream.CloseSend()
for {
resp, err := listUserStream.Recv()
if err != nil {
break
}
fmt.Println(resp.User.Hash)
fmt.Println(resp.Status.SpeedCurrent.UploadSpeed)
fmt.Println(resp.Status.SpeedLimit.UploadSpeed)
}
listUserStream.CloseSend()
cancel()
}