github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/sysfs/unlink_test.go (about) 1 package sysfs 2 3 import ( 4 "os" 5 "path" 6 "testing" 7 8 "github.com/wasilibs/wazerox/experimental/sys" 9 "github.com/wasilibs/wazerox/internal/testing/require" 10 ) 11 12 func TestUnlink(t *testing.T) { 13 t.Run("doesn't exist", func(t *testing.T) { 14 name := "non-existent" 15 errno := unlink(name) 16 require.EqualErrno(t, sys.ENOENT, errno) 17 }) 18 19 t.Run("target: dir", func(t *testing.T) { 20 tmpDir := t.TempDir() 21 22 dir := path.Join(tmpDir, "dir") 23 require.NoError(t, os.Mkdir(dir, 0o700)) 24 25 errno := unlink(dir) 26 require.EqualErrno(t, sys.EISDIR, errno) 27 28 require.NoError(t, os.Remove(dir)) 29 }) 30 31 t.Run("target: symlink to dir", func(t *testing.T) { 32 tmpDir := t.TempDir() 33 34 // Create link target dir. 35 subDirRealPath := path.Join(tmpDir, "subdir") 36 require.NoError(t, os.Mkdir(subDirRealPath, 0o700)) 37 38 // Create a symlink to the subdirectory. 39 const symlinkName = "symlink-to-dir" 40 require.NoError(t, os.Symlink("subdir", symlinkName)) 41 42 // Unlinking the symlink should suceed. 43 errno := unlink(symlinkName) 44 require.EqualErrno(t, 0, errno) 45 }) 46 47 t.Run("file exists", func(t *testing.T) { 48 tmpDir := t.TempDir() 49 50 name := path.Join(tmpDir, "unlink") 51 52 require.NoError(t, os.WriteFile(name, []byte{}, 0o600)) 53 54 require.EqualErrno(t, 0, unlink(name)) 55 _, err := os.Stat(name) 56 require.Error(t, err) 57 }) 58 }