package generator import ( "go/build" "os" "path/filepath" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/tal-tech/go-zero/core/logx" "github.com/tal-tech/go-zero/core/stringx" conf "github.com/tal-tech/go-zero/tools/goctl/config" "github.com/tal-tech/go-zero/tools/goctl/rpc/execx" ) var cfg = &conf.Config{ NamingFormat: "gozero", } func TestRpcGenerate(t *testing.T) { _ = Clean() dispatcher := NewDefaultGenerator() err := dispatcher.Prepare() if err != nil { logx.Error(err) return } projectName := stringx.Rand() g := NewRPCGenerator(dispatcher, cfg) // case go path src := filepath.Join(build.Default.GOPATH, "src") _, err = os.Stat(src) if err != nil { return } projectDir := filepath.Join(src, projectName) srcDir := projectDir defer func() { _ = os.RemoveAll(srcDir) }() err = g.Generate("./test.proto", projectDir, []string{src}) assert.Nil(t, err) _, err = execx.Run("go test "+projectName, projectDir) if err != nil { assert.True(t, func() bool { return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package") }()) } // case go mod workDir := t.TempDir() name := filepath.Base(workDir) _, err = execx.Run("go mod init "+name, workDir) if err != nil { logx.Error(err) return } projectDir = filepath.Join(workDir, projectName) err = g.Generate("./test.proto", projectDir, []string{src}) assert.Nil(t, err) _, err = execx.Run("go test "+projectName, projectDir) if err != nil { assert.True(t, func() bool { return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package") }()) } // case not in go mod and go path err = g.Generate("./test.proto", projectDir, []string{src}) assert.Nil(t, err) _, err = execx.Run("go test "+projectName, projectDir) if err != nil { assert.True(t, func() bool { return strings.Contains(err.Error(), "not in GOROOT") || strings.Contains(err.Error(), "cannot find package") }()) } // invalid directory projectDir = filepath.Join(t.TempDir(), ".....") err = g.Generate("./test.proto", projectDir, nil) assert.NotNil(t, err) }