github.com/hauerwu/docker@v1.8.0-rc1/pkg/system/utimes_test.go (about)

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