github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/vfs/vfstest/os.go (about) 1 package vfstest 2 3 import ( 4 "io/ioutil" 5 "os" 6 "time" 7 8 "github.com/rclone/rclone/lib/file" 9 "github.com/rclone/rclone/vfs" 10 ) 11 12 // Oser defines the things that the "os" package can do 13 // 14 // This covers what the VFS can do also 15 type Oser interface { 16 Chtimes(name string, atime time.Time, mtime time.Time) error 17 Create(name string) (vfs.Handle, error) 18 Mkdir(name string, perm os.FileMode) error 19 Open(name string) (vfs.Handle, error) 20 OpenFile(name string, flags int, perm os.FileMode) (fd vfs.Handle, err error) 21 ReadDir(dirname string) ([]os.FileInfo, error) 22 ReadFile(filename string) (b []byte, err error) 23 Remove(name string) error 24 Rename(oldName, newName string) error 25 Stat(path string) (os.FileInfo, error) 26 } 27 28 // realOs is an implementation of Oser backed by the "os" package 29 type realOs struct { 30 } 31 32 // realOsFile is an implementation of vfs.Handle 33 type realOsFile struct { 34 *os.File 35 } 36 37 // Flush 38 func (f realOsFile) Flush() error { 39 return nil 40 } 41 42 // Release 43 func (f realOsFile) Release() error { 44 return f.File.Close() 45 } 46 47 // Node 48 func (f realOsFile) Node() vfs.Node { 49 return nil 50 } 51 52 // Chtimes 53 func (r realOs) Chtimes(name string, atime time.Time, mtime time.Time) error { 54 return os.Chtimes(name, atime, mtime) 55 } 56 57 // Create 58 func (r realOs) Create(name string) (vfs.Handle, error) { 59 fd, err := file.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) 60 if err != nil { 61 return nil, err 62 } 63 return realOsFile{File: fd}, err 64 } 65 66 // Mkdir 67 func (r realOs) Mkdir(name string, perm os.FileMode) error { 68 return os.Mkdir(name, perm) 69 } 70 71 // Open 72 func (r realOs) Open(name string) (vfs.Handle, error) { 73 fd, err := os.Open(name) 74 if err != nil { 75 return nil, err 76 } 77 return realOsFile{File: fd}, err 78 } 79 80 // OpenFile 81 func (r realOs) OpenFile(name string, flags int, perm os.FileMode) (vfs.Handle, error) { 82 fd, err := file.OpenFile(name, flags, perm) 83 if err != nil { 84 return nil, err 85 } 86 return realOsFile{File: fd}, err 87 } 88 89 // ReadDir 90 func (r realOs) ReadDir(dirname string) ([]os.FileInfo, error) { 91 return ioutil.ReadDir(dirname) 92 } 93 94 // ReadFile 95 func (r realOs) ReadFile(filename string) (b []byte, err error) { 96 return ioutil.ReadFile(filename) 97 } 98 99 // Remove 100 func (r realOs) Remove(name string) error { 101 return os.Remove(name) 102 } 103 104 // Rename 105 func (r realOs) Rename(oldName, newName string) error { 106 return os.Rename(oldName, newName) 107 } 108 109 // Stat 110 func (r realOs) Stat(path string) (os.FileInfo, error) { 111 return os.Stat(path) 112 } 113 114 // Check interfaces 115 var _ Oser = &realOs{} 116 var _ vfs.Handle = &realOsFile{}