atomic_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (C) 2015 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package osutil
  7. import (
  8. "bytes"
  9. "io/ioutil"
  10. "os"
  11. "testing"
  12. )
  13. func TestCreateAtomicCreate(t *testing.T) {
  14. os.RemoveAll("testdata")
  15. defer os.RemoveAll("testdata")
  16. if err := os.Mkdir("testdata", 0755); err != nil {
  17. t.Fatal(err)
  18. }
  19. w, err := CreateAtomic("testdata/file")
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. n, err := w.Write([]byte("hello"))
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. if n != 5 {
  28. t.Fatal("written bytes", n, "!= 5")
  29. }
  30. if _, err := ioutil.ReadFile("testdata/file"); err == nil {
  31. t.Fatal("file should not exist")
  32. }
  33. if err := w.Close(); err != nil {
  34. t.Fatal(err)
  35. }
  36. bs, err := ioutil.ReadFile("testdata/file")
  37. if err != nil {
  38. t.Fatal(err)
  39. }
  40. if !bytes.Equal(bs, []byte("hello")) {
  41. t.Error("incorrect data")
  42. }
  43. }
  44. func TestCreateAtomicReplace(t *testing.T) {
  45. os.RemoveAll("testdata")
  46. defer os.RemoveAll("testdata")
  47. if err := os.Mkdir("testdata", 0755); err != nil {
  48. t.Fatal(err)
  49. }
  50. if err := ioutil.WriteFile("testdata/file", []byte("some old data"), 0644); err != nil {
  51. t.Fatal(err)
  52. }
  53. w, err := CreateAtomic("testdata/file")
  54. if err != nil {
  55. t.Fatal(err)
  56. }
  57. if _, err := w.Write([]byte("hello")); err != nil {
  58. t.Fatal(err)
  59. }
  60. if err := w.Close(); err != nil {
  61. t.Fatal(err)
  62. }
  63. bs, err := ioutil.ReadFile("testdata/file")
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. if !bytes.Equal(bs, []byte("hello")) {
  68. t.Error("incorrect data")
  69. }
  70. }