保留存储过程与函数导出、权限检查、编码处理、共享存储对象逻辑及正式测试,同步两份任务进度文档。 已知阻塞:已有MySQL 5.7实库记录中,两种恢复入口均存在Latin-1例程注释乱码;已有8.0编码与权限专项通过,但不能代替最终双版本全量复测。本次仅重新运行例程单元测试及相关包静态检查,均通过。 这是未完成整改的保存检查点,不是发布版本,不表示P0-05完成或生产验收通过。未纳入运行数据、构建产物、原始实库日志或凭据。
51 lines
2.3 KiB
Go
51 lines
2.3 KiB
Go
package cli
|
||
|
||
import (
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
func TestMySQLRoutineHeaderEnd(t *testing.T) {
|
||
for _, header := range []string{
|
||
"CREATE DEFINER=`user`@`host` FUNCTION `name`",
|
||
"CREATE DEFINER=`u(s``er`@`host` PROCEDURE `na(me`",
|
||
`CREATE DEFINER="u(ser"@"host" FUNCTION "na""me"`,
|
||
} {
|
||
end, err := mysqlRoutineHeaderEnd(header + "(IN value INT) BEGIN SELECT 1; END")
|
||
if err != nil || end != len(header) {
|
||
t.Fatalf("声明头边界不正确:%d,%v", end, err)
|
||
}
|
||
}
|
||
if _, err := mysqlRoutineHeaderEnd("CREATE FUNCTION `unterminated()"); err == nil || !strings.Contains(err.Error(), "参数列表") {
|
||
t.Fatal("不完整声明头必须失败")
|
||
}
|
||
}
|
||
|
||
func TestMySQLRoutineVisibilityGrants(t *testing.T) {
|
||
for _, item := range []struct {
|
||
name string
|
||
grants []string
|
||
foldCase bool
|
||
want bool
|
||
}{
|
||
{"show_routine", []string{"GRANT SHOW_ROUTINE ON *.* TO 'u'@'h'"}, false, true},
|
||
{"global_select", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "GRANT BACKUP_ADMIN ON *.* TO 'u'@'h'"}, false, true},
|
||
{"static_all", []string{"GRANT ALL PRIVILEGES ON *.* TO 'u'@'h'"}, false, true},
|
||
{"schema_select", []string{"GRANT SELECT ON `sample`.* TO 'u'@'h'"}, false, false},
|
||
{"schema_all", []string{"GRANT ALL PRIVILEGES ON `sample`.* TO 'u'@'h'"}, false, false},
|
||
{"role_name", []string{"GRANT `SHOW_ROUTINE`@`%` TO 'u'@'h'"}, false, false},
|
||
{"execute_only", []string{"GRANT EXECUTE, CREATE ROUTINE ON *.* TO 'u'@'h'"}, false, false},
|
||
{"partial_revoke", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "REVOKE SELECT ON `sample`.* FROM 'u'@'h'"}, false, false},
|
||
{"revoke_other_schema", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "REVOKE SELECT ON `other`.* FROM 'u'@'h'"}, false, true},
|
||
{"show_not_revoked", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "REVOKE SELECT ON `sample`.* FROM 'u'@'h'", "GRANT SHOW_ROUTINE ON *.* TO 'u'@'h'"}, false, true},
|
||
{"fold_revoke", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "REVOKE SELECT ON `SAMPLE`.* FROM 'u'@'h'"}, true, false},
|
||
{"case_sensitive", []string{"GRANT SELECT ON *.* TO 'u'@'h'", "REVOKE SELECT ON `SAMPLE`.* FROM 'u'@'h'"}, false, true},
|
||
} {
|
||
t.Run(item.name, func(t *testing.T) {
|
||
if got := mysqlRoutineVisibilityGranted(item.grants, "sample", item.foldCase); got != item.want {
|
||
t.Fatalf("例程可见权限判定错误:得到 %t,期望 %t", got, item.want)
|
||
}
|
||
})
|
||
}
|
||
}
|