package state import ( "os" "path/filepath" "testing" ) // The test is on write itself: a state file is read before it is // written, and a directory in its place fails that read first. func TestFailedRenameLeavesNoTemporaryFile(t *testing.T) { t.Parallel() dir := t.TempDir() // A directory named bans.json cannot be renamed over. err := os.Mkdir(filepath.Join(dir, bansJSON), 0o700) if err != nil { t.Fatalf("mkdir: %v", err) } err = write(dir, bansJSON, []byte("{}\n")) if err == nil { t.Error("writing over a directory did not fail") } entries, err := os.ReadDir(dir) if err != nil { t.Fatalf("read %s: %v", dir, err) } if len(entries) != 1 || entries[0].Name() != bansJSON { t.Errorf("%s holds %v, want only bans.json", dir, entries) } }