atomicwrite_test.go

 1package config
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"runtime"
 7	"testing"
 8
 9	"github.com/stretchr/testify/require"
10)
11
12func TestAtomicWriteFile(t *testing.T) {
13	t.Parallel()
14	dir := t.TempDir()
15	path := filepath.Join(dir, "test.json")
16
17	require.NoError(t, atomicWriteFile(path, []byte(`{"key":"value"}`), 0o600))
18
19	data, err := os.ReadFile(path)
20	require.NoError(t, err)
21	require.Equal(t, `{"key":"value"}`, string(data))
22
23	// No temp files should linger.
24	entries, err := os.ReadDir(dir)
25	require.NoError(t, err)
26	require.Len(t, entries, 1)
27	require.Equal(t, "test.json", entries[0].Name())
28}
29
30func TestAtomicWriteFile_PermissionsApplied(t *testing.T) {
31	if runtime.GOOS == "windows" {
32		t.Skip("Windows does not support Unix file permissions")
33	}
34	t.Parallel()
35	dir := t.TempDir()
36	path := filepath.Join(dir, "test.json")
37
38	require.NoError(t, atomicWriteFile(path, []byte(`{}`), 0o600))
39
40	info, err := os.Stat(path)
41	require.NoError(t, err)
42	require.Equal(t, os.FileMode(0o600), info.Mode().Perm())
43}