mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-05 16:57:32 +00:00
refactor(webui): openai_compat 判据迁到 test/,包内重建共享辅助
openai_compat_test.go → webui/test/ (4 条判据)
webui/ 178 → 174 条
webui/test/ 24 → 28 条
合计 202 条不变
## 迁移碰到的连带问题
`openai_compat_test.go` 里除了自己的判据,还定义了三个**被包内其他文件
依赖**的共享件:
newOpenAITestServer(t) auth_hardening_test.go 在用
testAuthAPIKey auth_hardening / gzip / legacy_proxy(×2) 在用
seedWebUIConfig 多处
文件一移走,包内立刻 build failed:
vet: auth_hardening_test.go:373:15: undefined: newOpenAITestServer
vet: auth_hardening_test.go:377:30: undefined: testAuthAPIKey
这说明「迁一个测试文件」从来不是孤立的 —— 它可能是包内共享辅助的**宿主**。
## 处理方式:两边各留一份,不跨包共享
包内重定义 `testAuthAPIKey` 与 `newOpenAITestServer`(放 handler_test.go),
test/ 侧保留自己那份(`seedWebUIConfig` 统一收进 helpers_test.go)。
**为什么不抽到共享包**:包内版本要用包内的 `testSDK`/`seedWebUIConfig`,
test/ 版本要用那边的 helper。抽公共包等于让 test/ 反向依赖包内的未导出
辅助 —— 那正是这次迁移要摆脱的东西。两份各写 20 行,换来两侧互不牵连,
比一个"共享测试工具包"更符合这次的目的。
## 顺带修掉一处重复定义
`seedWebUIConfig` 在 secret_meta_test.go 与 helpers_test.go 各出现过一次
(上一批我加的那份没和已有的对齐)。收拢到 helpers_test.go 一份,
字段与包内版本保持一致(api_key/username/password/session_ttl_hours)。
## 验证
go build ./... PASS
go vet ./... PASS
gofmt -l 干净
go test ./... -count=1 67 包全过,0 FAIL
webui/ + webui/test/ 174 + 28 = 202 条,与迁移前一致
This commit is contained in:
@ -1589,3 +1589,34 @@ func TestRuntimeEndpoint(t *testing.T) {
|
||||
t.Fatalf("无状态源应回 503,实际 %d", w2.Code)
|
||||
}
|
||||
}
|
||||
|
||||
// testAuthAPIKey 是 seedWebUIConfig 写进配置的 api_key 值。
|
||||
//
|
||||
// ★ 2026-11-04:原先只在 openai_compat_test.go 里定义,那个文件迁到 test/
|
||||
// 后本包 4 个测试文件(auth_hardening / gzip / legacy_proxy ×2)仍在用它。
|
||||
const testAuthAPIKey = "test-api-key"
|
||||
|
||||
// newOpenAITestServer 起一个带完整路由的 /v1/* 测试服务器。
|
||||
//
|
||||
// ★ 2026-11-04:原先定义在 openai_compat_test.go 里,那个文件迁到 test/
|
||||
// 之后本包仍有判据(auth_hardening_test.go)要用它,于是在这里重建一份包内版本。
|
||||
// 两份都保留是有意的:包内版本用包内的 seedWebUIConfig/testSDK,
|
||||
// test/ 版本用那边的 helper —— 各自独立,避免跨包共享测试辅助。
|
||||
func newOpenAITestServer(t *testing.T) (*httptest.Server, *agentIO.IOManager, *events.Bus) {
|
||||
t.Helper()
|
||||
cfgReg := internalConfig.NewConfigRegistry("")
|
||||
seedWebUIConfig(cfgReg)
|
||||
|
||||
iom := agentIO.NewIOManager()
|
||||
bus := events.NewBus()
|
||||
h := NewHandler(testSDK(sdk.SDKConfig{
|
||||
Settings: sdk.NewSettings("webui", cfgReg),
|
||||
IOManager: iom,
|
||||
EventBus: bus,
|
||||
}))
|
||||
h.RegisterRoutes(http.NewServeMux())
|
||||
|
||||
srv := httptest.NewServer(h.Handler())
|
||||
t.Cleanup(func() { srv.Close() })
|
||||
return srv, iom, bus
|
||||
}
|
||||
|
||||
@ -9,6 +9,8 @@ import (
|
||||
"github.com/JianFeeeee/HologramAgent/internal/plugins/webui"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
internalConfig "github.com/JianFeeeee/HologramAgent/internal/config"
|
||||
)
|
||||
|
||||
// stripJSComments 剥掉 // 行注释与 /* */ 块注释(粗粒度,但足够用于词频统计)。
|
||||
@ -96,3 +98,20 @@ func dashboardJS(t *testing.T) string {
|
||||
t.Helper()
|
||||
return dashboardJSSource(t)
|
||||
}
|
||||
|
||||
// testAPIKey 与 seedWebUIConfig 写进配置的值一致。
|
||||
const testAPIKey = "test-api-key"
|
||||
|
||||
// seedWebUIConfig 在 webui 插件配置里登记并设置 api_key / username / password。
|
||||
//
|
||||
// 与包内 handler_test.go 的同名辅助保持一致 —— requireAPI 会读它,
|
||||
// 没配就返回 503「webui api_key not configured」。
|
||||
func seedWebUIConfig(reg *internalConfig.ConfigRegistry) {
|
||||
c := reg.PluginConfig("webui")
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "api_key", Default: ""})
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "username", Default: ""})
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "password", Default: ""})
|
||||
c.Set("api_key", testAPIKey)
|
||||
c.Set("username", "admin")
|
||||
c.Set("password", "pw-for-test")
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package webui
|
||||
package test
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
@ -13,6 +13,7 @@ import (
|
||||
agentIO "github.com/JianFeeeee/HologramAgent/internal/agent/io"
|
||||
internalConfig "github.com/JianFeeeee/HologramAgent/internal/config"
|
||||
"github.com/JianFeeeee/HologramAgent/internal/events"
|
||||
"github.com/JianFeeeee/HologramAgent/internal/plugins/webui"
|
||||
"github.com/JianFeeeee/HologramAgent/internal/sdk"
|
||||
)
|
||||
|
||||
@ -48,12 +49,12 @@ func newOpenAITestServer(t *testing.T) (*httptest.Server, *agentIO.IOManager, *e
|
||||
|
||||
iom := agentIO.NewIOManager()
|
||||
bus := events.NewBus()
|
||||
cfg := sdk.SDKConfig{
|
||||
cfg := sdk.New("webui", sdk.SDKConfig{
|
||||
Settings: sdk.NewSettings("webui", cfgReg),
|
||||
IOManager: iom,
|
||||
EventBus: bus,
|
||||
}
|
||||
h := NewHandler(testSDK(cfg))
|
||||
})
|
||||
h := webui.NewHandler(cfg)
|
||||
h.RegisterRoutes(http.NewServeMux())
|
||||
|
||||
srv := httptest.NewServer(h.Handler())
|
||||
@ -147,20 +147,3 @@ func serveRoutes(t *testing.T, h *webui.Handler, w http.ResponseWriter, r *http.
|
||||
h.RegisterRoutes(mux)
|
||||
mux.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// testAPIKey 与 seedWebUIConfig 写进配置的值一致。
|
||||
const testAPIKey = "test-api-key"
|
||||
|
||||
// seedWebUIConfig 在 webui 插件配置里登记并设置 api_key / username / password。
|
||||
//
|
||||
// 与包内 handler_test.go 的同名辅助保持一致 —— requireAPI 会读它,
|
||||
// 没配就返回 503「webui api_key not configured」。
|
||||
func seedWebUIConfig(reg *internalConfig.ConfigRegistry) {
|
||||
c := reg.PluginConfig("webui")
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "api_key", Default: ""})
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "username", Default: ""})
|
||||
c.RegisterDef(internalConfig.ConfigDef{Key: "password", Default: ""})
|
||||
c.Set("api_key", testAPIKey)
|
||||
c.Set("username", "admin")
|
||||
c.Set("password", "pw-for-test")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user