You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
1.8 KiB

  1. package common
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "math/rand"
  6. "os"
  7. "testing"
  8. "time"
  9. )
  10. func TestWriteFileAtomic(t *testing.T) {
  11. var (
  12. seed = rand.New(rand.NewSource(time.Now().UnixNano()))
  13. data = []byte(RandStr(seed.Intn(2048)))
  14. old = RandBytes(seed.Intn(2048))
  15. perm os.FileMode = 0600
  16. )
  17. f, err := ioutil.TempFile("/tmp", "write-atomic-test-")
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. defer os.Remove(f.Name())
  22. if err = ioutil.WriteFile(f.Name(), old, 0664); err != nil {
  23. t.Fatal(err)
  24. }
  25. if err = WriteFileAtomic(f.Name(), data, perm); err != nil {
  26. t.Fatal(err)
  27. }
  28. rData, err := ioutil.ReadFile(f.Name())
  29. if err != nil {
  30. t.Fatal(err)
  31. }
  32. if !bytes.Equal(data, rData) {
  33. t.Fatalf("data mismatch: %v != %v", data, rData)
  34. }
  35. stat, err := os.Stat(f.Name())
  36. if err != nil {
  37. t.Fatal(err)
  38. }
  39. if have, want := stat.Mode().Perm(), perm; have != want {
  40. t.Errorf("have %v, want %v", have, want)
  41. }
  42. }
  43. func TestGoPath(t *testing.T) {
  44. // restore original gopath upon exit
  45. path := os.Getenv("GOPATH")
  46. defer func() {
  47. _ = os.Setenv("GOPATH", path)
  48. }()
  49. err := os.Setenv("GOPATH", "~/testgopath")
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. path = GoPath()
  54. if path != "~/testgopath" {
  55. t.Fatalf("should get GOPATH env var value, got %v", path)
  56. }
  57. os.Unsetenv("GOPATH")
  58. path = GoPath()
  59. if path != "~/testgopath" {
  60. t.Fatalf("subsequent calls should return the same value, got %v", path)
  61. }
  62. }
  63. func TestGoPathWithoutEnvVar(t *testing.T) {
  64. // restore original gopath upon exit
  65. path := os.Getenv("GOPATH")
  66. defer func() {
  67. _ = os.Setenv("GOPATH", path)
  68. }()
  69. os.Unsetenv("GOPATH")
  70. // reset cache
  71. gopath = ""
  72. path = GoPath()
  73. if path == "" || path == "~/testgopath" {
  74. t.Fatalf("should get nonempty result of calling go env GOPATH, got %v", path)
  75. }
  76. }