env_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package env
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os/exec"
  6. "runtime"
  7. "strings"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  11. "github.com/zeromicro/go-zero/tools/goctl/vars"
  12. )
  13. func TestLookUpGo(t *testing.T) {
  14. xGo, err := LookUpGo()
  15. if err != nil {
  16. return
  17. }
  18. assert.True(t, pathx.FileExists(xGo))
  19. output, errOutput, err := execCommand(xGo, "version")
  20. if err != nil {
  21. return
  22. }
  23. if len(errOutput) > 0 {
  24. return
  25. }
  26. assert.Equal(t, wrapVersion(), output)
  27. }
  28. func TestLookUpProtoc(t *testing.T) {
  29. xProtoc, err := LookUpProtoc()
  30. if err != nil {
  31. return
  32. }
  33. assert.True(t, pathx.FileExists(xProtoc))
  34. output, errOutput, err := execCommand(xProtoc, "--version")
  35. if err != nil {
  36. return
  37. }
  38. if len(errOutput) > 0 {
  39. return
  40. }
  41. assert.True(t, len(output) > 0)
  42. }
  43. func TestLookUpProtocGenGo(t *testing.T) {
  44. xProtocGenGo, err := LookUpProtocGenGo()
  45. if err != nil {
  46. return
  47. }
  48. assert.True(t, pathx.FileExists(xProtocGenGo))
  49. }
  50. func TestLookPath(t *testing.T) {
  51. xGo, err := LookPath("go")
  52. if err != nil {
  53. return
  54. }
  55. assert.True(t, pathx.FileExists(xGo))
  56. }
  57. func TestCanExec(t *testing.T) {
  58. canExec := runtime.GOOS != vars.OsJs && runtime.GOOS != vars.OsIOS
  59. assert.Equal(t, canExec, CanExec())
  60. }
  61. func execCommand(cmd string, arg ...string) (stdout, stderr string, err error) {
  62. output := bytes.NewBuffer(nil)
  63. errOutput := bytes.NewBuffer(nil)
  64. c := exec.Command(cmd, arg...)
  65. c.Stdout = output
  66. c.Stderr = errOutput
  67. err = c.Run()
  68. if err != nil {
  69. return
  70. }
  71. if errOutput.Len() > 0 {
  72. stderr = errOutput.String()
  73. return
  74. }
  75. stdout = strings.TrimSpace(output.String())
  76. return
  77. }
  78. func wrapVersion() string {
  79. version := runtime.Version()
  80. os := runtime.GOOS
  81. arch := runtime.GOARCH
  82. return fmt.Sprintf("go version %s %s/%s", version, os, arch)
  83. }