func TestAbort(t *testing.T) { contents := []byte("the answer is 42") t.Parallel() tmpfile, err := ioutil.TempFile("", "atomicfile-abort-") if err != nil { t.Fatal(err) } name := tmpfile.Name() if _, err := tmpfile.Write(contents); err != nil { t.Fatal(err) } defer os.Remove(name) f, err := atomicfile.New(name, os.FileMode(0666)) if err != nil { t.Fatal(err) } f.Write([]byte("foo")) if err := f.Abort(); err != nil { t.Fatal(err) } if _, err := os.Stat(name); err != nil { t.Fatalf("expected file to exist: %s", err) } actual, err := ioutil.ReadFile(name) if err != nil { t.Fatal(err) } if !bytes.Equal(contents, actual) { t.Fatalf(`did not find expected "%s" instead found "%s"`, contents, actual) } }
func test(t *testing.T, dir, prefix string) { t.Parallel() tmpfile, err := ioutil.TempFile(dir, prefix) if err != nil { t.Fatal(err) } name := tmpfile.Name() if err := os.Remove(name); err != nil { t.Fatal(err) } defer os.Remove(name) f, err := atomicfile.New(name, os.FileMode(0666)) if err != nil { t.Fatal(err) } f.Write([]byte("foo")) if _, err := os.Stat(name); !os.IsNotExist(err) { t.Fatal("did not expect file to exist") } if err := f.Close(); err != nil { t.Fatal(err) } if _, err := os.Stat(name); err != nil { t.Fatalf("expected file to exist: %s", err) } }
// WriteConfigFile writes the config from `cfg` into `filename`. func WriteConfigFile(filename string, cfg interface{}) error { err := os.MkdirAll(filepath.Dir(filename), 0775) if err != nil { return err } f, err := atomicfile.New(filename, 0660) if err != nil { return err } defer f.Close() return encode(f, cfg) }