You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/tools/goctl/util/env/env_test.go

97 lines
1.8 KiB
Go

package env
import (
"bytes"
"fmt"
"os/exec"
"runtime"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
"github.com/zeromicro/go-zero/tools/goctl/vars"
)
func TestLookUpGo(t *testing.T) {
xGo, err := LookUpGo()
if err != nil {
return
}
assert.True(t, pathx.FileExists(xGo))
output, errOutput, err := execCommand(xGo, "version")
if err != nil {
return
}
if len(errOutput) > 0 {
return
}
assert.Equal(t, wrapVersion(), output)
}
func TestLookUpProtoc(t *testing.T) {
xProtoc, err := LookUpProtoc()
if err != nil {
return
}
assert.True(t, pathx.FileExists(xProtoc))
output, errOutput, err := execCommand(xProtoc, "--version")
if err != nil {
return
}
if len(errOutput) > 0 {
return
}
assert.True(t, len(output) > 0)
}
func TestLookUpProtocGenGo(t *testing.T) {
xProtocGenGo, err := LookUpProtocGenGo()
if err != nil {
return
}
assert.True(t, pathx.FileExists(xProtocGenGo))
}
func TestLookPath(t *testing.T) {
xGo, err := LookPath("go")
if err != nil {
return
}
assert.True(t, pathx.FileExists(xGo))
}
func TestCanExec(t *testing.T) {
canExec := runtime.GOOS != vars.OsJs && runtime.GOOS != vars.OsIOS
assert.Equal(t, canExec, CanExec())
}
func execCommand(cmd string, arg ...string) (stdout, stderr string, err error) {
output := bytes.NewBuffer(nil)
errOutput := bytes.NewBuffer(nil)
c := exec.Command(cmd, arg...)
c.Stdout = output
c.Stderr = errOutput
err = c.Run()
if err != nil {
return
}
if errOutput.Len() > 0 {
stderr = errOutput.String()
return
}
stdout = strings.TrimSpace(output.String())
return
}
func wrapVersion() string {
version := runtime.Version()
os := runtime.GOOS
arch := runtime.GOARCH
return fmt.Sprintf("go version %s %s/%s", version, os, arch)
}