Files

52 lines
1.8 KiB
Go
Raw Permalink Normal View History

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")
}
}