Files
LokiStack/backend/routers/router_test.go
T
opsx 4f74fe6c3f
CI / Backend (go vet + test) (push) Canceled after 0s
CI / Frontend (lint + build + test) (push) Canceled after 0s
ci(engineering): Gitea Actions 门禁 + 前端测试设施 + 版本注入修复
- .gitea/workflows/ci.yml:后端 gofmt/vet/test + 前端 lint/test/build 双 job 门禁
- vitest + @testing-library + jsdom 落地,14 个命脉用例:useListQuery 乱序丢弃/卸载中止、
  http.ts 401 单飞刷新+队列重放+失败登出+silent 直拒、审计防抖、StepDeploy 部署目标、query-utils
- 版本注入断裂修复:main 补 buildTime/gitCommit 符号,build.sh/Dockerfile 注入 main.version,
  /health 返回真实版本,前端 package.json 版本对齐 2.0.0
- gofmt 清零(8 个存量未格式化文件)
2026-10-29 13:02:19 +08:00

84 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package routers
import (
"testing"
"github.com/gin-gonic/gin"
)
// 回归:接口的 **HTTP 方法与路径** 必须和前端调用一致。
//
// 线上事故:一次模糊匹配的 patch 把
//
// logs.POST("/histogram", ...) → logs.GET("/histogram", ...)
//
// 前端 logsApi.histogram 用的是 POST(body 里带 sourceId/query/start/end),
// 于是所有直方图请求 404:
// - 日志查询页:直方图不显示
// - 日志分析页:直接报 "API endpoint not found",整页不可用
//
// 这类"方法写错"编译期完全查不出来,只能靠路由表断言。
func TestCriticalRoutes(t *testing.T) {
gin.SetMode(gin.TestMode)
engine := SetupRouter()
// 期望的 method + path(注意 gin 会把 :param 保留为 :id)
expect := []struct{ method, path string }{
// 日志查询 / 分析页的数据来源:必须是 POST(前端传 body)
{"POST", "/api/v1/logs/histogram"},
{"POST", "/api/v1/logs/stats"},
{"POST", "/api/v1/logs/metrics"},
{"POST", "/api/v1/logs/query"},
{"POST", "/api/v1/logs/context"},
// 查询辅助接口:GET + query string
{"GET", "/api/v1/logs/sources"},
{"GET", "/api/v1/logs/labels"},
{"GET", "/api/v1/logs/label/:name/values"},
{"GET", "/api/v1/logs/my-scope"},
{"GET", "/api/v1/logs/daily-volume"},
{"GET", "/api/v1/logs/health"},
// 告警
{"GET", "/api/v1/alerts/rules"},
{"POST", "/api/v1/alerts/rules"},
{"GET", "/api/v1/alerts/channels"},
{"POST", "/api/v1/alerts/check"},
{"GET", "/api/v1/alerts/deliveries"},
// 审计 / 自检 / 备份
{"GET", "/api/v1/audit-logs"},
{"GET", "/api/v1/system/self-check"},
{"GET", "/api/v1/system/backup"},
}
registered := map[string]bool{}
for _, route := range engine.Routes() {
registered[route.Method+" "+route.Path] = true
}
for _, item := range expect {
key := item.method + " " + item.path
if !registered[key] {
t.Errorf("缺少路由: %s(前端按这个方法和路径调用,缺了就是 404)", key)
}
}
}
// 回归:前端用 POST 的接口不能只有 GET 版本。
// 单独断言一次,避免以后又有人"顺手"把 POST 改成 GET。
func TestHistogramAcceptsPost(t *testing.T) {
gin.SetMode(gin.TestMode)
engine := SetupRouter()
methods := map[string]bool{}
for _, route := range engine.Routes() {
if route.Path == "/api/v1/logs/histogram" {
methods[route.Method] = true
}
}
if !methods["POST"] {
t.Fatal("POST /api/v1/logs/histogram 未注册:前端 logsApi.histogram 用 POST,会 404")
}
if !methods["GET"] {
t.Fatal("GET /api/v1/logs/histogram 未注册:curl 调试入口丢了")
}
}