Files

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)")
}