VictoriaMetrics/lib/auth/auth_test.go
Nikolay 33f40f4a5f
app/vminsert: allows parsing tenant id from labels (#3009)
* app/vminsert: allows parsing tenant id from labels
it should help mitigate issues with vmagent's multiTenant mode, which works incorrectly at heavy load
and it cannot handle more then 100 different tenants.
This functional hidden with flag and do not change vminsert default behaviour
https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2970

* Update docs/Cluster-VictoriaMetrics.md

Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>

* wip

* app/vminsert/netstorage: clean remaining labels in order to free up GC

* docs/Cluster-VictoriaMetrics.md: typo fix

* wip

* wip

Co-authored-by: Roman Khavronenko <roman@victoriametrics.com>
Co-authored-by: Aliaksandr Valialkin <valyala@victoriametrics.com>
2022-09-30 18:35:53 +03:00

78 lines
1.7 KiB
Go

package auth
import (
"testing"
)
func TestNewTokenSuccess(t *testing.T) {
f := func(token string, want string) {
t.Helper()
newToken, err := NewToken(token)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
got := newToken.String()
if got != want {
t.Fatalf("unexpected NewToken() result;got\n%s\nwant\n%s", got, want)
}
}
// token with accountID only
f("1", "1")
// token with accountID and projecTID
f("1:2", "1:2")
// max uint32 accountID
f("4294967295:1", "4294967295:1")
// max uint32 projectID
f("1:4294967295", "1:4294967295")
// max uint32 accountID and projectID
f("4294967295:4294967295", "4294967295:4294967295")
// multitenant
f("multitenant", "multitenant")
}
func TestNewTokenFailure(t *testing.T) {
f := func(token string) {
t.Helper()
newToken, err := NewToken(token)
if err == nil {
t.Fatalf("expecting non-nil error")
}
if newToken != nil {
t.Fatalf("expecting nil token; got\n%#v", newToken)
}
}
// empty token
f("")
// empty accountID and projectID"
f(":")
// accountID and projectID not int values
f("a:b")
// missed projectID
f("1:")
// missed accountID
f(":2")
// large int value for accountID
f("9223372036854775808:1")
// large value for projectID
f("2:9223372036854775808")
// both large values incorrect
f("9223372036854775809:9223372036854775808")
// large uint32 values incorrect
f("4294967297:4294967295")
//negative accountID
f("-100:100")
// negative projectID
f("100:-100")
// negative accountID and projectID
f("-100:-100")
// accountID is string
f("abcd:2")
// projectID is string
f("2:abcd")
// empty many parts in the token
f("::")
// many string parts in the token
f("a:b:c")
// many int parts in the token"
f("1:2:3")
}