/usr/share/gocode/src/github.com/smartystreets/goconvey/web/server/executor/executor.go is in golang-github-smartystreets-goconvey-dev 1.6.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | package executor
import (
"log"
"time"
"github.com/smartystreets/goconvey/web/server/contract"
)
const (
Idle = "idle"
Executing = "executing"
)
type Executor struct {
tester Tester
parser Parser
status string
statusChan chan chan string
statusFlag bool
}
func (self *Executor) Status() string {
return self.status
}
func (self *Executor) ClearStatusFlag() bool {
hasNewStatus := self.statusFlag
self.statusFlag = false
return hasNewStatus
}
func (self *Executor) ExecuteTests(folders []*contract.Package) *contract.CompleteOutput {
defer func() { self.setStatus(Idle) }()
self.execute(folders)
result := self.parse(folders)
return result
}
func (self *Executor) execute(folders []*contract.Package) {
self.setStatus(Executing)
self.tester.TestAll(folders)
}
func (self *Executor) parse(folders []*contract.Package) *contract.CompleteOutput {
result := &contract.CompleteOutput{Revision: now().String()}
self.parser.Parse(folders)
for _, folder := range folders {
result.Packages = append(result.Packages, folder.Result)
}
return result
}
func (self *Executor) setStatus(status string) {
self.status = status
self.statusFlag = true
Loop:
for {
select {
case c := <-self.statusChan:
self.statusFlag = false
c <- status
default:
break Loop
}
}
log.Printf("Executor status: '%s'\n", self.status)
}
func NewExecutor(tester Tester, parser Parser, ch chan chan string) *Executor {
return &Executor{
tester: tester,
parser: parser,
status: Idle,
statusChan: ch,
statusFlag: false,
}
}
var now = func() time.Time {
return time.Now()
}
|