56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
// SPDX-License-Identifier: MIT
|
|||
|
|
|
||
|
|
package fsx
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestWriteFileAtomicCreatesAndReplaces(t *testing.T) {
|
||
|
|
dir := t.TempDir()
|
||
|
|
path := filepath.Join(dir, "nested", "file.json")
|
||
|
|
|
||
|
|
if err := WriteFileAtomic(path, []byte("first"), 0o600); err != nil {
|
||
|
|
t.Fatalf("WriteFileAtomic: %v", err)
|
||
|
|
}
|
||
|
|
got, err := os.ReadFile(path)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("ReadFile: %v", err)
|
||
|
|
}
|
||
|
|
if string(got) != "first" {
|
||
|
|
t.Fatalf("content = %q, want %q", got, "first")
|
||
|
|
}
|
||
|
|
info, err := os.Stat(path)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Stat: %v", err)
|
||
|
|
}
|
||
|
|
if info.Mode().Perm() != 0o600 {
|
||
|
|
t.Fatalf("perm = %o, want 600", info.Mode().Perm())
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := WriteFileAtomic(path, []byte("second"), 0o600); err != nil {
|
||
|
|
t.Fatalf("second WriteFileAtomic: %v", err)
|
||
|
|
}
|
||
|
|
got, _ = os.ReadFile(path)
|
||
|
|
if string(got) != "second" {
|
||
|
|
t.Fatalf("content = %q, want %q", got, "second")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestWriteFileAtomicLeavesNoTempFiles(t *testing.T) {
|
||
|
|
dir := t.TempDir()
|
||
|
|
path := filepath.Join(dir, "state.json")
|
||
|
|
if err := WriteFileAtomic(path, []byte("x"), 0o644); err != nil {
|
||
|
|
t.Fatalf("WriteFileAtomic: %v", err)
|
||
|
|
}
|
||
|
|
entries, err := os.ReadDir(dir)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("ReadDir: %v", err)
|
||
|
|
}
|
||
|
|
if len(entries) != 1 || entries[0].Name() != "state.json" {
|
||
|
|
t.Fatalf("unexpected directory contents: %v", entries)
|
||
|
|
}
|
||
|
|
}
|