|
|
|
package vmess_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"v2ray.com/core/common"
|
|
|
|
"v2ray.com/core/common/protocol"
|
|
|
|
"v2ray.com/core/common/uuid"
|
|
|
|
"v2ray.com/core/common/vio"
|
|
|
|
. "v2ray.com/core/proxy/vmess"
|
|
|
|
. "v2ray.com/ext/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestUserValidator(t *testing.T) {
|
|
|
|
assert := With(t)
|
|
|
|
|
|
|
|
hasher := protocol.DefaultIDHash
|
|
|
|
v := NewTimedUserValidator(hasher)
|
|
|
|
defer common.Close(v)
|
|
|
|
|
|
|
|
toAccount := func(a *Account) protocol.Account {
|
|
|
|
account, err := a.AsAccount()
|
|
|
|
common.Must(err)
|
|
|
|
return account
|
|
|
|
}
|
|
|
|
|
|
|
|
id := uuid.New()
|
|
|
|
user := &protocol.MemoryUser{
|
|
|
|
Email: "test",
|
|
|
|
Account: toAccount(&Account{
|
|
|
|
Id: id.String(),
|
|
|
|
AlterId: 8,
|
|
|
|
}),
|
|
|
|
}
|
|
|
|
common.Must(v.Add(user))
|
|
|
|
|
|
|
|
{
|
|
|
|
testSmallLag := func(lag time.Duration) {
|
|
|
|
ts := protocol.Timestamp(time.Now().Add(time.Second * lag).Unix())
|
|
|
|
idHash := hasher(id.Bytes())
|
|
|
|
common.Must2(vio.WriteUint64(idHash, uint64(ts)))
|
|
|
|
userHash := idHash.Sum(nil)
|
|
|
|
|
|
|
|
euser, ets, found := v.Get(userHash)
|
|
|
|
assert(found, IsTrue)
|
|
|
|
assert(euser.Email, Equals, user.Email)
|
|
|
|
assert(int64(ets), Equals, int64(ts))
|
|
|
|
}
|
|
|
|
|
|
|
|
testSmallLag(0)
|
|
|
|
testSmallLag(40)
|
|
|
|
testSmallLag(-40)
|
|
|
|
testSmallLag(80)
|
|
|
|
testSmallLag(-80)
|
|
|
|
testSmallLag(120)
|
|
|
|
testSmallLag(-120)
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
testBigLag := func(lag time.Duration) {
|
|
|
|
ts := protocol.Timestamp(time.Now().Add(time.Second * lag).Unix())
|
|
|
|
idHash := hasher(id.Bytes())
|
|
|
|
common.Must2(vio.WriteUint64(idHash, uint64(ts)))
|
|
|
|
userHash := idHash.Sum(nil)
|
|
|
|
|
|
|
|
euser, _, found := v.Get(userHash)
|
|
|
|
assert(found, IsFalse)
|
|
|
|
assert(euser, IsNil)
|
|
|
|
}
|
|
|
|
|
|
|
|
testBigLag(121)
|
|
|
|
testBigLag(-121)
|
|
|
|
testBigLag(310)
|
|
|
|
testBigLag(-310)
|
|
|
|
testBigLag(500)
|
|
|
|
testBigLag(-500)
|
|
|
|
}
|
|
|
|
|
|
|
|
assert(v.Remove(user.Email), IsTrue)
|
|
|
|
assert(v.Remove(user.Email), IsFalse)
|
|
|
|
}
|