fix unit test

add test for cover package

add unit test
This commit is contained in:
lyyyuna 2020-06-18 18:08:48 +08:00
parent 7916d1ee68
commit 5892de106b
9 changed files with 117 additions and 17 deletions

View File

@ -46,7 +46,7 @@ func TestGeneratedBinary(t *testing.T) {
args := []string{"."} args := []string{"."}
runBuild(args, workingDir) runBuild(args, workingDir)
obj := filepath.Join(".", "simple-project") obj := filepath.Join(workingDir, "simple-project")
fInfo, err := os.Lstat(obj) fInfo, err := os.Lstat(obj)
assert.Equal(t, err, nil, "the binary should be generated.") 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") assert.Equal(t, startTime.Before(fInfo.ModTime()), true, obj+"new binary should be generated, not the old one")

View File

@ -36,6 +36,7 @@ Find more information at:
`, `,
PersistentPreRun: func(cmd *cobra.Command, args []string) { PersistentPreRun: func(cmd *cobra.Command, args []string) {
log.SetReportCaller(true) log.SetReportCaller(true)
log.SetLevel(log.InfoLevel)
log.SetFormatter(&log.TextFormatter{ log.SetFormatter(&log.TextFormatter{
FullTimestamp: true, FullTimestamp: true,
CallerPrettyfier: func(f *runtime.Frame) (string, string) { CallerPrettyfier: func(f *runtime.Frame) (string, string) {

View File

@ -41,7 +41,7 @@ goc run .
if err != nil { if err != nil {
log.Fatalf("Fail to build: %v", err) log.Fatalf("Fail to build: %v", err)
} }
gocBuild, err := build.NewBuild(buildFlags, args, buildOutput, wd) gocBuild, err := build.NewBuild(buildFlags, args, wd, buildOutput)
if err != nil { if err != nil {
log.Fatalf("Fail to run: %v", err) log.Fatalf("Fail to run: %v", err)
} }

View File

@ -149,5 +149,7 @@ func checkParameters(args []string, workingDir string) error {
if workingDir == "" { if workingDir == "" {
return ErrInvalidWorkingDir return ErrInvalidWorkingDir
} }
log.Infof("Working directory: %v", workingDir)
return nil return nil
} }

View File

@ -17,6 +17,8 @@
package build package build
import ( import (
"errors"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -32,21 +34,59 @@ func TestInvalidPackage(t *testing.T) {
os.Setenv("GOPATH", gopath) os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on") os.Setenv("GO111MODULE", "on")
_, err := NewBuild("", []string{"example.com/simple-project"}, "", workingDir) _, err := NewBuild("", []string{"example.com/simple-project"}, workingDir, "")
assert.Equal(t, err, ErrWrongPackageTypeForBuild, "the package name should be invalid") if !assert.Equal(t, err, ErrWrongPackageTypeForBuild) {
assert.FailNow(t, "the package name should be invalid")
}
} }
func TestBasicBuildForModProject(t *testing.T) { func TestBasicBuildForModProject(t *testing.T) {
workingDir := filepath.Join(baseDir, "../tests/samples/simple_project") workingDir := filepath.Join(baseDir, "../../tests/samples/simple_project")
gopath := "" gopath := ""
os.Setenv("GOPATH", gopath) os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on") os.Setenv("GO111MODULE", "on")
fmt.Println(workingDir)
buildFlags, args, buildOutput := "", []string{"."}, "" buildFlags, args, buildOutput := "", []string{"."}, ""
gocBuild, err := NewBuild(buildFlags, args, buildOutput, workingDir) gocBuild, err := NewBuild(buildFlags, args, workingDir, buildOutput)
assert.Equal(t, err, nil, "should create temporary directory successfully") if !assert.Equal(t, err, nil) {
assert.FailNow(t, "should create temporary directory successfully")
}
err = gocBuild.Build() err = gocBuild.Build()
assert.Equal(t, err, nil, "temporary directory should build successfully") if !assert.Equal(t, err, nil) {
assert.FailNow(t, "temporary directory should build successfully")
}
}
func TestCheckParameters(t *testing.T) {
err := checkParameters([]string{"aa", "bb"}, "aa")
assert.Equal(t, err, ErrTooManyArgs, "too many arguments should failed")
err = checkParameters([]string{"aa"}, "")
assert.Equal(t, err, ErrInvalidWorkingDir, "empty working directory should failed")
}
func TestDetermineOutputDir(t *testing.T) {
b := &Build{}
_, err := b.determineOutputDir("")
assert.Equal(t, errors.Is(err, ErrWrongCallSequence), true, "called before Build.MvProjectsToTmp() should fail")
b.TmpDir = "fake"
_, err = b.determineOutputDir("xx")
assert.Equal(t, err, nil, "should return a directory")
}
func TestInvalidPackageNameForBuild(t *testing.T) {
workingDir := filepath.Join(baseDir, "../../tests/samples/simple_project")
gopath := filepath.Join(baseDir, "../../tests/samples/simple_project", "testhome")
os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on")
buildFlags, packages := "", []string{"main.go"}
_, err := NewBuild(buildFlags, packages, workingDir, "")
if !assert.Equal(t, err, ErrWrongPackageTypeForBuild) {
assert.FailNow(t, "should not success with non . or ./... package")
}
} }

View File

@ -9,16 +9,34 @@ import (
) )
func TestBasicInstallForModProject(t *testing.T) { func TestBasicInstallForModProject(t *testing.T) {
workingDir := filepath.Join(baseDir, "../tests/samples/simple_project") workingDir := filepath.Join(baseDir, "../../tests/samples/simple_project")
gopath := filepath.Join(baseDir, "../tests/samples/simple_project", "testhome") gopath := filepath.Join(baseDir, "../../tests/samples/simple_project", "testhome")
os.Setenv("GOPATH", gopath) os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on") os.Setenv("GO111MODULE", "on")
buildFlags, packages := "", []string{"."} buildFlags, packages := "", []string{"."}
gocBuild, err := NewInstall(buildFlags, packages, workingDir) gocBuild, err := NewInstall(buildFlags, packages, workingDir)
assert.Equal(t, err, nil, "should create temporary directory successfully") if !assert.Equal(t, err, nil) {
assert.FailNow(t, "should create temporary directory successfully")
}
err = gocBuild.Install() err = gocBuild.Install()
assert.Equal(t, err, nil, "temporary directory should build successfully") if !assert.Equal(t, err, nil) {
assert.FailNow(t, "temporary directory should build successfully")
}
}
func TestInvalidPackageNameForInstall(t *testing.T) {
workingDir := filepath.Join(baseDir, "../../tests/samples/simple_project")
gopath := filepath.Join(baseDir, "../../tests/samples/simple_project", "testhome")
os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on")
buildFlags, packages := "", []string{"main.go"}
_, err := NewInstall(buildFlags, packages, workingDir)
if !assert.Equal(t, err, ErrWrongPackageTypeForInstall) {
assert.FailNow(t, "should not success with non . or ./... package")
}
} }

View File

@ -36,7 +36,7 @@ func (b *Build) MvProjectsToTmp() error {
} }
listArgs = append(listArgs, "./...") listArgs = append(listArgs, "./...")
var err error var err error
b.Pkgs, err = cover.ListPackages(".", strings.Join(listArgs, " "), "") b.Pkgs, err = cover.ListPackages(b.WorkingDir, strings.Join(listArgs, " "), "")
if err != nil { if err != nil {
log.Errorln(err) log.Errorln(err)
return err return err
@ -81,6 +81,7 @@ func (b *Build) mvProjectsToTmp() error {
// traverse pkg list to get project meta info // traverse pkg list to get project meta info
b.IsMod, b.Root, err = b.traversePkgsList() b.IsMod, b.Root, err = b.traversePkgsList()
log.Infof("mod project? %v", b.IsMod)
if errors.Is(err, ErrShouldNotReached) { if errors.Is(err, ErrShouldNotReached) {
return fmt.Errorf("mvProjectsToTmp with a empty project: %w", err) return fmt.Errorf("mvProjectsToTmp with a empty project: %w", err)
} }

View File

@ -46,7 +46,7 @@ func TestNewDirParseInLegacyProject(t *testing.T) {
t.Fatalf("The New GOPATH is wrong. newgopath: %v, tmpdir: %v", b.NewGOPATH, b.TmpDir) t.Fatalf("The New GOPATH is wrong. newgopath: %v, tmpdir: %v", b.NewGOPATH, b.TmpDir)
} }
b, _ = NewBuild("", []string{"."}, "", workingDir) b, _ = NewBuild("", []string{"."}, workingDir, "")
if -1 == strings.Index(b.TmpWorkingDir, b.TmpDir) { if -1 == strings.Index(b.TmpWorkingDir, b.TmpDir) {
t.Fatalf("Directory parse error. newwd: %v, tmpdir: %v", b.TmpWorkingDir, b.TmpDir) t.Fatalf("Directory parse error. newwd: %v, tmpdir: %v", b.TmpWorkingDir, b.TmpDir)
} }
@ -73,7 +73,7 @@ func TestNewDirParseInModProject(t *testing.T) {
t.Fatalf("The New GOPATH is wrong. newgopath: %v, tmpdir: %v", b.NewGOPATH, b.TmpDir) t.Fatalf("The New GOPATH is wrong. newgopath: %v, tmpdir: %v", b.NewGOPATH, b.TmpDir)
} }
b, _ = NewBuild("", []string{"."}, "", workingDir) b, _ = NewBuild("", []string{"."}, workingDir, "")
if -1 == strings.Index(b.TmpWorkingDir, b.TmpDir) { if -1 == strings.Index(b.TmpWorkingDir, b.TmpDir) {
t.Fatalf("Directory parse error. newwd: %v, tmpdir: %v", b.TmpWorkingDir, b.TmpDir) t.Fatalf("Directory parse error. newwd: %v, tmpdir: %v", b.TmpWorkingDir, b.TmpDir)
} }
@ -92,7 +92,7 @@ func TestLegacyProjectNotInGoPATH(t *testing.T) {
os.Setenv("GOPATH", gopath) os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "off") os.Setenv("GO111MODULE", "off")
b, _ := NewBuild("", []string{"."}, "", workingDir) b, _ := NewBuild("", []string{"."}, workingDir, "")
if b.OriGOPATH != b.NewGOPATH { if b.OriGOPATH != b.NewGOPATH {
t.Fatalf("New GOPATH should be same with old GOPATH, for this kind of project. New: %v, old: %v", b.NewGOPATH, b.OriGOPATH) t.Fatalf("New GOPATH should be same with old GOPATH, for this kind of project. New: %v, old: %v", b.NewGOPATH, b.OriGOPATH)
} }

View File

@ -27,6 +27,7 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/otiai10/copy"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -304,3 +305,40 @@ func TestFindInternal(t *testing.T) {
} }
} }
} }
func TestExecuteForSimpleModProject(t *testing.T) {
workingDir := "../../tests/samples/simple_project"
gopath := ""
os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on")
testDir := filepath.Join(os.TempDir(), "goc-build-test")
copy.Copy(workingDir, testDir)
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) {
assert.FailNow(t, "should generate http_cover_apis_auto_generated.go")
}
}
func TestListPackagesForSimpleModProject(t *testing.T) {
workingDir := "../../tests/samples/simple_project"
gopath := ""
os.Setenv("GOPATH", gopath)
os.Setenv("GO111MODULE", "on")
pkgs, _ := ListPackages(workingDir, "-json ./...", "")
if !assert.Equal(t, len(pkgs), 1) {
assert.FailNow(t, "should only have one pkg")
}
if pkg, ok := pkgs["example.com/simple-project"]; ok {
assert.Equal(t, pkg.Module.Path, "example.com/simple-project")
} else {
assert.FailNow(t, "cannot get the pkg: example.com/simple-project")
}
}