From d078f6dc10eb265a5d88cd96adf86173d6d3ba2e Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Thu, 2 Sep 2021 03:14:47 -0500 Subject: Make adapters and internals complient with new directory structure --- runner.go | 48 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 3bee17a..f2eb8e9 100644 --- a/runner.go +++ b/runner.go @@ -3,10 +3,12 @@ package planr import ( "log" "os" + "path" ) type Runner struct { adapters []Adapter + DirConfig } func (r *Runner) RegisterAdapter(a Adapter) { @@ -43,12 +45,17 @@ func (r Runner) checkConfig(tcs []TestCase) { } } -func cdBuild(adapter Adapter) { - dir := adapter.Config().Dir() +func (r Runner) setupEnv(adapter Adapter) { + nm := adapter.Config().Name + wd := path.Join(r.BuildDir(), nm) - if err := os.Chdir(dir); err != nil { - log.Fatal(err) - } + if !directoryExists(wd) { + if err := os.Mkdir(wd, 0755); err != nil { + log.Fatalf("Could not create adapter config %s %v\n", wd, err) + } + } + + safeCd(wd) } func (r Runner) build(tcs []TestCase) { @@ -58,18 +65,25 @@ func (r Runner) build(tcs []TestCase) { for _, adapter := range r.adapters { nm := adapter.Config().Name - cdBuild(adapter) + r.setupEnv(adapter) adapter.Build(tcTab[nm]) } + + safeCd(r.ConfigDir()) } -func (r Runner) units(root string) []TestCase { - return collectUnits(root, r.adapterCfgs()) +func (r Runner) units() []TestCase { + return collectUnits(r.RubricDir(), r.adapterCfgs()) } -func (r Runner) Build(root string) { - units := r.units(root) +func (r Runner) Build() { + units := r.units() + + if !directoryExists(r.BuildDir()) { + r.MkBuildDir() + } + r.build(units) } @@ -78,16 +92,22 @@ func (r Runner) evaluate(tcs []TestCase) { for _, adapter := range r.adapters { nm := adapter.Config().Name - cdBuild(adapter) - + + r.setupEnv(adapter) adapter.Evaluate(tcTab[nm]) } + + safeCd(r.ConfigDir()) } -func (r Runner) Evaluate(root string) []TestCase { - units := r.units(root) +func (r Runner) Evaluate() []TestCase { + units := r.units() r.evaluate(units) return units } + +func (r Runner) Clean() { + r.CleanBuildDir() +} -- cgit v1.2.3 From 287d029975b7718109f81b480079f375f7d8700a Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Fri, 3 Sep 2021 00:02:31 -0500 Subject: Add clean option and fix issue with dir propegation --- runner.go | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index f2eb8e9..0a6243c 100644 --- a/runner.go +++ b/runner.go @@ -8,7 +8,7 @@ import ( type Runner struct { adapters []Adapter - DirConfig + dirs DirConfig } func (r *Runner) RegisterAdapter(a Adapter) { @@ -47,7 +47,7 @@ func (r Runner) checkConfig(tcs []TestCase) { func (r Runner) setupEnv(adapter Adapter) { nm := adapter.Config().Name - wd := path.Join(r.BuildDir(), nm) + wd := path.Join(r.dirs.Build(), nm) if !directoryExists(wd) { if err := os.Mkdir(wd, 0755); err != nil { @@ -70,18 +70,26 @@ func (r Runner) build(tcs []TestCase) { adapter.Build(tcTab[nm]) } - safeCd(r.ConfigDir()) + safeCd(r.dirs.Config()) +} + +func (r Runner) init_adapters() { + for _, adapter := range r.adapters { + adapter.Init(r.dirs) + } } func (r Runner) units() []TestCase { - return collectUnits(r.RubricDir(), r.adapterCfgs()) + return collectUnits(r.dirs.Rubric(), r.adapterCfgs()) } func (r Runner) Build() { - units := r.units() + r.init_adapters() - if !directoryExists(r.BuildDir()) { - r.MkBuildDir() + units := r.units() + + if !directoryExists(r.dirs.Build()) { + r.dirs.MkBuild() } r.build(units) @@ -97,10 +105,12 @@ func (r Runner) evaluate(tcs []TestCase) { adapter.Evaluate(tcTab[nm]) } - safeCd(r.ConfigDir()) + safeCd(r.dirs.Config()) } func (r Runner) Evaluate() []TestCase { + r.init_adapters() + units := r.units() r.evaluate(units) @@ -109,5 +119,9 @@ func (r Runner) Evaluate() []TestCase { } func (r Runner) Clean() { - r.CleanBuildDir() + r.dirs.CleanBuild() +} + +func (r * Runner) SetConfigDirFromTree(childPath string) { + r.dirs.SetConfigFromTree(childPath) } -- cgit v1.2.3 From 38912d85394604fe9cc238ef6eb9f6e75ceb38f9 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Fri, 3 Sep 2021 18:13:49 -0500 Subject: Add config command to retrieve configuration values and clean command to clean build files --- runner.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 0a6243c..9014b8c 100644 --- a/runner.go +++ b/runner.go @@ -125,3 +125,27 @@ func (r Runner) Clean() { func (r * Runner) SetConfigDirFromTree(childPath string) { r.dirs.SetConfigFromTree(childPath) } + +func (r * Runner) SetBuildDir(dir string) { + r.dirs.SetBuild(dir) +} + +func (r * Runner) SetConfigDir(dir string) { + r.dirs.SetConfig(dir) +} + +func (r * Runner) SetSrcDir(dir string) { + r.dirs.SetSrc(dir) +} + +func (r Runner) BuildDir() string { + return r.dirs.Build(); +} + +func (r Runner) ConfigDir() string { + return r.dirs.Config() +} + +func (r Runner) SrcDir() string { + return r.dirs.Src() +} -- cgit v1.2.3 From 8fa0c34eac027c69a0fce8b5a8251e394cd4d888 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Fri, 3 Sep 2021 20:41:11 -0500 Subject: Don't export testcase LUT --- runner.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 9014b8c..c0c926a 100644 --- a/runner.go +++ b/runner.go @@ -25,10 +25,10 @@ func (r Runner) adapterCfgs() []AdapterConfig { return cgs } -type TcTab map[string] []*TestCase +type tcTab map[string] []*TestCase -func (r Runner) buildTcLUT(tcs []TestCase) TcTab { - m := make(TcTab, 0) +func (r Runner) buildTcLUT(tcs []TestCase) tcTab { + m := make(tcTab, 0) for i := range tcs { tc := &tcs[i] -- cgit v1.2.3 From 2d197f1ce3eac8cecb5a655fcb5343cbe562ab1a Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Fri, 3 Sep 2021 21:14:28 -0500 Subject: Add new test runner API --- runner.go | 20 -------------------- 1 file changed, 20 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index c0c926a..1cc509e 100644 --- a/runner.go +++ b/runner.go @@ -11,10 +11,6 @@ type Runner struct { dirs DirConfig } -func (r *Runner) RegisterAdapter(a Adapter) { - r.adapters = append(r.adapters, a) -} - func (r Runner) adapterCfgs() []AdapterConfig { cgs := make([]AdapterConfig, len(r.adapters)) @@ -122,22 +118,6 @@ func (r Runner) Clean() { r.dirs.CleanBuild() } -func (r * Runner) SetConfigDirFromTree(childPath string) { - r.dirs.SetConfigFromTree(childPath) -} - -func (r * Runner) SetBuildDir(dir string) { - r.dirs.SetBuild(dir) -} - -func (r * Runner) SetConfigDir(dir string) { - r.dirs.SetConfig(dir) -} - -func (r * Runner) SetSrcDir(dir string) { - r.dirs.SetSrc(dir) -} - func (r Runner) BuildDir() string { return r.dirs.Build(); } -- cgit v1.2.3 From b3252d2bd488b5b58cf0e46151ff9db0721c5fc6 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Sat, 4 Sep 2021 13:41:52 -0500 Subject: Add runner initalization --- runner.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 1cc509e..d3d4b08 100644 --- a/runner.go +++ b/runner.go @@ -69,19 +69,11 @@ func (r Runner) build(tcs []TestCase) { safeCd(r.dirs.Config()) } -func (r Runner) init_adapters() { - for _, adapter := range r.adapters { - adapter.Init(r.dirs) - } -} - func (r Runner) units() []TestCase { return collectUnits(r.dirs.Rubric(), r.adapterCfgs()) } func (r Runner) Build() { - r.init_adapters() - units := r.units() if !directoryExists(r.dirs.Build()) { @@ -105,7 +97,6 @@ func (r Runner) evaluate(tcs []TestCase) { } func (r Runner) Evaluate() []TestCase { - r.init_adapters() units := r.units() @@ -129,3 +120,13 @@ func (r Runner) ConfigDir() string { func (r Runner) SrcDir() string { return r.dirs.Src() } + +func NewRunner(adapters []Adapter, dirs DirConfig) Runner { + r := Runner{adapters, dirs} + + for _, adapter := range r.adapters { + adapter.Init(dirs) + } + + return r +} -- cgit v1.2.3 From cc7ba659adbc5ad55e1ce67f76952f2b8392c9c9 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Sat, 4 Sep 2021 15:38:30 -0500 Subject: Refactor build/eval pipeline to use clearer IO model and adapter segmentation methods --- runner.go | 100 ++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 39 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index d3d4b08..f613d44 100644 --- a/runner.go +++ b/runner.go @@ -7,8 +7,8 @@ import ( ) type Runner struct { - adapters []Adapter - dirs DirConfig + adapters map[string] Adapter + dirs DirConfig } func (r Runner) adapterCfgs() []AdapterConfig { @@ -21,20 +21,7 @@ func (r Runner) adapterCfgs() []AdapterConfig { return cgs } -type tcTab map[string] []*TestCase - -func (r Runner) buildTcLUT(tcs []TestCase) tcTab { - m := make(tcTab, 0) - - for i := range tcs { - tc := &tcs[i] - nm := *tc.Config.Adapter - m[nm] = append(m[nm], tc) - } - - return m -} - +// TODO: Move into configuration parsing func (r Runner) checkConfig(tcs []TestCase) { for _, tc := range tcs { tc.Config.ensureSatisfied(tc.Path) @@ -54,55 +41,90 @@ func (r Runner) setupEnv(adapter Adapter) { safeCd(wd) } -func (r Runner) build(tcs []TestCase) { +type adapterTestSet struct { + adapter Adapter + tcs []TestCase +} + +func (r Runner) groupByAdapter(tcs []TestCase) []adapterTestSet { r.checkConfig(tcs) + + pairs := make(map[string] adapterTestSet, 0) - tcTab := r.buildTcLUT(tcs) + for _, tc := range tcs { + // TODO: Make non-pointer + adptNm := *tc.Config.Adapter + + // See if adapter if contained in map + adapter, contained := r.adapters[adptNm] + + if !contained { + log.Fatalf("Cannot find adapter \"%s\" for testcase \"%s\"", adptNm, tc.Cname) + } - for _, adapter := range r.adapters { - nm := adapter.Config().Name - r.setupEnv(adapter) + pair, exists := pairs[adptNm] - adapter.Build(tcTab[nm]) + if !exists { + pair.adapter = adapter + } + + pair.tcs = append(pair.tcs, tc) + + pairs[adptNm] = pair } - safeCd(r.dirs.Config()) + + // Convert to slice + set := make([]adapterTestSet, 0) + + for _, pair := range pairs { + set = append(set, pair) + } + + return set } -func (r Runner) units() []TestCase { +func (r Runner) CollectCases() []TestCase { return collectUnits(r.dirs.Rubric(), r.adapterCfgs()) } -func (r Runner) Build() { - units := r.units() +func (r Runner) Build(tcs []TestCase) { if !directoryExists(r.dirs.Build()) { r.dirs.MkBuild() } - r.build(units) -} + testSets := r.groupByAdapter(tcs) -func (r Runner) evaluate(tcs []TestCase) { - tcTab := r.buildTcLUT(tcs) - - for _, adapter := range r.adapters { - nm := adapter.Config().Name + for _, pair := range testSets { + adapter := pair.adapter + cases := pair.tcs r.setupEnv(adapter) - adapter.Evaluate(tcTab[nm]) + + adapter.Build(cases) } safeCd(r.dirs.Config()) } -func (r Runner) Evaluate() []TestCase { +func (r Runner) Evaluate(tcs []TestCase) []TestCase { + testSets := r.groupByAdapter(tcs) + results := make([]TestCase, 0) - units := r.units() + for _, pair := range testSets { + adapter := pair.adapter + cases := pair.tcs + + r.setupEnv(adapter) + resultSet := adapter.Evaluate(cases) - r.evaluate(units) + results = append(results, resultSet...) + } + + safeCd(r.dirs.Config()) - return units + return results } func (r Runner) Clean() { @@ -121,7 +143,7 @@ func (r Runner) SrcDir() string { return r.dirs.Src() } -func NewRunner(adapters []Adapter, dirs DirConfig) Runner { +func NewRunner(adapters map[string]Adapter, dirs DirConfig) Runner { r := Runner{adapters, dirs} for _, adapter := range r.adapters { -- cgit v1.2.3 From 151d516e68f5d43aa2d0c5ff462752d640b6a614 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Sun, 5 Sep 2021 00:37:23 -0500 Subject: Refactor gtest adapter to fit new pipeline --- runner.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index f613d44..2d66dc6 100644 --- a/runner.go +++ b/runner.go @@ -108,9 +108,9 @@ func (r Runner) Build(tcs []TestCase) { safeCd(r.dirs.Config()) } -func (r Runner) Evaluate(tcs []TestCase) []TestCase { +func (r Runner) Evaluate(tcs []TestCase) []TestResult { testSets := r.groupByAdapter(tcs) - results := make([]TestCase, 0) + results := make([]TestResult, 0) for _, pair := range testSets { adapter := pair.adapter -- cgit v1.2.3 From 2ccad1c9bc42093fb341faed26ea41c1463fcfae Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Sun, 5 Sep 2021 04:40:39 -0500 Subject: Concurrent Eval Loop --- runner.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 2d66dc6..9c1e385 100644 --- a/runner.go +++ b/runner.go @@ -111,15 +111,22 @@ func (r Runner) Build(tcs []TestCase) { func (r Runner) Evaluate(tcs []TestCase) []TestResult { testSets := r.groupByAdapter(tcs) results := make([]TestResult, 0) - + + c := make(chan []TestResult) for _, pair := range testSets { - adapter := pair.adapter - cases := pair.tcs + go func (pair adapterTestSet) { + adapter := pair.adapter + cases := pair.tcs - r.setupEnv(adapter) - resultSet := adapter.Evaluate(cases) + r.setupEnv(adapter) + resultSet := adapter.Evaluate(cases) + + c <- resultSet + }(pair) + } - results = append(results, resultSet...) + for range testSets { + results = append(results, (<-c)...) } safeCd(r.dirs.Config()) -- cgit v1.2.3 From 7f3a568983470016bf99baafb4db47c8223c0494 Mon Sep 17 00:00:00 2001 From: Flu0r1ne Date: Sun, 5 Sep 2021 13:38:27 -0500 Subject: Preserve original ordering --- runner.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'runner.go') diff --git a/runner.go b/runner.go index 9c1e385..15f08ae 100644 --- a/runner.go +++ b/runner.go @@ -4,6 +4,7 @@ import ( "log" "os" "path" + "sort" ) type Runner struct { @@ -128,6 +129,8 @@ func (r Runner) Evaluate(tcs []TestCase) []TestResult { for range testSets { results = append(results, (<-c)...) } + + sort.Sort(ByReadIdx(results)) safeCd(r.dirs.Config()) -- cgit v1.2.3