diff --git a/cmd/jupiter/main.go b/cmd/jupiter/main.go index c83c12a2cc..b0c972bcb7 100644 --- a/cmd/jupiter/main.go +++ b/cmd/jupiter/main.go @@ -40,6 +40,11 @@ var Commands = []cli.Command{ Usage: "choose remote template", Value: "github.com/douyu/jupiter-layout", }, + cli.StringFlag{ + Name: "branch", + Usage: "choose branch of remote template", + Value: "main", + }, cli.BoolFlag{ Name: "upgrade", Usage: "upgrade remote template", diff --git a/pkg/core/cmd/cmd_new.go b/pkg/core/cmd/cmd_new.go index 2ad0eff4b8..92db09c748 100644 --- a/pkg/core/cmd/cmd_new.go +++ b/pkg/core/cmd/cmd_new.go @@ -220,7 +220,7 @@ func getFileInfosByGit(c *cli.Context, gitPath string) (fileInfos map[string]*fi _, err := os.Stat(getGlobalLayoutPath(gitPath)) if os.IsNotExist(err) { // 不存在,拉取对应的仓库 - cloneGitRepo(gitPath) + cloneGitRepo(gitPath, c.String("branch")) } else if err != nil { // 这里的错误,是说明出现了未知的错误,应该抛出 panic(err) @@ -257,7 +257,7 @@ func getFileInfosByGit(c *cli.Context, gitPath string) (fileInfos map[string]*fi } // 拉取 jupiter-layout 仓库 -func cloneGitRepo(path string) { +func cloneGitRepo(path string, branch string) { // 存放于git的模板地址 gitPath := "https://" + path + ".git" @@ -266,7 +266,7 @@ func cloneGitRepo(path string) { // clone最新仓库的master分支 // 不存在则拉取模板 var stdErr bytes.Buffer - cmd := exec.Command("git", "clone", gitPath, getGlobalLayoutPath(path), "-b", "main", "--depth=1") + cmd := exec.Command("git", "clone", gitPath, getGlobalLayoutPath(path), "-b", branch, "--depth=1") cmd.Stderr = &stdErr if err := cmd.Run(); err != nil { panic(stdErr.String()) @@ -296,7 +296,7 @@ func checkUpgrade(c *cli.Context, path string) bool { color.Green("check upgrade (%s) ...", path) - checkGitCorrectness(path) + checkGitCorrectness(path, c.String("branch")) // 检查今天是否已经检查过更新 if !checkDays(path) { @@ -319,7 +319,7 @@ func checkUpgrade(c *cli.Context, path string) bool { } // 检查模板的正确性 -func checkGitCorrectness(path string) { +func checkGitCorrectness(path , branch string) { cmd := exec.Command("git", "status") cmd.Dir = getGlobalLayoutPath(path) @@ -348,7 +348,7 @@ func checkGitCorrectness(path string) { panic(err) } - cloneGitRepo(path) + cloneGitRepo(path, branch) createTempLock(path) } diff --git a/pkg/core/cmd/cmd_test.go b/pkg/core/cmd/cmd_test.go new file mode 100644 index 0000000000..dc7a7f510e --- /dev/null +++ b/pkg/core/cmd/cmd_test.go @@ -0,0 +1,120 @@ +package cmd + +import ( + "log" + "sort" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/urfave/cli" +) + +var Commands = []cli.Command{ + { + Name: "init", + Aliases: []string{"i"}, + Usage: "init jupiter dependencies", + Action: Init, + }, + { + Name: "new", + Aliases: []string{"n"}, + Usage: "generate code framework", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "remote", + Usage: "choose remote template", + Value: "github.com/douyu/jupiter-layout", + }, + cli.StringFlag{ + Name: "branch", + Usage: "choose branch of remote template", + Value: "main", + }, + cli.BoolFlag{ + Name: "upgrade", + Usage: "upgrade remote template", + }, + }, + Action: New, + }, + { + Name: "run", + Aliases: []string{"r"}, + Usage: "auto restart program when files changed", + Action: Run, + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "c", + Value: ".jupiter.toml", + Usage: "指定启动配置文件", + }, + cli.BoolFlag{ + Name: "debug", + Usage: "debug mode", + }, + }, + }, + { + Name: "update", + Aliases: []string{"upgrade"}, + Usage: "Upgrade to the latest version", + Action: Update, + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "remote", + Usage: "choose remote repo", + Value: "github.com/douyu/jupiter/cmd/jupiter", + }, + }, + }, + { + Name: "clean", + Usage: "clear all cached", + Action: Clean, + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "remote", + Usage: "choose remote template", + Value: "github.com/douyu/jupiter-layout", + }, + }, + }, + { + Name: "struct2interface", + Aliases: []string{"struct2interface"}, + Usage: "Auto generate interface from struct for golang", + Action: Struct2Interface, + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "d,dir", + Usage: "please specify the code path", + Value: ".", + }, + }, + }, +} + +func run(args []string) { + app := cli.NewApp() + app.Usage = "Fast bootstrap tool for jupiter framework" + app.Commands = Commands + + sort.Sort(cli.FlagsByName(app.Flags)) + sort.Sort(cli.CommandsByName(app.Commands)) + + err := app.Run(args) + if err != nil { + log.Fatal(err) + } +} + +func TestCMD(t *testing.T) { + run([]string{"jupiter", "update"}) + run([]string{"jupiter", "init"}) + run([]string{"jupiter", "new", "/tmp/test-go", "-remote", "github.com/douyu/jupiter-layout", "-branch", "main"}) + run([]string{"jupiter", "struct2interface", "-d", "/tmp/test-go/internal/pkg"}) + assert.DirExists(t, "/tmp/github.com_douyu_jupiter_layout/") + run([]string{"jupiter", "clean"}) + assert.NoDirExists(t, "/tmp/github.com_douyu_jupiter_layout/") +} diff --git a/pkg/registry/etcdv3/registry_test.go b/pkg/registry/etcdv3/registry_test.go index bb4e63c7c0..5e86fa2822 100644 --- a/pkg/registry/etcdv3/registry_test.go +++ b/pkg/registry/etcdv3/registry_test.go @@ -25,7 +25,6 @@ import ( "github.com/douyu/jupiter/pkg/registry" "github.com/douyu/jupiter/pkg/server" "github.com/douyu/jupiter/pkg/xlog" - "github.com/samber/lo" "github.com/stretchr/testify/assert" ) @@ -179,17 +178,17 @@ func TestKeepalive(t *testing.T) { })) lease := reg.getLeaseID() - reg.client.Revoke(reg.ctx, lo.Must(reg.getOrGrantLeaseID(reg.ctx))) + reg.client.Revoke(reg.ctx, lease) time.Sleep(1 * time.Second) - assert.NotZero(t, lo.Must(reg.getOrGrantLeaseID(reg.ctx))) - assert.True(t, lease != lo.Must(reg.getOrGrantLeaseID(reg.ctx))) + assert.NotZero(t, reg.getLeaseID()) + assert.True(t, lease != reg.getLeaseID()) ttl, err := reg.client.TimeToLive(reg.ctx, lease) assert.Nil(t, err) assert.Equal(t, int64(-1), ttl.TTL) - ttl, err = reg.client.TimeToLive(reg.ctx, lo.Must(reg.getOrGrantLeaseID(reg.ctx))) + ttl, err = reg.client.TimeToLive(reg.ctx, reg.getLeaseID()) assert.Nil(t, err) assert.Equal(t, int64(1), ttl.TTL) diff --git a/pkg/server/server.go b/pkg/server/server.go index 46b0848151..78a49322dc 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -16,9 +16,7 @@ package server import ( "context" - "errors" "fmt" - "strings" "github.com/douyu/jupiter/pkg" "github.com/douyu/jupiter/pkg/core/constant" @@ -62,27 +60,6 @@ func (s *ServiceInfo) ServicePrefix() string { return fmt.Sprintf("%s:%s:%s:%s/", s.Scheme, s.Name, "v1", pkg.AppMode()) } -func (s *ServiceInfo) Unmarshal(data string) error { - slices := strings.Split(data, ":") - if len(slices) != 4 { - return errors.New("invalid service info1") - } - - s.Scheme = slices[0] - s.Name = slices[1] - s.Version = slices[2] - - slices = strings.Split(slices[3], "/") - if len(slices) != 2 { - return errors.New("invalid service info2") - } - - s.Mode = slices[0] - s.Address = slices[1] - - return nil -} - // Service ... type Service struct { Namespace string `json:"namespace" toml:"namespace"` diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index 5cfb68a8f6..4c69bf70d7 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -140,3 +140,16 @@ func TestNotImplementEqual(t *testing.T) { address1.Equal(address2) }) } + +func TestServer(t *testing.T) { + server := ApplyOptions( + WithScheme("grpc"), + WithAddress("127.0.0.1"), + WithKind(constant.ServiceGovernor), + WithMetaData("zone", "wh"), + ) + + assert.Equal(t, "grpc:server.test:v1:unkown-mode/127.0.0.1", server.RegistryName()) + assert.Equal(t, "grpc:server.test:v1:unkown-mode/", server.ServicePrefix()) + assert.Equal(t, "grpc://127.0.0.1", server.Label()) +}