package ioutils import ( "bytes" "io/ioutil" "os" "path/filepath" "testing" ) func TestAtomicWriteToFile(t *testing.T) { tmpDir, err := ioutil.TempDir("", "atomic-writers-test") if err != nil { t.Fatalf("Error when creating temporary directory: %s", err) } defer os.RemoveAll(tmpDir) expected := []byte("barbaz") if err := AtomicWriteFile(filepath.Join(tmpDir, "foo"), expected, 0666); err != nil { t.Fatalf("Error writing to file: %v", err) } actual, err := ioutil.ReadFile(filepath.Join(tmpDir, "foo")) if err != nil { t.Fatalf("Error reading from file: %v", err) } if bytes.Compare(actual, expected) != 0 { t.Fatalf("Data mismatch, expected %q, got %q", expected, actual) } st, err := os.Stat(filepath.Join(tmpDir, "foo")) if err != nil { t.Fatalf("Error statting file: %v", err) } if expected := os.FileMode(0666); st.Mode() != expected { t.Fatalf("Mode mismatched, expected %o, got %o", expected, st.Mode()) } }