fix(认证): 修复 OAuth token 缓存失效与 401 处理
新增 token 缓存失效接口并在刷新后清理 401 限流支持自定义规则与可配置冷却时间 补齐缓存失效与 401 处理测试 测试: make test
This commit is contained in:
153
backend/internal/service/token_cache_key_test.go
Normal file
153
backend/internal/service/token_cache_key_test.go
Normal file
@@ -0,0 +1,153 @@
|
||||
//go:build unit
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestGeminiTokenCacheKey(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
account *Account
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "with_project_id",
|
||||
account: &Account{
|
||||
ID: 100,
|
||||
Credentials: map[string]any{
|
||||
"project_id": "my-project-123",
|
||||
},
|
||||
},
|
||||
expected: "my-project-123",
|
||||
},
|
||||
{
|
||||
name: "project_id_with_whitespace",
|
||||
account: &Account{
|
||||
ID: 101,
|
||||
Credentials: map[string]any{
|
||||
"project_id": " project-with-spaces ",
|
||||
},
|
||||
},
|
||||
expected: "project-with-spaces",
|
||||
},
|
||||
{
|
||||
name: "empty_project_id_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 102,
|
||||
Credentials: map[string]any{
|
||||
"project_id": "",
|
||||
},
|
||||
},
|
||||
expected: "account:102",
|
||||
},
|
||||
{
|
||||
name: "whitespace_only_project_id_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 103,
|
||||
Credentials: map[string]any{
|
||||
"project_id": " ",
|
||||
},
|
||||
},
|
||||
expected: "account:103",
|
||||
},
|
||||
{
|
||||
name: "no_project_id_key_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 104,
|
||||
Credentials: map[string]any{},
|
||||
},
|
||||
expected: "account:104",
|
||||
},
|
||||
{
|
||||
name: "nil_credentials_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 105,
|
||||
Credentials: nil,
|
||||
},
|
||||
expected: "account:105",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := GeminiTokenCacheKey(tt.account)
|
||||
require.Equal(t, tt.expected, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAntigravityTokenCacheKey(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
account *Account
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "with_project_id",
|
||||
account: &Account{
|
||||
ID: 200,
|
||||
Credentials: map[string]any{
|
||||
"project_id": "ag-project-456",
|
||||
},
|
||||
},
|
||||
expected: "ag:ag-project-456",
|
||||
},
|
||||
{
|
||||
name: "project_id_with_whitespace",
|
||||
account: &Account{
|
||||
ID: 201,
|
||||
Credentials: map[string]any{
|
||||
"project_id": " ag-project-spaces ",
|
||||
},
|
||||
},
|
||||
expected: "ag:ag-project-spaces",
|
||||
},
|
||||
{
|
||||
name: "empty_project_id_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 202,
|
||||
Credentials: map[string]any{
|
||||
"project_id": "",
|
||||
},
|
||||
},
|
||||
expected: "ag:account:202",
|
||||
},
|
||||
{
|
||||
name: "whitespace_only_project_id_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 203,
|
||||
Credentials: map[string]any{
|
||||
"project_id": " ",
|
||||
},
|
||||
},
|
||||
expected: "ag:account:203",
|
||||
},
|
||||
{
|
||||
name: "no_project_id_key_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 204,
|
||||
Credentials: map[string]any{},
|
||||
},
|
||||
expected: "ag:account:204",
|
||||
},
|
||||
{
|
||||
name: "nil_credentials_fallback_to_account_id",
|
||||
account: &Account{
|
||||
ID: 205,
|
||||
Credentials: nil,
|
||||
},
|
||||
expected: "ag:account:205",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := AntigravityTokenCacheKey(tt.account)
|
||||
require.Equal(t, tt.expected, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user