52 lines
1.8 KiB
Go
52 lines
1.8 KiB
Go
package config
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestTencentCaptchaFile(t *testing.T) {
|
||
|
|
valid := `{"secret_id":"test-id","secret_key":"test-key","saas":{"captcha_app_id":"123","app_secret_key":"abcdefghijklmnop"},"mini_program":{"captcha_app_id":"456","app_secret_key":"qrstuvwxyz123456"}}`
|
||
|
|
for _, tc := range []struct {
|
||
|
|
name, raw string
|
||
|
|
ok bool
|
||
|
|
}{
|
||
|
|
{"valid", valid, true}, {"empty", `{}`, true}, {"BOM", "\xef\xbb\xbf" + valid, true},
|
||
|
|
{"partial", `{"secret_id":"test-id"}`, false}, {"unknown", `{"secret_token":"do-not-leak"}`, false},
|
||
|
|
{"same-id", strings.ReplaceAll(valid, `"456"`, `"123"`), false},
|
||
|
|
{"bad-id", strings.ReplaceAll(valid, `"123"`, `"not-numeric"`), false},
|
||
|
|
{"trailing", valid + `{}`, false}, {"oversize", strings.Repeat("x", 16385), false},
|
||
|
|
} {
|
||
|
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
|
path := filepath.Join(t.TempDir(), "captcha.json")
|
||
|
|
if err := os.WriteFile(path, []byte(tc.raw), 0600); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
t.Setenv("TENCENT_CAPTCHA_CONFIG_FILE", path)
|
||
|
|
var c OnboardingConfig
|
||
|
|
err := c.loadTencentCaptchaFile("api")
|
||
|
|
if (err == nil) != tc.ok {
|
||
|
|
t.Fatalf("valid=%v err=%v", tc.ok, err)
|
||
|
|
}
|
||
|
|
if err != nil && strings.Contains(err.Error(), "do-not-leak") {
|
||
|
|
t.Fatal("secret in error")
|
||
|
|
}
|
||
|
|
if err == nil && tc.name == "valid" && (c.TencentCaptcha.SaaS.AppID != "123" || c.TencentCaptcha.Mini.AppID != "456") {
|
||
|
|
t.Fatal("client config mixed")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
func TestTencentCaptchaFileOnlyBackendAndExplicitMissing(t *testing.T) {
|
||
|
|
t.Setenv("TENCENT_CAPTCHA_CONFIG_FILE", filepath.Join(t.TempDir(), "absent.json"))
|
||
|
|
var c OnboardingConfig
|
||
|
|
if c.loadTencentCaptchaFile("callbacks") != nil {
|
||
|
|
t.Fatal("callbacks read config")
|
||
|
|
}
|
||
|
|
if c.loadTencentCaptchaFile("api") == nil {
|
||
|
|
t.Fatal("missing explicit file accepted")
|
||
|
|
}
|
||
|
|
}
|