Skip to content

Commit

Permalink
Allow Drive Letters on mounts for windows (#115)
Browse files Browse the repository at this point in the history
  • Loading branch information
ajnavarro committed Dec 21, 2021
1 parent 762fead commit 4b29ce6
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 3 deletions.
9 changes: 6 additions & 3 deletions fuse/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@ func (s *Handler) Mount(fss map[string]fs.Filesystem) error {
if runtime.GOOS == "windows" {
folder = filepath.Dir(s.path)
}
if err := os.MkdirAll(folder, 0744); err != nil && !os.IsExist(err) {
return err

if filepath.VolumeName(folder) == "" {
if err := os.MkdirAll(folder, 0744); err != nil && !os.IsExist(err) {
return err
}
}

cfs, err := fs.NewContainerFs(fss)
Expand All @@ -57,7 +60,7 @@ func (s *Handler) Mount(fss map[string]fs.Filesystem) error {

s.host = host

log.Info().Str("path", folder).Msg("starting FUSE mount")
log.Info().Str("path", s.path).Msg("starting FUSE mount")

return nil
}
Expand Down
68 changes: 68 additions & 0 deletions fuse/mount_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package fuse

import (
"os"
"path/filepath"
"runtime"
"testing"
"time"

"github.com/distribyted/distribyted/fs"
"github.com/stretchr/testify/require"
)

func TestHandler(t *testing.T) {
if runtime.GOOS != "windows" {
t.Skip("test for windows only")
}

require := require.New(t)

p := "./testmnt"

h := NewHandler(false, p)

mem := fs.NewMemory()

err := mem.Storage.Add(fs.NewMemoryFile([]byte("test")), "/test.txt")
require.NoError(err)

err = h.Mount(map[string]fs.Filesystem{"/mem": mem})
require.NoError(err)

time.Sleep(5 * time.Second)

fi, err := os.Stat(filepath.Join(p, "mem", "test.txt"))
require.NoError(err)

require.False(fi.IsDir())
require.Equal(int64(4), fi.Size())
}

func TestHandlerDriveLetter(t *testing.T) {
if runtime.GOOS != "windows" {
t.Skip("test for windows only")
}

require := require.New(t)

p := "Z:"

h := NewHandler(false, p)

mem := fs.NewMemory()

err := mem.Storage.Add(fs.NewMemoryFile([]byte("test")), "/test.txt")
require.NoError(err)

err = h.Mount(map[string]fs.Filesystem{"/mem": mem})
require.NoError(err)

time.Sleep(5 * time.Second)

fi, err := os.Stat(filepath.Join(p, "mem", "test.txt"))
require.NoError(err)

require.False(fi.IsDir())
require.Equal(int64(4), fi.Size())
}

0 comments on commit 4b29ce6

Please sign in to comment.