Files
MyGoNavi/internal/app/oceanbase_protocol_test.go
Syngnat f94a0429d5 🐛 fix(oceanbase): 解决 Oracle 租户 MySQL wire 下双引号被误解析与列元数据静默失败
- DSN 注入 sql_mode='ANSI_QUOTES':让元数据查询的 AS "OWNER" 与 ApplyChanges 的 "schema"."table" 在 MySQL wire 上被识别为标识符
- sql_mode 加入 mysql driver 参数白名单,避免被 mergeMySQLConnectionParam 过滤丢弃
- 加载 Oracle 列元数据失败不再静默,改为返回带 ALL_TAB_COLUMNS 诊断提示的明确错误
- 修复 stripOceanBaseConnectionParamsForCache 未剥离 # 片段导致与 resolveOceanBaseProtocolParam 行为不一致
- 锁定 mysql ParseDSN 对 sys@oracle001#cluster:p@ss 类租户凭据切分的 invariant,防止未来误加 url.QueryEscape
- 同步 OceanBase agent revision,强制旧 driver-agent 被运行时校验拒绝
2026-05-14 12:09:19 +08:00

34 lines
928 B
Go

package app
import (
"strings"
"testing"
)
func TestStripOceanBaseConnectionParamsForCacheTrimsFragment(t *testing.T) {
t.Parallel()
got := stripOceanBaseConnectionParamsForCache("protocol=oracle&PREFETCH_ROWS=5000#dev-note")
if strings.Contains(got, "dev-note") {
t.Fatalf("expected fragment removed, got %q", got)
}
if !strings.Contains(got, "PREFETCH_ROWS=5000") {
t.Fatalf("expected business param kept, got %q", got)
}
if strings.Contains(got, "protocol=") {
t.Fatalf("expected protocol param stripped, got %q", got)
}
}
func TestStripOceanBaseConnectionParamsForCacheTrimsLeadingQuestionMark(t *testing.T) {
t.Parallel()
got := stripOceanBaseConnectionParamsForCache("?protocol=oracle&timeout=10")
if strings.Contains(got, "protocol=") {
t.Fatalf("expected protocol param stripped, got %q", got)
}
if !strings.Contains(got, "timeout=10") {
t.Fatalf("expected timeout kept, got %q", got)
}
}