mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2024-04-21 12:21:34 +00:00
143 lines
2.9 KiB
Go
143 lines
2.9 KiB
Go
package memory
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
"strconv"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/p4gefau1t/trojan-go/common"
|
|
"github.com/p4gefau1t/trojan-go/config"
|
|
)
|
|
|
|
func TestMemoryAuth(t *testing.T) {
|
|
cfg := &Config{
|
|
Passwords: nil,
|
|
}
|
|
ctx := config.WithConfig(context.Background(), Name, cfg)
|
|
auth, err := NewAuthenticator(ctx)
|
|
common.Must(err)
|
|
auth.AddUser("user1")
|
|
valid, user := auth.AuthUser("user1")
|
|
if !valid {
|
|
t.Fatal("add, auth")
|
|
}
|
|
if user.Hash() != "user1" {
|
|
t.Fatal("Hash")
|
|
}
|
|
user.AddTraffic(100, 200)
|
|
sent, recv := user.GetTraffic()
|
|
if sent != 100 || recv != 200 {
|
|
t.Fatal("traffic")
|
|
}
|
|
sent, recv = user.ResetTraffic()
|
|
if sent != 100 || recv != 200 {
|
|
t.Fatal("ResetTraffic")
|
|
}
|
|
sent, recv = user.GetTraffic()
|
|
if sent != 0 || recv != 0 {
|
|
t.Fatal("ResetTraffic")
|
|
}
|
|
|
|
user.AddIP("1234")
|
|
user.AddIP("5678")
|
|
if user.GetIP() != 0 {
|
|
t.Fatal("GetIP")
|
|
}
|
|
|
|
user.SetIPLimit(2)
|
|
user.AddIP("1234")
|
|
user.AddIP("5678")
|
|
user.DelIP("1234")
|
|
if user.GetIP() != 1 {
|
|
t.Fatal("DelIP")
|
|
}
|
|
user.DelIP("5678")
|
|
|
|
user.SetIPLimit(2)
|
|
if !user.AddIP("1") || !user.AddIP("2") {
|
|
t.Fatal("AddIP")
|
|
}
|
|
if user.AddIP("3") {
|
|
t.Fatal("AddIP")
|
|
}
|
|
if !user.AddIP("2") {
|
|
t.Fatal("AddIP")
|
|
}
|
|
|
|
user.SetTraffic(1234, 4321)
|
|
if a, b := user.GetTraffic(); a != 1234 || b != 4321 {
|
|
t.Fatal("SetTraffic")
|
|
}
|
|
|
|
user.ResetTraffic()
|
|
go func() {
|
|
for {
|
|
k := 100
|
|
time.Sleep(time.Second / time.Duration(k))
|
|
user.AddTraffic(2000/k, 1000/k)
|
|
}
|
|
}()
|
|
time.Sleep(time.Second * 4)
|
|
if sent, recv := user.GetSpeed(); sent > 3000 || sent < 1000 || recv > 1500 || recv < 500 {
|
|
t.Error("GetSpeed", sent, recv)
|
|
} else {
|
|
t.Log("GetSpeed", sent, recv)
|
|
}
|
|
|
|
user.SetSpeedLimit(30, 20)
|
|
time.Sleep(time.Second * 4)
|
|
if sent, recv := user.GetSpeed(); sent > 60 || recv > 40 {
|
|
t.Error("SetSpeedLimit", sent, recv)
|
|
} else {
|
|
t.Log("SetSpeedLimit", sent, recv)
|
|
}
|
|
|
|
user.SetSpeedLimit(0, 0)
|
|
time.Sleep(time.Second * 4)
|
|
if sent, recv := user.GetSpeed(); sent < 30 || recv < 20 {
|
|
t.Error("SetSpeedLimit", sent, recv)
|
|
} else {
|
|
t.Log("SetSpeedLimit", sent, recv)
|
|
}
|
|
|
|
auth.AddUser("user2")
|
|
valid, _ = auth.AuthUser("user2")
|
|
if !valid {
|
|
t.Fatal()
|
|
}
|
|
auth.DelUser("user2")
|
|
valid, _ = auth.AuthUser("user2")
|
|
if valid {
|
|
t.Fatal()
|
|
}
|
|
auth.AddUser("user3")
|
|
users := auth.ListUsers()
|
|
if len(users) != 2 {
|
|
t.Fatal()
|
|
}
|
|
user.Close()
|
|
auth.Close()
|
|
}
|
|
|
|
func BenchmarkMemoryUsage(b *testing.B) {
|
|
cfg := &Config{
|
|
Passwords: nil,
|
|
}
|
|
ctx := config.WithConfig(context.Background(), Name, cfg)
|
|
auth, err := NewAuthenticator(ctx)
|
|
common.Must(err)
|
|
|
|
m1 := runtime.MemStats{}
|
|
m2 := runtime.MemStats{}
|
|
runtime.ReadMemStats(&m1)
|
|
for i := 0; i < b.N; i++ {
|
|
common.Must(auth.AddUser(common.SHA224String("hash" + strconv.Itoa(i))))
|
|
}
|
|
runtime.ReadMemStats(&m2)
|
|
|
|
b.ReportMetric(float64(m2.Alloc-m1.Alloc)/1024/1024, "MiB(Alloc)")
|
|
b.ReportMetric(float64(m2.TotalAlloc-m1.TotalAlloc)/1024/1024, "MiB(TotalAlloc)")
|
|
}
|