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{}