syncthing/internal/osutil/atomic_test.go
Jakob Borg 44e3bec42e Add osutil.AtomicWriter
This captures the common pattern of writing to a temp file and moving it
to it's real name only if everything went well. It reduces the amount of
code in some places where we do this, but maybe not as much as I
expected because the upgrade thing is still a special snowflake...
2015-07-12 14:28:59 +10:00

53 lines
1002 B
Go

// Copyright (C) 2015 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at http://mozilla.org/MPL/2.0/.
package osutil
import (
"bytes"
"io/ioutil"
"os"
"testing"
)
func TestCreateAtomic(t *testing.T) {
os.RemoveAll("testdata")
defer os.RemoveAll("testdata")
if err := os.Mkdir("testdata", 0755); err != nil {
t.Fatal(err)
}
w, err := CreateAtomic("testdata/file", 0644)
if err != nil {
t.Fatal(err)
}
n, err := w.Write([]byte("hello"))
if err != nil {
t.Fatal(err)
}
if n != 5 {
t.Fatal("written bytes", n, "!= 5")
}
if _, err := ioutil.ReadFile("testdata/file"); err == nil {
t.Fatal("file should not exist")
}
if err := w.Close(); err != nil {
t.Fatal(err)
}
bs, err := ioutil.ReadFile("testdata/file")
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(bs, []byte("hello")) {
t.Error("incorrect data")
}
}