master
go 92 lines 2.1 KB
Raw
1 package fsutil_test
2
3 import (
4 "io/fs"
5 "os"
6 "path/filepath"
7 "runtime"
8 "testing"
9
10 "github.com/ipfs/kubo/misc/fsutil"
11 "github.com/stretchr/testify/require"
12 )
13
14 func TestDirWritable(t *testing.T) {
15 err := fsutil.DirWritable("")
16 require.Error(t, err)
17
18 err = fsutil.DirWritable("~nosuchuser/tmp")
19 require.Error(t, err)
20
21 tmpDir := t.TempDir()
22
23 wrDir := filepath.Join(tmpDir, "readwrite")
24 err = fsutil.DirWritable(wrDir)
25 require.NoError(t, err)
26
27 // Check that DirWritable created directory.
28 fi, err := os.Stat(wrDir)
29 require.NoError(t, err)
30 require.True(t, fi.IsDir())
31
32 err = fsutil.DirWritable(wrDir)
33 require.NoError(t, err)
34
35 // If running on Windows, skip read-only directory tests.
36 if runtime.GOOS == "windows" {
37 t.SkipNow()
38 }
39
40 roDir := filepath.Join(tmpDir, "readonly")
41 require.NoError(t, os.Mkdir(roDir, 0500))
42 err = fsutil.DirWritable(roDir)
43 require.ErrorIs(t, err, fs.ErrPermission)
44
45 roChild := filepath.Join(roDir, "child")
46 err = fsutil.DirWritable(roChild)
47 require.ErrorIs(t, err, fs.ErrPermission)
48 }
49
50 func TestFileExists(t *testing.T) {
51 fileName := filepath.Join(t.TempDir(), "somefile")
52 require.False(t, fsutil.FileExists(fileName))
53
54 file, err := os.Create(fileName)
55 require.NoError(t, err)
56 file.Close()
57
58 require.True(t, fsutil.FileExists(fileName))
59 }
60
61 func TestExpandHome(t *testing.T) {
62 dir, err := fsutil.ExpandHome("")
63 require.NoError(t, err)
64 require.Equal(t, "", dir)
65
66 origDir := filepath.Join("somedir", "somesub")
67 dir, err = fsutil.ExpandHome(origDir)
68 require.NoError(t, err)
69 require.Equal(t, origDir, dir)
70
71 _, err = fsutil.ExpandHome(filepath.FromSlash("~nosuchuser/somedir"))
72 require.Error(t, err)
73
74 homeEnv := "HOME"
75 if runtime.GOOS == "windows" {
76 homeEnv = "USERPROFILE"
77 }
78 origHome := os.Getenv(homeEnv)
79 defer os.Setenv(homeEnv, origHome)
80 homeDir := filepath.Join(t.TempDir(), "testhome")
81 os.Setenv(homeEnv, homeDir)
82
83 const subDir = "mytmp"
84 origDir = filepath.Join("~", subDir)
85 dir, err = fsutil.ExpandHome(origDir)
86 require.NoError(t, err)
87 require.Equal(t, filepath.Join(homeDir, subDir), dir)
88
89 os.Unsetenv(homeEnv)
90 _, err = fsutil.ExpandHome(origDir)
91 require.Error(t, err)
92 }