github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/pkg/system/utimes_unix_test.go (about) 1 //go:build linux || freebsd 2 3 package system // import "github.com/Prakhar-Agarwal-byte/moby/pkg/system" 4 5 import ( 6 "os" 7 "path/filepath" 8 "syscall" 9 "testing" 10 ) 11 12 // prepareFiles creates files for testing in the temp directory 13 func prepareFiles(t *testing.T) (file, invalid, symlink string) { 14 t.Helper() 15 dir := t.TempDir() 16 17 file = filepath.Join(dir, "exist") 18 if err := os.WriteFile(file, []byte("hello"), 0o644); err != nil { 19 t.Fatal(err) 20 } 21 22 invalid = filepath.Join(dir, "doesnt-exist") 23 symlink = filepath.Join(dir, "symlink") 24 if err := os.Symlink(file, symlink); err != nil { 25 t.Fatal(err) 26 } 27 28 return file, invalid, symlink 29 } 30 31 func TestLUtimesNano(t *testing.T) { 32 file, invalid, symlink := prepareFiles(t) 33 34 before, err := os.Stat(file) 35 if err != nil { 36 t.Fatal(err) 37 } 38 39 ts := []syscall.Timespec{{Sec: 0, Nsec: 0}, {Sec: 0, Nsec: 0}} 40 if err := LUtimesNano(symlink, ts); err != nil { 41 t.Fatal(err) 42 } 43 44 symlinkInfo, err := os.Lstat(symlink) 45 if err != nil { 46 t.Fatal(err) 47 } 48 if before.ModTime().Unix() == symlinkInfo.ModTime().Unix() { 49 t.Fatal("The modification time of the symlink should be different") 50 } 51 52 fileInfo, err := os.Stat(file) 53 if err != nil { 54 t.Fatal(err) 55 } 56 if before.ModTime().Unix() != fileInfo.ModTime().Unix() { 57 t.Fatal("The modification time of the file should be same") 58 } 59 60 if err := LUtimesNano(invalid, ts); err == nil { 61 t.Fatal("Doesn't return an error on a non-existing file") 62 } 63 }