package console import "testing" // 下载页地址的边界:分发桶是公共读的,这里放宽一点就等于任人挂页面 / 覆盖别的应用。 func TestParseDistPageURL(t *testing.T) { const domain = "https://dl.ymaikj.com/" ok := []struct{ in, key, url string }{ {"https://dl.ymaikj.com/EAIMAR/download.html", "EAIMAR/download.html", "https://dl.ymaikj.com/EAIMAR/download.html"}, {"http://DL.ymaikj.com/EAIMAR/download2.html?x=1", "EAIMAR/download2.html", "https://dl.ymaikj.com/EAIMAR/download2.html"}, {"https://dl.ymaikj.com/EAIMAR/a_b-c.html", "EAIMAR/a_b-c.html", "https://dl.ymaikj.com/EAIMAR/a_b-c.html"}, } for _, c := range ok { key, u, err := parseDistPageURL(c.in, domain, "EAIMAR") if err != nil || key != c.key || u != c.url { t.Errorf("%s => (%q,%q,%v), want (%q,%q)", c.in, key, u, err, c.key, c.url) } } bad := []string{ "", "dl.ymaikj.com/EAIMAR/download.html", // 没有 scheme "https://evil.com/EAIMAR/download.html", // 别的域名 "https://dl.ymaikj.com/deepGlass/download.html", // 别的应用 "https://dl.ymaikj.com/android/EAIMAR/x.html", // 多一层 / 安装包目录 "https://dl.ymaikj.com/download.html", // 少一层 "https://dl.ymaikj.com/EAIMAR/x.apk", // 不是 html "https://dl.ymaikj.com/EAIMAR/../x.html", // 穿越 "https://dl.ymaikj.com/EAIMAR/.x.html", // 隐藏文件 "https://dl.ymaikj.com/EAIMAR/x.HTML", // 扩展名只认小写 } for _, in := range bad { if key, _, err := parseDistPageURL(in, domain, "EAIMAR"); err == nil { t.Errorf("%q 应被拒,却得到 key=%q", in, key) } } if got := defaultDistPageURL(domain, "EAIMAR"); got != "https://dl.ymaikj.com/EAIMAR/download.html" { t.Errorf("默认地址 = %s", got) } }