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  }