## 主体是 gofmt
`server/` 下 20 个文件的改动里,**142/147 行是注释与缩进** ——
Go 1.19+ 的 gofmt 把块注释里的 `// x` 规范成 `//\tx`。
功能零变化。
## 一处实质:init.sql 补 parent_session_id
`ALTER TABLE sessions ADD COLUMN IF NOT EXISTS parent_session_id
TEXT REFERENCES sessions(session_id)`
远端已在 `db/migrate.go` 的 `sqliteAddColumns` 结构迁移通道里加了同一列;
init.sql 是**全新库**的建库脚本,缺这列会让新库少一个字段。
- `IF NOT EXISTS` ⇒ 与结构迁移通道幂等,两者并存无害
- 默认空 = 根节点;**不据历史数据猜父子**(猜错会让线索拓扑失真,比没有更糟)
## 新增 handler/ratelimit_test.go(162 行)
速率限制的判据。此前这一块没有独立判据。
## 验证(本机实跑,非推断)
go build ./... 通过
go vet ./internal/{handler,repo,db,sse}/ 通过
go test -count=1(handler/repo/db/sse/blob)
handler 41.3s ok
repo 101.9s ok
db 1.1s ok
sse 0.01s ok
blob 0.08s ok
`-count=1` 是刻意的:第一遍跑出来全是 `(cached)`,那种绿灯不算数。
27 lines
653 B
Go
27 lines
653 B
Go
package handler
|
||
|
||
import (
|
||
"net/http/httptest"
|
||
"testing"
|
||
)
|
||
|
||
func TestIntQueryClampsAndFallsBack(t *testing.T) {
|
||
cases := []struct {
|
||
q string
|
||
want int
|
||
}{
|
||
{"", 40}, // 缺省
|
||
{"limit=10", 10}, // 正常
|
||
{"limit=0", 1}, // 低于下限 → 夹到下限
|
||
{"limit=999", 200}, // 高于上限 → 夹到上限
|
||
{"limit=abc", 40}, // 非法 → 回落默认值,而不是让整个请求 400
|
||
{"limit=-5", 1},
|
||
}
|
||
for _, c := range cases {
|
||
r := httptest.NewRequest("GET", "/x?"+c.q, nil)
|
||
if got := intQuery(r, "limit", 40, 1, 200); got != c.want {
|
||
t.Fatalf("intQuery(%q) = %d,期望 %d", c.q, got, c.want)
|
||
}
|
||
}
|
||
}
|