Files
ClusterCanvas/service/internal/settings/settings_test.go
T

153 lines
3.3 KiB
Go

package settings
import (
"encoding/base64"
"os"
"path/filepath"
"testing"
)
func TestResolveDirDefault(t *testing.T) {
t.Setenv(ConfigDirEnvVar, "")
resolved, err := ResolveDir("")
if err != nil {
t.Fatalf("ResolveDir: %v", err)
}
if resolved != DefaultConfigDir {
t.Fatalf("got %q, want %q", resolved, DefaultConfigDir)
}
}
func TestResolveDirFlagOverridesEnv(t *testing.T) {
tempDir := t.TempDir()
flagDir := filepath.Join(tempDir, "from-flag")
envDir := filepath.Join(tempDir, "from-env")
t.Setenv(ConfigDirEnvVar, envDir)
resolved, err := ResolveDir(flagDir)
if err != nil {
t.Fatalf("ResolveDir: %v", err)
}
if resolved != flagDir {
t.Fatalf("got %q, want flag dir %q", resolved, flagDir)
}
}
func TestResolveDirEnvOverridesDefault(t *testing.T) {
tempDir := t.TempDir()
envDir := filepath.Join(tempDir, "from-env")
t.Setenv(ConfigDirEnvVar, envDir)
resolved, err := ResolveDir("")
if err != nil {
t.Fatalf("ResolveDir: %v", err)
}
if resolved != envDir {
t.Fatalf("got %q, want env dir %q", resolved, envDir)
}
}
func TestResolveDirExpandsTilde(t *testing.T) {
homeDirectory, err := os.UserHomeDir()
if err != nil {
t.Fatalf("UserHomeDir: %v", err)
}
t.Setenv(ConfigDirEnvVar, "")
resolved, err := ResolveDir("~/myconfigs")
if err != nil {
t.Fatalf("ResolveDir: %v", err)
}
want := filepath.Join(homeDirectory, "myconfigs")
if resolved != want {
t.Fatalf("got %q, want %q", resolved, want)
}
}
func TestSettingsRoundTrip(t *testing.T) {
dir := t.TempDir()
original := Settings{LogLevel: "debug"}
if err := SaveSettings(dir, original); err != nil {
t.Fatalf("SaveSettings: %v", err)
}
loaded, err := LoadSettings(dir)
if err != nil {
t.Fatalf("LoadSettings: %v", err)
}
if loaded.LogLevel != original.LogLevel {
t.Fatalf("got log_level %q, want %q", loaded.LogLevel, original.LogLevel)
}
}
func testKey(t *testing.T) []byte {
t.Helper()
key := make([]byte, 32)
for index := range key {
key[index] = byte(index + 1)
}
return key
}
func TestSecretsRoundTrip(t *testing.T) {
dir := t.TempDir()
key := testKey(t)
original := Secrets{}
if err := SaveSecrets(dir, original, key); err != nil {
t.Fatalf("SaveSecrets: %v", err)
}
loaded, err := LoadSecrets(dir, key)
if err != nil {
t.Fatalf("LoadSecrets: %v", err)
}
_ = loaded
}
func TestSecretsWrongKeyFails(t *testing.T) {
dir := t.TempDir()
goodKey := testKey(t)
if err := SaveSecrets(dir, Secrets{}, goodKey); err != nil {
t.Fatalf("SaveSecrets: %v", err)
}
badKey := make([]byte, 32)
for index := range badKey {
badKey[index] = 0xff
}
if _, err := LoadSecrets(dir, badKey); err == nil {
t.Fatal("expected decrypt failure with wrong key")
}
}
func TestKeyFromEnvMissing(t *testing.T) {
t.Setenv(ConfigKeyEnvVar, "")
if _, err := KeyFromEnv(); err == nil {
t.Fatal("expected error when key env is unset")
}
}
func TestKeyFromEnvValid(t *testing.T) {
key := testKey(t)
t.Setenv(ConfigKeyEnvVar, base64.StdEncoding.EncodeToString(key))
decoded, err := KeyFromEnv()
if err != nil {
t.Fatalf("KeyFromEnv: %v", err)
}
if len(decoded) != 32 {
t.Fatalf("got key length %d, want 32", len(decoded))
}
}
func TestKeyFromEnvInvalidLength(t *testing.T) {
t.Setenv(ConfigKeyEnvVar, base64.StdEncoding.EncodeToString([]byte("short")))
if _, err := KeyFromEnv(); err == nil {
t.Fatal("expected error for invalid key length")
}
}