grim/resticide

move runner to it's own package.
develop
2016-07-09, Gary Kramlich
5eabeab13610
Parents 179fcc7776f8
Children 92fb02aef02c
move runner to it's own package.
  • +2 -3
    main.go
  • +0 -70
    runner.go
  • +70 -0
    runner/runner.go
  • --- a/main.go Sat Jul 09 14:32:43 2016 -0500
    +++ b/main.go Sat Jul 09 14:46:41 2016 -0500
    @@ -9,6 +9,7 @@
    "bitbucket.org/rw_grim/resticide/loader"
    "bitbucket.org/rw_grim/resticide/reporter"
    + "bitbucket.org/rw_grim/resticide/runner"
    )
    func main() {
    @@ -40,7 +41,5 @@
    return
    }
    - failed := RunTests(tests, url, *workers, report)
    -
    - os.Exit(failed)
    + os.Exit(runner.Run(tests, url, *workers, report))
    }
    --- a/runner.go Sat Jul 09 14:32:43 2016 -0500
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,70 +0,0 @@
    -package main
    -
    -import (
    - "net/url"
    - "sync"
    -
    - "bitbucket.org/rw_grim/resticide/reporter"
    - "bitbucket.org/rw_grim/resticide/test"
    -)
    -
    -func testWorker(workerChan chan test.Test, resultChan chan *test.Result, waitGroup *sync.WaitGroup, url *url.URL, reporter *reporter.Reporter) {
    - defer waitGroup.Done()
    -
    - for test := range workerChan {
    - reporter.TestStart(test)
    - res := test.Run(url)
    - reporter.TestFinish(test, *res)
    -
    - resultChan <- res
    - }
    -}
    -
    -// RunTests will run all of the given test with the given arguments
    -func RunTests(tests []test.Test, url *url.URL, nWorkers int, reporter *reporter.Reporter) int {
    - nTests := len(tests)
    - passed := 0
    -
    - reporter.Start(nTests)
    -
    - workerChan := make(chan test.Test)
    - workerWg := new(sync.WaitGroup)
    - resultChan := make(chan *test.Result)
    - resultWg := new(sync.WaitGroup)
    -
    - // create our result processor
    - resultWg.Add(1)
    - go func(resultWg *sync.WaitGroup, resultChan chan *test.Result) {
    - defer resultWg.Done()
    -
    - for result := range resultChan {
    - if result.Passed {
    - passed++
    - }
    - }
    - }(resultWg, resultChan)
    -
    - // create our workers
    - for i := 0; i < nWorkers; i++ {
    - workerWg.Add(1)
    - go testWorker(workerChan, resultChan, workerWg, url, reporter)
    - }
    -
    - // add each test to the channel
    - for _, test := range tests {
    - workerChan <- test
    - }
    -
    - // clean up the channel and wait for all the workers to finish
    - close(workerChan)
    - workerWg.Wait()
    -
    - close(resultChan)
    - resultWg.Wait()
    -
    - failed := nTests - passed
    -
    - reporter.Finish(nTests, passed, failed)
    -
    - return failed
    -}
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/runner/runner.go Sat Jul 09 14:46:41 2016 -0500
    @@ -0,0 +1,70 @@
    +package runner
    +
    +import (
    + "net/url"
    + "sync"
    +
    + "bitbucket.org/rw_grim/resticide/reporter"
    + "bitbucket.org/rw_grim/resticide/test"
    +)
    +
    +func testWorker(workerChan chan test.Test, resultChan chan *test.Result, waitGroup *sync.WaitGroup, url *url.URL, reporter *reporter.Reporter) {
    + defer waitGroup.Done()
    +
    + for test := range workerChan {
    + reporter.TestStart(test)
    + res := test.Run(url)
    + reporter.TestFinish(test, *res)
    +
    + resultChan <- res
    + }
    +}
    +
    +// Run will run all of the given test with the given arguments
    +func Run(tests []test.Test, url *url.URL, nWorkers int, reporter *reporter.Reporter) int {
    + nTests := len(tests)
    + passed := 0
    +
    + reporter.Start(nTests)
    +
    + workerChan := make(chan test.Test)
    + workerWg := new(sync.WaitGroup)
    + resultChan := make(chan *test.Result)
    + resultWg := new(sync.WaitGroup)
    +
    + // create our result processor
    + resultWg.Add(1)
    + go func(resultWg *sync.WaitGroup, resultChan chan *test.Result) {
    + defer resultWg.Done()
    +
    + for result := range resultChan {
    + if result.Passed {
    + passed++
    + }
    + }
    + }(resultWg, resultChan)
    +
    + // create our workers
    + for i := 0; i < nWorkers; i++ {
    + workerWg.Add(1)
    + go testWorker(workerChan, resultChan, workerWg, url, reporter)
    + }
    +
    + // add each test to the channel
    + for _, test := range tests {
    + workerChan <- test
    + }
    +
    + // clean up the channel and wait for all the workers to finish
    + close(workerChan)
    + workerWg.Wait()
    +
    + close(resultChan)
    + resultWg.Wait()
    +
    + failed := nTests - passed
    +
    + reporter.Finish(nTests, passed, failed)
    +
    + return failed
    +}