1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
package times
import (
"os"
"path/filepath"
"testing"
"time"
)
func TestStat(t *testing.T) {
fileAndDirTest(t, func(name string) {
ts, err := Stat(name)
if err != nil {
t.Error(err.Error())
}
timespecTest(ts, newInterval(time.Now(), time.Second), t)
})
}
func TestGet(t *testing.T) {
fileAndDirTest(t, func(name string) {
fi, err := os.Stat(name)
if err != nil {
t.Error(err.Error())
}
timespecTest(Get(fi), newInterval(time.Now(), time.Second), t)
})
}
func TestStatFile(t *testing.T) {
fileTest(t, func(f *os.File) {
ts, err := StatFile(f)
if err != nil {
t.Error(err.Error())
}
timespecTest(ts, newInterval(time.Now(), time.Second), t)
})
}
func TestStatFileErr(t *testing.T) {
fileTest(t, func(f *os.File) {
f.Close()
_, err := StatFile(f)
if err == nil {
t.Error("got nil err, but err was expected!")
}
})
}
type tsFunc func(string) (Timespec, error)
var offsetTime = -10 * time.Second
func TestStatSymlink(t *testing.T) {
testStatSymlink(Stat, time.Now().Add(offsetTime), t)
}
func TestLstatSymlink(t *testing.T) {
testStatSymlink(Lstat, time.Now(), t)
}
func testStatSymlink(sf tsFunc, expectTime time.Time, t *testing.T) {
fileAndDirTest(t, func(name string) {
start := time.Now()
symname := filepath.Join(filepath.Dir(name), "sym-"+filepath.Base(name))
if err := os.Symlink(name, symname); err != nil {
t.Fatal(err.Error())
}
defer os.Remove(symname)
// modify the realFileTime so symlink and real file see diff values.
realFileTime := start.Add(offsetTime)
if err := os.Chtimes(name, realFileTime, realFileTime); err != nil {
t.Fatal(err.Error())
}
ts, err := sf(symname)
if err != nil {
t.Fatal(err.Error())
}
timespecTest(ts, newInterval(expectTime, time.Second), t, Timespec.AccessTime, Timespec.ModTime)
})
}
func TestStatErr(t *testing.T) {
_, err := Stat("badfile?")
if err == nil {
t.Error("expected an error")
}
}
func TestLstatErr(t *testing.T) {
_, err := Lstat("badfile?")
if err == nil {
t.Error("expected an error")
}
}
func TestCheat(t *testing.T) {
// not all times are available for all platforms
// this allows us to get 100% test coverage for platforms which do not have
// ChangeTime/BirthTime
var c ctime
if c.HasChangeTime() {
c.ChangeTime()
}
var b btime
if b.HasBirthTime() {
b.BirthTime()
}
var paniced = false
var nc noctime
func() {
if !nc.HasChangeTime() {
defer func() {
recover()
paniced = true
}()
}
nc.ChangeTime()
}()
if !paniced {
t.Error("expected panic")
}
paniced = false
var nb nobtime
func() {
if !nb.HasBirthTime() {
defer func() {
recover()
paniced = true
}()
}
nb.BirthTime()
}()
if !paniced {
t.Error("expected panic")
}
}
|