From a5d70e373ccad0aadf79811040c5f676b7ffd558 Mon Sep 17 00:00:00 2001 From: Yannick Ulrich Date: Sun, 19 Feb 2023 14:23:04 +0000 Subject: [PATCH] Implemented mocks --- fuse/mock.go | 87 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 23 deletions(-) diff --git a/fuse/mock.go b/fuse/mock.go index 17af7d0..9487758 100644 --- a/fuse/mock.go +++ b/fuse/mock.go @@ -1,9 +1,15 @@ package main import ( - "io/fs" + "os" + "io/ioutil" "errors" ) +const ( + FSStatusOk = 0x01 + FSStatusError = 0x02 +) + var ( ErrFileNotExists = errors.New("file does not exist") ErrFileReadOnly = errors.New("file is read only") @@ -20,18 +26,20 @@ type Device struct { type FS struct { } +type DirEntry struct { + status int8 + flags uint32 + modtime uint64 + size uint32 + path string +} type File struct { fs *FS path string - offset uint32 - offsetCh chan uint32 - length uint32 - amtLeft uint32 - amtTferd uint32 + fp *os.File isReadOnly bool isWriteOnly bool - offsetChanged bool } @@ -66,41 +74,74 @@ func (i *Device) Version() (string, error) { return "1.11.0", nil } -func (blefs *FS) ReadDir(path string) ([]fs.DirEntry, error) { - var out []fs.DirEntry +func (blefs *FS) ReadDir(path string) ([]DirEntry, error) { + var out []DirEntry + files, err := ioutil.ReadDir("./root/" + path) + + if err != nil { + return nil, nil + } + + for _, f := range files { + listing := DirEntry{} + listing.status = FSStatusOk + listing.modtime = uint64(f.ModTime().Unix()) + listing.size = uint32(f.Size()) + listing.path = path + "/" + f.Name() + if f.IsDir() { + listing.flags = 1; + } else { + listing.flags = 0; + } + out = append(out, listing) + } return out, nil } func (blefs *FS) Mkdir(path string) error { - return nil -} - -func (blefs *FS) Stat(path string) (fs.FileInfo, error) { - return nil, ErrFileNotExists + return os.Mkdir("./root/" + path, os.ModePerm) } func (blefs *FS) Rename(old, new string) error { - return nil + return os.Rename("./root/" + old, "./root/" + new) } func (blefs *FS) Remove(path string) error { - return nil + return os.Remove("./root/" + path) } func (blefs *FS) Open(path string) (*File, error) { - return &File{}, nil + fp, _ := os.Open("./root/" + path) + return &File{ + fs : blefs, + path : path, + fp : fp, + isReadOnly : true, + isWriteOnly : false, + }, nil } func (blefs *FS) Create(path string, size uint32) (*File, error) { - return &File{}, nil + fp, _ := os.Create("./root/" + path) + return &File{ + fs : blefs, + path : path, + fp : fp, + isReadOnly : false, + isWriteOnly : true, + }, nil } func (fl *File) Read(b []byte) (n int, err error) { - return 0, ErrFileWriteOnly + if fl.isWriteOnly { + return 0, ErrFileWriteOnly + } + return fl.fp.Read(b) } func (fl *File) Write(b []byte) (n int, err error) { - return 0, ErrFileWriteOnly + if fl.isReadOnly { + return 0, ErrFileReadOnly + } + return fl.fp.Write(b) } func (fl *File) Close() error { - return nil + return fl.fp.Close() } -// func (fl *File) Stat() (fs.FileInfo, error) { -// }