Files
Felis/cmd/felis/setup_test.go
T
2026-06-29 20:17:17 +08:00

89 lines
2.5 KiB
Go

package main
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestSetupConfigPathPrefersGeneratedHostConfig(t *testing.T) {
dir := t.TempDir()
requested := filepath.Join(dir, "felis.toml")
host := filepath.Join(dir, "felis.host.toml")
if got := setupConfigPathFor(requested, host, false); got != requested {
t.Fatalf("without host config: got %q, want requested %q", got, requested)
}
if err := os.WriteFile(host, []byte("host"), 0o644); err != nil {
t.Fatal(err)
}
if got := setupConfigPathFor(requested, host, false); got != host {
t.Fatalf("with host config: got %q, want host %q", got, host)
}
if got := setupConfigPathFor(requested, host, true); got != requested {
t.Fatalf("explicit config: got %q, want requested %q", got, requested)
}
}
func TestEnsureDefaultConfigLinkBacksUpStaleDefault(t *testing.T) {
dir := t.TempDir()
target := filepath.Join(dir, "felis.toml")
host := filepath.Join(dir, "felis.host.toml")
if err := os.WriteFile(target, []byte("old"), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(host, []byte("host"), 0o644); err != nil {
t.Fatal(err)
}
if err := ensureDefaultConfigLink(target, host); err != nil {
t.Fatal(err)
}
link, err := os.Readlink(target)
if err != nil {
t.Fatal(err)
}
if link != host {
t.Fatalf("default config link = %q, want %q", link, host)
}
entries, err := os.ReadDir(dir)
if err != nil {
t.Fatal(err)
}
foundBackup := false
for _, e := range entries {
foundBackup = foundBackup || strings.HasPrefix(e.Name(), "felis.toml.bak.")
}
if !foundBackup {
t.Fatal("stale default config was not backed up")
}
}
func TestHostBootstrapReadyRequiresMarkerAndArtifacts(t *testing.T) {
dir := t.TempDir()
marker := filepath.Join(dir, "bootstrap.done")
hostConfig := filepath.Join(dir, "felis.host.toml")
hostBin := filepath.Join(dir, "felis")
kubeconfig := filepath.Join(dir, "k3s.yaml")
if err := os.WriteFile(marker, []byte("done"), 0o644); err != nil {
t.Fatal(err)
}
if hostBootstrapReady(marker, hostConfig, hostBin, kubeconfig) {
t.Fatal("bootstrap should not be ready with marker only")
}
for _, path := range []string{hostConfig, kubeconfig} {
if err := os.WriteFile(path, []byte("ok"), 0o644); err != nil {
t.Fatal(err)
}
}
if err := os.WriteFile(hostBin, []byte("bin"), 0o755); err != nil {
t.Fatal(err)
}
if !hostBootstrapReady(marker, hostConfig, hostBin, kubeconfig) {
t.Fatal("bootstrap should be ready when marker and host artifacts exist")
}
}