feat: implement precise token logout
This commit is contained in:
@@ -11,13 +11,15 @@ import (
|
||||
type testGroupMessageRuntime struct {
|
||||
claims map[string]*groupMessageUniqueRecord
|
||||
seqs map[string]int64
|
||||
shortStates map[string]bool
|
||||
deletedPrefixes []string
|
||||
}
|
||||
|
||||
func newTestGroupMessageRuntime() *testGroupMessageRuntime {
|
||||
return &testGroupMessageRuntime{
|
||||
claims: make(map[string]*groupMessageUniqueRecord),
|
||||
seqs: make(map[string]int64),
|
||||
claims: make(map[string]*groupMessageUniqueRecord),
|
||||
seqs: make(map[string]int64),
|
||||
shortStates: make(map[string]bool),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +140,12 @@ func (r *testGroupMessageRuntime) AllowRate(types.TenantID, string, int, time.Du
|
||||
return true, 0, 0, nil
|
||||
}
|
||||
|
||||
func (r *testGroupMessageRuntime) ClaimShortState(string, string, time.Duration) (bool, error) {
|
||||
func (r *testGroupMessageRuntime) ClaimShortState(namespace, id string, _ time.Duration) (bool, error) {
|
||||
key := namespace + ":" + id
|
||||
if r.shortStates[key] {
|
||||
return false, nil
|
||||
}
|
||||
r.shortStates[key] = true
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -146,6 +153,30 @@ func (r *testGroupMessageRuntime) ClaimShortStateValue(string, string, string, t
|
||||
return true, true, nil
|
||||
}
|
||||
|
||||
func (r *testGroupMessageRuntime) ShortStateExists(namespace, id string) (bool, error) {
|
||||
return r.shortStates[namespace+":"+id], nil
|
||||
}
|
||||
|
||||
func TestLoginTokenRevocation(t *testing.T) {
|
||||
oldRuntime := groupMsgRuntime
|
||||
groupMsgRuntime = newTestGroupMessageRuntime()
|
||||
t.Cleanup(func() { groupMsgRuntime = oldRuntime })
|
||||
|
||||
token := []byte("current-device-token")
|
||||
if revoked, enabled, err := IsLoginTokenRevoked(7, token); err != nil || !enabled || revoked {
|
||||
t.Fatalf("unexpected initial state: revoked=%v enabled=%v err=%v", revoked, enabled, err)
|
||||
}
|
||||
if enabled, err := RevokeLoginToken(7, token, time.Hour); err != nil || !enabled {
|
||||
t.Fatalf("revoke token: enabled=%v err=%v", enabled, err)
|
||||
}
|
||||
if revoked, enabled, err := IsLoginTokenRevoked(7, token); err != nil || !enabled || !revoked {
|
||||
t.Fatalf("revoked token was accepted: revoked=%v enabled=%v err=%v", revoked, enabled, err)
|
||||
}
|
||||
if revoked, _, err := IsLoginTokenRevoked(7, []byte("other-device-token")); err != nil || revoked {
|
||||
t.Fatalf("other device token was revoked: revoked=%v err=%v", revoked, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessageRuntimeSeqAndClientMidIdempotency(t *testing.T) {
|
||||
oldRuntime := groupMsgRuntime
|
||||
runtime := newTestGroupMessageRuntime()
|
||||
|
||||
Reference in New Issue
Block a user