Files
CLIProxyAPI/internal/config/github_token_test.go
2026-10-08 00:33:27 +08:00

56 lines
1.4 KiB
Go

package config
import (
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
"gopkg.in/yaml.v3"
)
func TestGitHubTokenConfigRoundTrip(t *testing.T) {
cfg, err := ParseConfigBytes([]byte("server:\n github-token: test-github-secret\n"))
if err != nil {
t.Fatal(err)
}
if cfg.GitHubToken != "test-github-secret" {
t.Fatal("server.github-token was not parsed")
}
path := filepath.Join(t.TempDir(), "config.yaml")
if err = os.WriteFile(path, []byte("server:\n github-token: old\n"), 0600); err != nil {
t.Fatal(err)
}
if err = SaveConfigPreserveComments(path, cfg); err != nil {
t.Fatal(err)
}
data, err := os.ReadFile(path)
if err != nil {
t.Fatal(err)
}
var tree map[string]interface{}
if err = yaml.Unmarshal(data, &tree); err != nil {
t.Fatal(err)
}
server, ok := tree["server"].(map[string]interface{})
if !ok || server["github-token"] != "test-github-secret" {
t.Fatal("canonical YAML path was not preserved")
}
reloaded, err := ParseConfigBytes(data)
if err != nil || reloaded.GitHubToken != cfg.GitHubToken {
t.Fatal("token did not round trip")
}
clone := cfg.CloneForRuntime()
if clone.GitHubToken != cfg.GitHubToken {
t.Fatal("clone lost token")
}
data, err = json.Marshal(cfg)
if err != nil {
t.Fatal(err)
}
if strings.Contains(string(data), "test-github-secret") {
t.Fatal("token leaked in runtime JSON")
}
}