AttributeCachingTest.StatRenumberMtimeStat_ViaFileDescriptor
parent
0fe8ed1493
commit
8d1ca91bc9
|
@ -115,6 +115,37 @@ func (t *cachingFSTest) statAll() (foo, dir, bar os.FileInfo) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *cachingFSTest) openFiles() (foo, dir, bar *os.File) {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
foo, err = os.Open(path.Join(t.dir, "foo"))
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
dir, err = os.Open(path.Join(t.dir, "dir"))
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
bar, err = os.Open(path.Join(t.dir, "bar"))
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *cachingFSTest) statFiles(
|
||||||
|
f, g, h *os.File) (foo, dir, bar os.FileInfo) {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
foo, err = f.Stat()
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
dir, err = g.Stat()
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
bar, err = h.Stat()
|
||||||
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func getInodeID(fi os.FileInfo) uint64 {
|
func getInodeID(fi os.FileInfo) uint64 {
|
||||||
return fi.Sys().(*syscall.Stat_t).Ino
|
return fi.Sys().(*syscall.Stat_t).Ino
|
||||||
}
|
}
|
||||||
|
@ -448,3 +479,37 @@ func (t *AttributeCachingTest) StatRenumberMtimeStat() {
|
||||||
ExpectThat(dirAfter.ModTime(), timeutil.TimeEq(newMtime))
|
ExpectThat(dirAfter.ModTime(), timeutil.TimeEq(newMtime))
|
||||||
ExpectThat(barAfter.ModTime(), timeutil.TimeEq(newMtime))
|
ExpectThat(barAfter.ModTime(), timeutil.TimeEq(newMtime))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *AttributeCachingTest) StatRenumberMtimeStat_ViaFileDescriptor() {
|
||||||
|
newMtime := t.initialMtime.Add(time.Second)
|
||||||
|
|
||||||
|
// Open everything, fixing a particular inode number for each.
|
||||||
|
foo, dir, bar := t.openFiles()
|
||||||
|
|
||||||
|
fooBefore, dirBefore, barBefore := t.statFiles(foo, dir, bar)
|
||||||
|
t.fs.RenumberInodes()
|
||||||
|
t.fs.SetMtime(newMtime)
|
||||||
|
fooAfter, dirAfter, barAfter := t.statFiles(foo, dir, bar)
|
||||||
|
|
||||||
|
// We should still see the old cached mtime with the old inode ID.
|
||||||
|
ExpectEq(getInodeID(fooBefore), getInodeID(fooAfter))
|
||||||
|
ExpectEq(getInodeID(dirBefore), getInodeID(dirAfter))
|
||||||
|
ExpectEq(getInodeID(barBefore), getInodeID(barAfter))
|
||||||
|
|
||||||
|
ExpectThat(fooAfter.ModTime(), timeutil.TimeEq(fooBefore.ModTime()))
|
||||||
|
ExpectThat(dirAfter.ModTime(), timeutil.TimeEq(dirBefore.ModTime()))
|
||||||
|
ExpectThat(barAfter.ModTime(), timeutil.TimeEq(barBefore.ModTime()))
|
||||||
|
|
||||||
|
// After waiting for the attribute cache to expire, we should see the fresh
|
||||||
|
// mtime, still with the old inode ID.
|
||||||
|
time.Sleep(2 * t.getattrTimeout)
|
||||||
|
fooAfter, dirAfter, barAfter = t.statAll()
|
||||||
|
|
||||||
|
ExpectEq(getInodeID(fooBefore), getInodeID(fooAfter))
|
||||||
|
ExpectEq(getInodeID(dirBefore), getInodeID(dirAfter))
|
||||||
|
ExpectEq(getInodeID(barBefore), getInodeID(barAfter))
|
||||||
|
|
||||||
|
ExpectThat(fooAfter.ModTime(), timeutil.TimeEq(newMtime))
|
||||||
|
ExpectThat(dirAfter.ModTime(), timeutil.TimeEq(newMtime))
|
||||||
|
ExpectThat(barAfter.ModTime(), timeutil.TimeEq(newMtime))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue