utimes_unix_test.go 1.5 KB

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