diff --git a/cmd/build.go b/cmd/build.go index 099d472..4617b86 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -71,7 +71,7 @@ func runBuild(args []string, wd string) { defer gocBuild.Clean() // doCover with original buildFlags, with new GOPATH( tmp:original ) // in the tmp directory - cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, center) + cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, agentPort, center) // do install in the temporary directory err = gocBuild.Build() if err != nil { diff --git a/cmd/commonflags.go b/cmd/commonflags.go index e36647b..e48f7c9 100644 --- a/cmd/commonflags.go +++ b/cmd/commonflags.go @@ -9,6 +9,7 @@ var ( target string center string mode string + agentPort string debugGoc bool buildFlags string @@ -26,6 +27,7 @@ func addBasicFlags(cmdset *pflag.FlagSet) { func addCommonFlags(cmdset *pflag.FlagSet) { addBasicFlags(cmdset) cmdset.StringVar(&mode, "mode", "count", "coverage mode: set, count, atomic") + cmdset.StringVar(&agentPort, "agentport", "", "specify fixed port for registered service communicate with goc server. if not provided, using a random port") cmdset.StringVar(&buildFlags, "buildflags", "", "specify the build flags") // bind to viper viper.BindPFlags(cmdset) diff --git a/cmd/cover.go b/cmd/cover.go index a9ae61c..d394980 100644 --- a/cmd/cover.go +++ b/cmd/cover.go @@ -48,7 +48,7 @@ goc cover --center=http://127.0.0.1:7777 --target=/path/to/target --mode=atomic log.Fatalf("unknown -mode %v", mode) } - cover.Execute(buildFlags, "", target, mode, center) + cover.Execute(buildFlags, "", target, mode, agentPort, center) }, } diff --git a/cmd/install.go b/cmd/install.go index 4dc48b9..dbe1f7a 100644 --- a/cmd/install.go +++ b/cmd/install.go @@ -64,7 +64,7 @@ func runInstall(args []string, wd string) { defer gocBuild.Clean() // doCover with original buildFlags, with new GOPATH( tmp:original ) // in the tmp directory - cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, center) + cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, agentPort, center) // do install in the temporary directory err = gocBuild.Install() if err != nil { diff --git a/cmd/run.go b/cmd/run.go index f3ac9fb..99a8368 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -60,7 +60,7 @@ goc run . [--buildflags] [--exec] [--arguments] fmt.Printf("[goc] goc server started: %s \n", gocServer) // execute covers for the target source with original buildFlags and new GOPATH( tmp:original ) - cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, gocServer) + cover.Execute(buildFlags, gocBuild.NewGOPATH, gocBuild.TmpDir, mode, "", gocServer) if err := gocBuild.Run(); err != nil { log.Fatalf("Fail to run: %v", err) diff --git a/pkg/cover/cover.go b/pkg/cover/cover.go index 688095f..3c97de5 100644 --- a/pkg/cover/cover.go +++ b/pkg/cover/cover.go @@ -46,6 +46,7 @@ var ( // TestCover is a collection of all counters type TestCover struct { Mode string + AgentPort string Center string // cover profile host center MainPkgCover *PackageCover DepsCover []*PackageCover @@ -120,7 +121,7 @@ type PackageError struct { } //Execute execute go tool cover for all the .go files in the target folder -func Execute(args, newGopath, target, mode, center string) error { +func Execute(args, newGopath, target, mode, agentPort, center string) error { if !isDirExist(target) { log.Errorf("Target directory %s not exist", target) return ErrCoverPkgFailed @@ -152,6 +153,7 @@ func Execute(args, newGopath, target, mode, center string) error { // new a testcover for this service tc := TestCover{ Mode: mode, + AgentPort: agentPort, Center: center, MainPkgCover: mainCover, } diff --git a/pkg/cover/cover_test.go b/pkg/cover/cover_test.go index 098cc67..7bf1549 100644 --- a/pkg/cover/cover_test.go +++ b/pkg/cover/cover_test.go @@ -316,7 +316,7 @@ func TestExecuteForSimpleModProject(t *testing.T) { testDir := filepath.Join(os.TempDir(), "goc-build-test") copy.Copy(workingDir, testDir) - Execute("", gopath, testDir, "count", "http://127.0.0.1:7777") + Execute("", gopath, testDir, "count", "", "http://127.0.0.1:7777") _, err := os.Lstat(filepath.Join(testDir, "http_cover_apis_auto_generated.go")) if !assert.Equal(t, err, nil) { diff --git a/pkg/cover/instrument.go b/pkg/cover/instrument.go index ab4d396..4248d85 100644 --- a/pkg/cover/instrument.go +++ b/pkg/cover/instrument.go @@ -260,8 +260,12 @@ func listen() (ln net.Listener, host string, err error) { return } } - - ln, err = net.Listen("tcp4", ":0") + agentPort := "{{.AgentPort }}" + if agentPort != "" { + ln, err = net.Listen("tcp4", agentPort) + } else { + ln, err = net.Listen("tcp4", ":0") + } if err != nil { return }