Files
prx/internal/fsx/fsx_test.go
T

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)
}
}