CI / verify (push) Canceled after 0s
- Linux 安装包:scripts/build-linux.ps1 交叉编译出 fonu-<版本>-linux-{amd64,arm64}.tar.gz(二进制 + migrations + systemd 安装脚本 + 运行时资源 + sha256),scripts/fonu-install.sh 负责装机(/opt/fonu、/var/lib/fonu、/etc/fonu/fonu.env 首次生成随机会话密钥)并新增 --reset-admin;装完直接打印初始管理员口令
- 证书 DNS-01:lego 默认读系统 resolv.conf(容器里是 Docker 的 127.0.0.11,不返回权威 NS)导致 could not determine authoritative nameservers;现显式传 AddRecursiveNameservers,默认 223.5.5.5/1.1.1.1/8.8.8.8,设置项 acme_dns_resolvers 可覆盖(system = 回到系统解析器)
- Buypass 已停止签发(2025-10-15)并终止服务(2026-04-15):从可选 CA 移除,历史记录仍可展示,直接提交会被拦下并给出中文原因
- ZeroSSL:422 时带出 error.type/error.code(非 JSON 退回截断正文);同时修掉网络错误把含 access_key 的完整 URL 写进任务日志与 app.log 的密钥泄露
- 测试:解析器列表解析 3 例 + ZeroSSL EAB 4 例(含不泄露密钥断言);gofmt / go build / go vet / go test 全绿
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package acme
|
||
|
||
import "testing"
|
||
|
||
func TestParseResolverList(t *testing.T) {
|
||
cases := []struct {
|
||
name string
|
||
raw string
|
||
want []string
|
||
}{
|
||
{"带端口", "223.5.5.5:53, 1.1.1.1:53", []string{"223.5.5.5:53", "1.1.1.1:53"}},
|
||
{"缺端口补 53", "8.8.8.8\n9.9.9.9", []string{"8.8.8.8:53", "9.9.9.9:53"}},
|
||
{"分号与空格", "223.5.5.5;8.8.4.4 1.0.0.1", []string{"223.5.5.5:53", "8.8.4.4:53", "1.0.0.1:53"}},
|
||
{"空值", " ", nil},
|
||
{"只留空白项", " , ; \n", nil},
|
||
}
|
||
for _, item := range cases {
|
||
got := parseResolverList(item.raw)
|
||
if len(got) != len(item.want) {
|
||
t.Fatalf("%s: 期望 %v,实际 %v", item.name, item.want, got)
|
||
}
|
||
for i := range got {
|
||
if got[i] != item.want[i] {
|
||
t.Fatalf("%s: 期望 %v,实际 %v", item.name, item.want, got)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestParseResolverListCapsEntries(t *testing.T) {
|
||
raw := "1.1.1.1,1.1.1.2,1.1.1.3,1.1.1.4,1.1.1.5,1.1.1.6,1.1.1.7,1.1.1.8,1.1.1.9,1.1.1.10"
|
||
if got := parseResolverList(raw); len(got) != 8 {
|
||
t.Fatalf("最多取前 8 条,实际 %d:%v", len(got), got)
|
||
}
|
||
}
|
||
|
||
// 内置的默认值必须是 lego 能直接用的 host:port 形式
|
||
func TestDefaultResolversAreUsable(t *testing.T) {
|
||
got := parseResolverList(defaultACMEDNSResolvers)
|
||
if len(got) == 0 {
|
||
t.Fatalf("默认解析器解析为空:%q", defaultACMEDNSResolvers)
|
||
}
|
||
if got[0] != "223.5.5.5:53" {
|
||
t.Fatalf("默认解析器首项应带端口,实际 %q", got[0])
|
||
}
|
||
}
|