github.com/moby/docker@v26.1.3+incompatible/pkg/system/utimes_unix_test.go (about)

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