This commit is contained in:
2026-08-17 02:12:17 +08:00
parent 560ae46b82
commit 6a05803e08
96 changed files with 2888 additions and 685 deletions
+60
View File
@@ -2,9 +2,14 @@ package data
import (
"context"
"os"
"path/filepath"
"strings"
"testing"
"kra/internal/conf"
"gopkg.in/yaml.v3"
)
func TestDatabaseConnectionConfigured(t *testing.T) {
@@ -49,3 +54,58 @@ func TestInitializationStateTracksRealDatabaseConnection(t *testing.T) {
t.Fatal("an active configured database must not require initialization")
}
}
func TestPersistDatabaseConfigPreservesTemplateAndRotatesJWTKey(t *testing.T) {
root := t.TempDir()
configPath := filepath.Join(root, "config.yaml")
original := `server:
http:
addr: 0.0.0.0:8000
data:
database:
driver: mysql
name: old
redis:
addr: 127.0.0.1:6379
admin:
jwt:
signing_key: old-key
issuer: kra
zap:
director: logs
extension:
preserved: true
`
if err := os.WriteFile(configPath, []byte(original), 0o600); err != nil {
t.Fatal(err)
}
runtime := conf.NewRuntime(&conf.Data{}, &conf.AdminBackend{ConfigPath: configPath})
data := &Data{runtime: runtime}
if err := data.persistDatabaseConfig(&conf.Data_Database{Driver: "mysql", Host: "db", Port: "3306", User: "root", Password: "secret", Name: "kra", Config: "parseTime=True"}, "new-key"); err != nil {
t.Fatal(err)
}
raw, err := os.ReadFile(configPath)
if err != nil {
t.Fatal(err)
}
var value map[string]any
if err = yaml.Unmarshal(raw, &value); err != nil {
t.Fatal(err)
}
admin := value["admin"].(map[string]any)
jwt := admin["jwt"].(map[string]any)
if jwt["signing_key"] != "new-key" || jwt["issuer"] != "kra" {
t.Fatalf("unexpected jwt config: %#v", jwt)
}
dataConfig := value["data"].(map[string]any)
database := dataConfig["database"].(map[string]any)
if database["name"] != "kra" || database["password"] != "secret" {
t.Fatalf("unexpected database config: %#v", database)
}
if _, ok := dataConfig["redis"]; !ok {
t.Fatalf("redis config was removed: %#v", dataConfig)
}
if _, ok := value["extension"]; !ok || !strings.Contains(string(raw), "preserved: true") {
t.Fatalf("extension config was removed: %s", raw)
}
}