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  }