Skip to content

Instantly share code, notes, and snippets.

@dustin
Last active January 1, 2016 11:49
Show Gist options
  • Select an option

  • Save dustin/8140638 to your computer and use it in GitHub Desktop.

Select an option

Save dustin/8140638 to your computer and use it in GitHub Desktop.
fuse bug
package main
import (
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
base := os.Args[1]
filename := filepath.Join(base, "x")
log.Printf("Creating: %q", filename)
f, err := os.Create(filename)
if err != nil {
log.Fatalf("Create: %v", err)
}
if err := f.Close(); err != nil {
log.Fatalf("Close: %v", err)
}
log.Printf("Statting %q", filename)
fi, err := os.Stat(filename)
if err != nil {
log.Fatalf("Stat error: %v", err)
} else if !fi.Mode().IsRegular() || fi.Size() != 0 {
log.Fatalf("Stat of %q = %v size %d; want a %d byte regular file",
filename, fi.Mode(), fi.Size(), 0)
}
log.Printf("Appending to %q", filename)
for _, str := range []string{"foo, ", "bar\n", "another line.\n"} {
f, err = os.OpenFile(filename, os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatalf("OpenFile: %v", err)
}
if _, err := f.Write([]byte(str)); err != nil {
log.Printf("Error with append: %v", err)
log.Fatalf("Error appending %q to %s: %v", str, filename, err)
}
if err := f.Close(); err != nil {
log.Fatal(err)
}
}
log.Printf("slurping %q", filename)
slurp, err := ioutil.ReadFile(filename)
if err != nil {
log.Fatal(err)
}
log.Printf("Statting %q again", filename)
const want = "foo, bar\nanother line.\n"
fi, err = os.Stat(filename)
if err != nil {
log.Fatalf("Stat error: %v", err)
} else if !fi.Mode().IsRegular() || fi.Size() != int64(len(want)) {
log.Fatalf("Stat of roots/r/x = %v size %d; want a %d byte regular file", fi.Mode(), fi.Size(), len(want))
}
if got := string(slurp); got != want {
log.Fatalf("contents = %q; want %q", got, want)
}
log.Printf("Deleting %q", filename)
// Delete ilog.
if err := os.Remove(filename); err != nil {
log.Fatal(err)
}
log.Printf("Final stat of %q", filename)
// Gone?
if _, err := os.Stat(filename); !os.IsNotExist(err) {
log.Fatalf("expected file to be gone; got stat err = %v instead", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment