github.com/xhghs/rclone@v1.51.1-0.20200430155106-e186a28cced8/cmd/mountlib/mounttest/file.go (about) 1 package mounttest 2 3 import ( 4 "os" 5 "runtime" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 // TestFileModTime tests mod times on files 14 func TestFileModTime(t *testing.T) { 15 run.skipIfNoFUSE(t) 16 17 run.createFile(t, "file", "123") 18 19 mtime := time.Date(2012, time.November, 18, 17, 32, 31, 0, time.UTC) 20 err := os.Chtimes(run.path("file"), mtime, mtime) 21 require.NoError(t, err) 22 23 info, err := os.Stat(run.path("file")) 24 require.NoError(t, err) 25 26 // avoid errors because of timezone differences 27 assert.Equal(t, info.ModTime().Unix(), mtime.Unix()) 28 29 run.rm(t, "file") 30 } 31 32 // os.Create without opening for write too 33 func osCreate(name string) (*os.File, error) { 34 return os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) 35 } 36 37 // os.Create with append 38 func osAppend(name string) (*os.File, error) { 39 return os.OpenFile(name, os.O_WRONLY|os.O_APPEND, 0666) 40 } 41 42 // TestFileModTimeWithOpenWriters tests mod time on open files 43 func TestFileModTimeWithOpenWriters(t *testing.T) { 44 run.skipIfNoFUSE(t) 45 if runtime.GOOS == "windows" { 46 t.Skip("Skipping test on Windows") 47 } 48 49 mtime := time.Date(2012, time.November, 18, 17, 32, 31, 0, time.UTC) 50 filepath := run.path("cp-archive-test") 51 52 f, err := osCreate(filepath) 53 require.NoError(t, err) 54 55 _, err = f.Write([]byte{104, 105}) 56 require.NoError(t, err) 57 58 err = os.Chtimes(filepath, mtime, mtime) 59 require.NoError(t, err) 60 61 err = f.Close() 62 require.NoError(t, err) 63 64 run.waitForWriters() 65 66 info, err := os.Stat(filepath) 67 require.NoError(t, err) 68 69 // avoid errors because of timezone differences 70 assert.Equal(t, info.ModTime().Unix(), mtime.Unix()) 71 72 run.rm(t, "cp-archive-test") 73 }