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.

88 lines
1.7 KiB

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