mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-17 19:08:46 -07:00
44e3bec42e
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...
53 lines
1002 B
Go
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")
|
|
}
|
|
}
|