package configgen import ( "os" "path/filepath" "testing" ) func TestAtomicWrite_CreatesAndChmods(t *testing.T) { dir := t.TempDir() target := filepath.Join(dir, "sub", "out.conf") data := []byte("hello config\n") if err := AtomicWrite(target, data, 0o644); err != nil { t.Fatalf("AtomicWrite: %v", err) } got, err := os.ReadFile(target) if err != nil { t.Fatalf("read back: %v", err) } if string(got) != string(data) { t.Errorf("content mismatch: %q", got) } st, err := os.Stat(target) if err != nil { t.Fatalf("stat: %v", err) } if st.Mode().Perm() != 0o644 { t.Errorf("mode: %v", st.Mode().Perm()) } } func TestAtomicWrite_OverwritesExisting(t *testing.T) { dir := t.TempDir() target := filepath.Join(dir, "out.conf") if err := os.WriteFile(target, []byte("old\n"), 0o600); err != nil { t.Fatalf("seed: %v", err) } if err := AtomicWrite(target, []byte("new\n"), 0o640); err != nil { t.Fatalf("AtomicWrite: %v", err) } got, _ := os.ReadFile(target) if string(got) != "new\n" { t.Errorf("expected 'new\\n', got %q", got) } st, _ := os.Stat(target) if st.Mode().Perm() != 0o640 { t.Errorf("mode: %v", st.Mode().Perm()) } } func TestAtomicWrite_NoTempLeak(t *testing.T) { dir := t.TempDir() target := filepath.Join(dir, "out.conf") if err := AtomicWrite(target, []byte("x"), 0o644); err != nil { t.Fatalf("AtomicWrite: %v", err) } entries, _ := os.ReadDir(dir) for _, e := range entries { if e.Name() != "out.conf" { t.Errorf("unexpected leftover: %s", e.Name()) } } }