chtimes_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package system
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "time"
  8. )
  9. // prepareTempFile creates a temporary file in a temporary directory.
  10. func prepareTempFile(t *testing.T) (string, string) {
  11. dir, err := ioutil.TempDir("", "docker-system-test")
  12. if err != nil {
  13. t.Fatal(err)
  14. }
  15. file := filepath.Join(dir, "exist")
  16. if err := ioutil.WriteFile(file, []byte("hello"), 0644); err != nil {
  17. t.Fatal(err)
  18. }
  19. return file, dir
  20. }
  21. // TestChtimes tests Chtimes on a tempfile. Test only mTime, because aTime is OS dependent
  22. func TestChtimes(t *testing.T) {
  23. file, dir := prepareTempFile(t)
  24. defer os.RemoveAll(dir)
  25. beforeUnixEpochTime := time.Unix(0, 0).Add(-100 * time.Second)
  26. unixEpochTime := time.Unix(0, 0)
  27. afterUnixEpochTime := time.Unix(100, 0)
  28. unixMaxTime := maxTime
  29. // Test both aTime and mTime set to Unix Epoch
  30. Chtimes(file, unixEpochTime, unixEpochTime)
  31. f, err := os.Stat(file)
  32. if err != nil {
  33. t.Fatal(err)
  34. }
  35. if f.ModTime() != unixEpochTime {
  36. t.Fatalf("Expected: %s, got: %s", unixEpochTime, f.ModTime())
  37. }
  38. // Test aTime before Unix Epoch and mTime set to Unix Epoch
  39. Chtimes(file, beforeUnixEpochTime, unixEpochTime)
  40. f, err = os.Stat(file)
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. if f.ModTime() != unixEpochTime {
  45. t.Fatalf("Expected: %s, got: %s", unixEpochTime, f.ModTime())
  46. }
  47. // Test aTime set to Unix Epoch and mTime before Unix Epoch
  48. Chtimes(file, unixEpochTime, beforeUnixEpochTime)
  49. f, err = os.Stat(file)
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. if f.ModTime() != unixEpochTime {
  54. t.Fatalf("Expected: %s, got: %s", unixEpochTime, f.ModTime())
  55. }
  56. // Test both aTime and mTime set to after Unix Epoch (valid time)
  57. Chtimes(file, afterUnixEpochTime, afterUnixEpochTime)
  58. f, err = os.Stat(file)
  59. if err != nil {
  60. t.Fatal(err)
  61. }
  62. if f.ModTime() != afterUnixEpochTime {
  63. t.Fatalf("Expected: %s, got: %s", afterUnixEpochTime, f.ModTime())
  64. }
  65. // Test both aTime and mTime set to Unix max time
  66. Chtimes(file, unixMaxTime, unixMaxTime)
  67. f, err = os.Stat(file)
  68. if err != nil {
  69. t.Fatal(err)
  70. }
  71. if f.ModTime().Truncate(time.Second) != unixMaxTime.Truncate(time.Second) {
  72. t.Fatalf("Expected: %s, got: %s", unixMaxTime.Truncate(time.Second), f.ModTime().Truncate(time.Second))
  73. }
  74. }