utimes_unix_test.go 1.4 KB

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