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