59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package safeio
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestAtomicWriteFileWritesContentAndReplacesExisting(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "data.txt")
|
|
|
|
// Write initial content.
|
|
if err := os.WriteFile(path, []byte("old"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Atomic replace.
|
|
if err := AtomicWriteFile(path, []byte("new"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
got, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(got) != "new" {
|
|
t.Fatalf("content = %q, want %q", string(got), "new")
|
|
}
|
|
|
|
// No temp files left behind.
|
|
entries, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, e := range entries {
|
|
if e.Name() != "data.txt" {
|
|
t.Fatalf("unexpected file in directory: %s", e.Name())
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAtomicWriteFileCreatesParentDirs(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "sub", "dir", "file.txt")
|
|
|
|
if err := AtomicWriteFile(path, []byte("hello"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
got, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(got) != "hello" {
|
|
t.Fatalf("content = %q, want %q", string(got), "hello")
|
|
}
|
|
}
|