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
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
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
|
|
}
|