mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2024-04-21 12:21:34 +00:00
92 lines
2.3 KiB
Go
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()
|
|
}
|