From c9cd78eef20fa17f831e126a7bd4ce91aeba706e Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Fri, 6 Mar 2015 22:31:44 -0600 Subject: [PATCH] MemFSTest.UnlinkFile_StillOpen --- samples/memfs/memfs_test.go | 42 ++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/samples/memfs/memfs_test.go b/samples/memfs/memfs_test.go index 35ab5b1..6ada4e9 100644 --- a/samples/memfs/memfs_test.go +++ b/samples/memfs/memfs_test.go @@ -571,7 +571,47 @@ func (t *MemFSTest) UnlinkFile_NonExistent() { } func (t *MemFSTest) UnlinkFile_StillOpen() { - AssertTrue(false, "TODO") + fileName := path.Join(t.mfs.Dir(), "foo") + + // Create and open a file. + f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0600) + t.toClose = append(t.toClose, f) + AssertEq(nil, err) + + // Write some data into it. + n, err := f.Write([]byte("taco")) + AssertEq(nil, err) + AssertEq(4, n) + + // Unlink it. + err = os.Remove(fileName) + AssertEq(nil, err) + + // The directory should no longer contain it. + entries, err := ioutil.ReadDir(t.mfs.Dir()) + AssertEq(nil, err) + ExpectThat(entries, ElementsAre()) + + // We should be able to stat the file. It should still show as having + // contents, but with no links. + fi, err := f.Stat() + + AssertEq(nil, err) + ExpectEq(4, fi.Size()) + ExpectEq(0, fi.Sys().(*syscall.Stat_t).Nlink) + + // The contents should still be available. + buf := make([]byte, 1024) + n, err = f.ReadAt(buf, 0) + + AssertEq(nil, err) + AssertEq(4, n) + ExpectEq("taco", buf[:4]) + + // Writing should still work, too. + n, err = f.Write([]byte("burrito")) + AssertEq(nil, err) + AssertEq(4, n) } func (t *MemFSTest) Rmdir_NonEmpty() {