diff --git a/cmd/build_test.go b/cmd/build_test.go index b28dba8..f3677b3 100644 --- a/cmd/build_test.go +++ b/cmd/build_test.go @@ -107,13 +107,4 @@ func TestBuildBinaryForInternalPackage(t *testing.T) { fInfo, err := os.Lstat(obj) assert.Equal(t, err, nil, "the binary should be generated.") assert.Equal(t, startTime.Before(fInfo.ModTime()), true, obj+"new binary should be generated, not the old one") - - // cmd := exec.Command("go", "tool", "objdump", "simple-project") - // cmd.Dir = workingDir - // out, _ := cmd.CombinedOutput() - // cnt := strings.Count(string(out), "GoCacheCover") - // assert.Equal(t, cnt > 0, true, "GoCacheCover variable for internal package should be in the binary") - - // cnt = strings.Count(string(out), "internal.GoCover") - // assert.Equal(t, cnt > 0, true, "internal.GoCover variable should be in the binary") } diff --git a/pkg/cover/cover.go b/pkg/cover/cover.go index 0de1ff4..742e352 100644 --- a/pkg/cover/cover.go +++ b/pkg/cover/cover.go @@ -36,7 +36,7 @@ import ( log "github.com/sirupsen/logrus" - "github.com/qiniu/goc/pkg/cover/cover2tool" + "github.com/qiniu/goc/pkg/cover/internal/tool" "github.com/sirupsen/logrus" ) @@ -180,13 +180,8 @@ func Execute(coverInfo *CoverInfo) error { if pkg.Name == "main" { log.Printf("handle package: %v", pkg.ImportPath) // inject the main package - mainCover, mainDecl, _ := addCounters2(pkg, mode, globalCoverVarImportPath) + mainCover, mainDecl := AddCounters(pkg, mode, globalCoverVarImportPath) allDecl += mainDecl - // if err != nil { - // log.Errorf("failed to add counters for pkg %s, err: %v", pkg.ImportPath, err) - // return ErrCoverPkgFailed - // } - // new a testcover for this service tc := TestCover{ Mode: mode, @@ -207,7 +202,7 @@ func Execute(coverInfo *CoverInfo) error { //only focus package neither standard Go library nor dependency library if depPkg, ok := pkgs[dep]; ok { - packageCover, depDecl, _ := addCounters2(depPkg, mode, globalCoverVarImportPath) + packageCover, depDecl := AddCounters(depPkg, mode, globalCoverVarImportPath) allDecl += depDecl tc.DepsCover = append(tc.DepsCover, packageCover) seen[dep] = packageCover @@ -268,40 +263,22 @@ func ListPackages(dir string, args string, newgopath string) (map[string]*Packag return pkgs, nil } -// AddCounters add counters for all go files under the package -func AddCounters(pkg *Package, mode, newgopath string) (*PackageCover, error) { - coverVarMap := declareCoverVars(pkg) - - for file, coverVar := range coverVarMap { - cmd := buildCoverCmd(file, coverVar, pkg, mode, newgopath) - out, err := cmd.CombinedOutput() - if err != nil { - return nil, fmt.Errorf("execute go tool cover -mode=%s -var %s -o %s/%s failed, err: %v, out: %s", mode, coverVar.Var, pkg.Dir, file, err, string(out)) - } - } - - return &PackageCover{ - Package: pkg, - Vars: coverVarMap, - }, nil -} - -// addCounters2 is different from official go tool cover +// AddCounters is different from official go tool cover // 1. only inject covervar++ into source file // 2. no declarartions for these covervars // 3. return the declarations as string -func addCounters2(pkg *Package, mode string, globalCoverVarImportPath string) (*PackageCover, string, error) { +func AddCounters(pkg *Package, mode string, globalCoverVarImportPath string) (*PackageCover, string) { coverVarMap := declareCoverVars(pkg) decl := "" for file, coverVar := range coverVarMap { - decl += "\n" + cover2tool.Annotate(path.Join(pkg.Dir, file), mode, coverVar.Var, globalCoverVarImportPath) + "\n" + decl += "\n" + tool.Annotate(path.Join(pkg.Dir, file), mode, coverVar.Var, globalCoverVarImportPath) + "\n" } return &PackageCover{ Package: pkg, Vars: coverVarMap, - }, decl, nil + }, decl } func isDirExist(path string) bool { diff --git a/pkg/cover/cover_test.go b/pkg/cover/cover_test.go index a3952dd..c096990 100644 --- a/pkg/cover/cover_test.go +++ b/pkg/cover/cover_test.go @@ -385,14 +385,4 @@ func TestCoverResultForInternalPackage(t *testing.T) { if !assert.Equal(t, err, nil) { assert.FailNow(t, "should generate http_cover_apis_auto_generated.go") } - - // out, err := ioutil.ReadFile(filepath.Join(testDir, "http_cover_apis_auto_generated.go")) - // if err != nil { - // assert.FailNow(t, "failed to read http_cover_apis_auto_generated.go file") - // } - // cnt := strings.Count(string(out), "GoCacheCover") - // assert.Equal(t, cnt > 0, true, "GoCacheCover variable should be in http_cover_apis_auto_generated.go") - - // cnt = strings.Count(string(out), "example.com/simple-project/internal/foo.go") - // assert.Equal(t, cnt > 0, true, "`example.com/simple-project/internal/foo.go` should be in http_cover_apis_auto_generated.go") } diff --git a/pkg/cover/instrument.go b/pkg/cover/instrument.go index 815c788..63a007d 100644 --- a/pkg/cover/instrument.go +++ b/pkg/cover/instrument.go @@ -402,7 +402,10 @@ func injectGlobalCoverVarFile(ci *CoverInfo, content string) error { packageName := "package " + filepath.Base(ci.GlobalCoverVarImportPath) + "\n\n" - _, _ = coverFile.WriteString(packageName) + _, err = coverFile.WriteString(packageName) + if err != nil { + return err + } _, err = coverFile.WriteString(content) return err diff --git a/pkg/cover/cover2tool/cover.go b/pkg/cover/internal/tool/cover.go similarity index 99% rename from pkg/cover/cover2tool/cover.go rename to pkg/cover/internal/tool/cover.go index bad4b8e..283f535 100644 --- a/pkg/cover/cover2tool/cover.go +++ b/pkg/cover/internal/tool/cover.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package cover2tool +package tool import ( "bytes" diff --git a/pkg/cover/cover2tool/edit.go b/pkg/cover/internal/tool/edit.go similarity index 99% rename from pkg/cover/cover2tool/edit.go rename to pkg/cover/internal/tool/edit.go index f2986d4..ccfca27 100644 --- a/pkg/cover/cover2tool/edit.go +++ b/pkg/cover/internal/tool/edit.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package edit implements buffered position-based editing of byte slices. -package cover2tool +package tool import ( "fmt"