Skip to content

Commit 7425d57

Browse files
committed
Consolidate and simplify ruby-specific logic
Drop emitter package in favor of moving more logic into run and runner packages.
1 parent 0a5ab7b commit 7425d57

File tree

5 files changed

+62
-80
lines changed

5 files changed

+62
-80
lines changed

src/qa/cmd/run/execution-flags.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ import (
99
"strings"
1010

1111
"qa/cmd"
12-
"qa/emitter"
1312
"qa/runner"
1413
"qa/runner/server"
1514
)
1615

16+
var defaultGlobs = map[string]string{
17+
"rspec": "spec/**/*spec.rb",
18+
"minitest": "test/**/test*.rb",
19+
"test-unit": "test/**/test*.rb",
20+
}
21+
1722
type executionFlags struct {
1823
jobs *int
1924
squashPolicy *runner.SquashPolicy
@@ -101,7 +106,7 @@ func (f *executionFlags) RunnerConfigs(env *cmd.Env, runnerSpecs []string) []run
101106
runnerName := runnerSpecSplit[0]
102107
var lister runner.FileLister
103108
if len(runnerSpecSplit) == 1 {
104-
lister = runner.NewFileGlob(env.Dir, []string{emitter.DefaultGlob(runnerName)})
109+
lister = runner.NewFileGlob(env.Dir, []string{defaultGlobs[runnerName]})
105110
} else {
106111
lister = runner.NewFileGlob(env.Dir, runnerSpecSplit[1:])
107112
}

src/qa/cmd/run/run.go

+41-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99
"syscall"
1010

1111
"qa/cmd"
12-
"qa/emitter"
1312
"qa/runner"
13+
"qa/runner/ruby"
1414
"qa/runner/server"
1515
"qa/suite"
1616
"qa/tapjio"
@@ -24,19 +24,56 @@ type Env struct {
2424
Server *server.Server
2525
}
2626

27+
type contextStarter func(
28+
srv *server.Server,
29+
workerEnvs []map[string]string,
30+
runnerConfig runner.Config) (runner.Context, error)
31+
32+
func rubyContextStarter(runnerAssetName string) contextStarter {
33+
return func(
34+
srv *server.Server,
35+
workerEnvs []map[string]string,
36+
runnerConfig runner.Config) (runner.Context, error) {
37+
38+
config := &ruby.ContextConfig{
39+
RunnerConfig: runnerConfig,
40+
Rubylib: []string{"spec", "lib", "test"},
41+
RunnerAssetName: runnerAssetName,
42+
}
43+
44+
ctx, err := ruby.StartContext(srv, workerEnvs, config)
45+
if err != nil {
46+
return nil, err
47+
}
48+
49+
return ctx, nil
50+
}
51+
}
52+
53+
var starters = map[string]contextStarter{
54+
"rspec": rubyContextStarter("ruby/rspec.rb"),
55+
"minitest": rubyContextStarter("ruby/minitest.rb"),
56+
"test-unit": rubyContextStarter("ruby/test-unit.rb"),
57+
}
58+
2759
func Run(env *Env) (tapjio.FinalEvent, error) {
2860
var final tapjio.FinalEvent
2961

3062
var testRunners []runner.TestRunner
3163
for _, runnerConfig := range env.RunnerConfigs {
32-
em, err := emitter.Resolve(env.Server, env.WorkerEnvs, runnerConfig)
33-
defer em.Close()
64+
starter, ok := starters[runnerConfig.Name]
65+
if !ok {
66+
return final, errors.New("Could not find starter: " + runnerConfig.Name)
67+
}
68+
69+
ctx, err := starter(env.Server, env.WorkerEnvs, runnerConfig)
70+
defer ctx.Close()
3471
if err != nil {
3572
fmt.Fprintf(os.Stderr, "Error! %v\n", err)
3673
return final, err
3774
}
3875

39-
traceEvents, runners, err := em.EnumerateTests()
76+
traceEvents, runners, err := ctx.EnumerateRunners()
4077
if err != nil {
4178
return final, err
4279
}

src/qa/emitter/emitter.go

-68
This file was deleted.

src/qa/runner/ruby/ruby.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type context struct {
2525
config *ContextConfig
2626
}
2727

28-
func StartContext(cfg *ContextConfig, server *server.Server, workerEnvs []map[string]string) (*context, error) {
28+
func StartContext(server *server.Server, workerEnvs []map[string]string, cfg *ContextConfig) (*context, error) {
2929
requestCh := make(chan interface{}, 1)
3030

3131
runnerCfg := cfg.RunnerConfig
@@ -90,6 +90,9 @@ func StartContext(cfg *ContextConfig, server *server.Server, workerEnvs []map[st
9090
if err != nil {
9191
return nil, err
9292
}
93+
go func() {
94+
cmd.Process.Wait()
95+
}()
9396

9497
return &context{
9598
requestCh: requestCh,
@@ -100,20 +103,20 @@ func StartContext(cfg *ContextConfig, server *server.Server, workerEnvs []map[st
100103
}
101104

102105
// TODO(adamb) Should also cancel all existing waitgroups
103-
func (self *context) Close() (err error) {
106+
func (self *context) Close() error {
104107
close(self.requestCh)
105108

106109
if self.process != nil {
107-
err = self.process.Kill()
110+
err := self.process.Kill()
108111
if err != nil {
109-
_, err = self.process.Wait()
112+
return err
110113
}
111114
}
112115

113-
return
116+
return nil
114117
}
115118

116-
func (self *context) EnumerateTests() (traceEvents []tapjio.TraceEvent, testRunners []runner.TestRunner, err error) {
119+
func (self *context) EnumerateRunners() (traceEvents []tapjio.TraceEvent, testRunners []runner.TestRunner, err error) {
117120
var wg sync.WaitGroup
118121
wg.Add(1)
119122

src/qa/runner/runner.go

+5
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,8 @@ type Config struct {
117117
func (f *Config) Files() ([]string, error) {
118118
return f.FileLister.ListFiles()
119119
}
120+
121+
type Context interface {
122+
EnumerateRunners() ([]tapjio.TraceEvent, []TestRunner, error)
123+
Close() error
124+
}

0 commit comments

Comments
 (0)