Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBHF4R9EAejDJUMdwr6C68
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestServeRejectsMissingConfig(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
code := runServe([]string{"--config", "/gibt/es/nicht.yaml"}, &out, &errOut)
|
|
if code == 0 {
|
|
t.Fatal("fehlende Config muss zum Abbruch führen")
|
|
}
|
|
if !strings.Contains(errOut.String(), "nicht.yaml") {
|
|
t.Errorf("Fehlermeldung muss den Pfad nennen: %q", errOut.String())
|
|
}
|
|
}
|
|
|
|
func TestServeRejectsLooseConfigPermissions(t *testing.T) {
|
|
dir := t.TempDir()
|
|
p := filepath.Join(dir, "config.yaml")
|
|
os.WriteFile(p, []byte("portal:\n listen: \"127.0.0.1:0\"\n"), 0o644)
|
|
os.Chmod(p, 0o644)
|
|
|
|
var out, errOut bytes.Buffer
|
|
if code := runServe([]string{"--config", p}, &out, &errOut); code == 0 {
|
|
t.Fatal("zu offene Dateirechte müssen den Start verhindern")
|
|
}
|
|
if !strings.Contains(errOut.String(), "chmod") {
|
|
t.Errorf("Fehlermeldung sollte den Reparaturbefehl nennen: %q", errOut.String())
|
|
}
|
|
}
|
|
|
|
func TestCheckRejectsUnknownConfigField(t *testing.T) {
|
|
dir := t.TempDir()
|
|
p := filepath.Join(dir, "config.yaml")
|
|
os.WriteFile(p, []byte("portal:\n tls_cert_typo: \"x\"\n"), 0o600)
|
|
os.Chmod(p, 0o600)
|
|
|
|
var out, errOut bytes.Buffer
|
|
code := runCheck([]string{"--config", p}, &out, &errOut)
|
|
if code == 0 {
|
|
t.Fatal("Tippfehler in der Config muss zum Abbruch führen")
|
|
}
|
|
combined := out.String() + errOut.String()
|
|
if !strings.Contains(combined, "tls_cert_typo") {
|
|
t.Errorf("das unbekannte Feld muss genannt werden: %q", combined)
|
|
}
|
|
}
|
|
|
|
func TestConfigChecksumIsStable(t *testing.T) {
|
|
dir := t.TempDir()
|
|
p := filepath.Join(dir, "config.yaml")
|
|
os.WriteFile(p, []byte("inhalt"), 0o600)
|
|
os.Chmod(p, 0o600)
|
|
|
|
a, err := configChecksum(p)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
b, _ := configChecksum(p)
|
|
if a != b || a == "" {
|
|
t.Fatalf("Prüfsumme instabil: %q vs %q", a, b)
|
|
}
|
|
if len(a) != 12 {
|
|
t.Errorf("Prüfsumme sollte gekürzt sein (12 Zeichen), ist %d", len(a))
|
|
}
|
|
|
|
os.WriteFile(p, []byte("anderer inhalt"), 0o600)
|
|
if c, _ := configChecksum(p); c == a {
|
|
t.Error("geänderte Datei muss eine andere Prüfsumme ergeben")
|
|
}
|
|
}
|
|
|
|
func TestNewTLSConfigRejectsMissingFiles(t *testing.T) {
|
|
if _, err := newTLSConfig("/nix.crt", "/nix.key"); err == nil {
|
|
t.Fatal("fehlende Zertifikatsdateien müssen abgelehnt werden")
|
|
}
|
|
}
|