Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestOpenAIRecordUsageInputsCarryQuotaPlatform(t *testing.T) {
|
||||
files := []string{
|
||||
"openai_gateway_handler.go",
|
||||
"openai_chat_completions.go",
|
||||
"openai_embeddings.go",
|
||||
"openai_images.go",
|
||||
}
|
||||
|
||||
for _, name := range files {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
fset := token.NewFileSet()
|
||||
file, err := parser.ParseFile(fset, filepath.Join(".", name), nil, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
var missing []token.Position
|
||||
ast.Inspect(file, func(node ast.Node) bool {
|
||||
literal, ok := node.(*ast.CompositeLit)
|
||||
if !ok || !isOpenAIRecordUsageInputLiteral(literal.Type) {
|
||||
return true
|
||||
}
|
||||
if !compositeLiteralHasKey(literal, "QuotaPlatform") {
|
||||
missing = append(missing, fset.Position(literal.Lbrace))
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
require.Empty(t, missing, "OpenAI usage post-billing must receive request-time QuotaPlatform")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func isOpenAIRecordUsageInputLiteral(expr ast.Expr) bool {
|
||||
selector, ok := expr.(*ast.SelectorExpr)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
pkg, ok := selector.X.(*ast.Ident)
|
||||
return ok && pkg.Name == "service" && selector.Sel.Name == "OpenAIRecordUsageInput"
|
||||
}
|
||||
|
||||
func compositeLiteralHasKey(literal *ast.CompositeLit, key string) bool {
|
||||
for _, elt := range literal.Elts {
|
||||
pair, ok := elt.(*ast.KeyValueExpr)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
ident, ok := pair.Key.(*ast.Ident)
|
||||
if ok && ident.Name == key {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user