chtimes_test.go 2.6 KB

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