/
strategy_unittest.go
102 lines (87 loc) · 2.38 KB
/
strategy_unittest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package engine
import (
"path/filepath"
"strconv"
"sync"
"github.com/golang/glog"
"github.com/json-iterator/go"
"github.com/360EntSecGroup-Skylar/goreporter/linters/unittest"
"github.com/360EntSecGroup-Skylar/goreporter/utils"
)
type StrategyUnitTest struct {
Sync *Synchronizer `inject:""`
sumCover float64
countCover int
}
func (s *StrategyUnitTest) GetName() string {
return "UnitTest"
}
func (s *StrategyUnitTest) GetDescription() string {
return "Run all valid TEST in your golang package.And will measure from both coverage and time-consuming."
}
func (s *StrategyUnitTest) GetWeight() float64 {
return 0.3
}
func (s *StrategyUnitTest) Compute(parameters StrategyParameter) (summaries *Summaries) {
summaries = NewSummaries()
sumProcessNumber := int64(30)
processUnit := utils.GetProcessUnit(sumProcessNumber, len(parameters.UnitTestDirs))
var pkg sync.WaitGroup
for pkgName, pkgPath := range parameters.UnitTestDirs {
pkg.Add(1)
go func(pkgName, pkgPath string) {
unitTestRes, _ := unittest.UnitTest("." + string(filepath.Separator) + pkgPath)
var packageTest PackageTest
if len(unitTestRes) >= 5 {
if unitTestRes[0] == "ok" {
packageTest.IsPass = true
} else {
packageTest.IsPass = false
}
timeLen := len(unitTestRes[2])
if timeLen > 1 {
t, err := strconv.ParseFloat(unitTestRes[2][:(timeLen-1)], 64)
if err == nil {
packageTest.Time = t
} else {
glog.Errorln(err)
}
}
packageTest.Coverage = unitTestRes[4]
coverLen := len(unitTestRes[4])
if coverLen > 1 {
coverFloat, _ := strconv.ParseFloat(unitTestRes[4][:(coverLen-1)], 64)
s.sumCover = s.sumCover + coverFloat
}
s.countCover++
} else {
packageTest.Coverage = "0%"
s.countCover++
}
jsonStringPackageTest, err := jsoniter.Marshal(packageTest)
if err != nil {
glog.Errorln(err)
}
summaries.Lock()
summaries.Summaries[pkgName] = Summary{
Name: pkgName,
Description: string(jsonStringPackageTest),
}
summaries.Unlock()
pkg.Done()
}(pkgName, pkgPath)
if sumProcessNumber > 0 {
s.Sync.LintersProcessChans <- processUnit
sumProcessNumber = sumProcessNumber - processUnit
}
}
pkg.Wait()
return
}
func (s *StrategyUnitTest) Percentage(summaries *Summaries) float64 {
if s.countCover == 0 {
return 0.0
} else {
return s.sumCover / float64(s.countCover)
}
}