github.com/ncw/rclone@v1.48.1-0.20190724201158-a35aa1360e3e/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 // TestFileModTimeWithOpenWriters tests mod time on open files 38 func TestFileModTimeWithOpenWriters(t *testing.T) { 39 run.skipIfNoFUSE(t) 40 if runtime.GOOS == "windows" { 41 t.Skip("Skipping test on Windows") 42 } 43 44 mtime := time.Date(2012, time.November, 18, 17, 32, 31, 0, time.UTC) 45 filepath := run.path("cp-archive-test") 46 47 f, err := osCreate(filepath) 48 require.NoError(t, err) 49 50 _, err = f.Write([]byte{104, 105}) 51 require.NoError(t, err) 52 53 err = os.Chtimes(filepath, mtime, mtime) 54 require.NoError(t, err) 55 56 err = f.Close() 57 require.NoError(t, err) 58 59 run.waitForWriters() 60 61 info, err := os.Stat(filepath) 62 require.NoError(t, err) 63 64 // avoid errors because of timezone differences 65 assert.Equal(t, info.ModTime().Unix(), mtime.Unix()) 66 67 run.rm(t, "cp-archive-test") 68 }