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}