Skip to content
This repository was archived by the owner on Sep 17, 2022. It is now read-only.

Commit 19cc484

Browse files
committed
Moved file loading logic in a package
1 parent 5d2259f commit 19cc484

File tree

4 files changed

+86
-65
lines changed

4 files changed

+86
-65
lines changed

cmd/check.go

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
package cmd
22

33
import (
4-
"errors"
5-
"os"
6-
"path/filepath"
7-
8-
"github.com/getapid/apid/env"
4+
"github.com/getapid/apid/file"
95
"github.com/getapid/apid/http"
10-
"github.com/getapid/apid/log"
116
"github.com/getapid/apid/spec"
12-
"github.com/getapid/apid/spec/loader"
137
"github.com/getapid/apid/spec/runner"
148
"github.com/getapid/apid/step"
159
"github.com/getapid/apid/writer"
@@ -21,8 +15,6 @@ var (
2115
parallelism int
2216
json bool
2317
silent bool
24-
25-
ErrTestFailedError = errors.New("tests_failed")
2618
)
2719

2820
var checkCmd = &cobra.Command{
@@ -46,60 +38,16 @@ func init() {
4638
checkCmd.Flags().BoolVar(&silent, "silent", false, "set output mode to silent only printing the end result of the tests")
4739
}
4840

49-
const (
50-
ExitCodeOK int = 0
51-
52-
ExitCodeErrTestFailure int = 1
53-
ExitCodeErrReadingSpec int = 100
54-
ExitCodeErrInvalidSpecFormat int = 101
55-
)
56-
5741
func check(cmd *cobra.Command, args []string) error {
58-
files, err := filepath.Glob(specPattern)
59-
if err != nil {
60-
log.L.Errorf("error finding files: %s", err)
61-
}
62-
63-
if len(files) == 0 {
64-
log.L.Fatalf("no files found matching pattern: %s", specPattern)
65-
}
66-
67-
var specLoader loader.JsonnetLoader
68-
hasError := false
69-
70-
specs := make(map[string]spec.Spec)
71-
for _, file := range files {
72-
jsonSpecs, err := specLoader.Load(file, env.LoadVars())
73-
if err != nil {
74-
os.Exit(ExitCodeErrReadingSpec)
75-
}
76-
for name, jsonSpec := range jsonSpecs {
77-
spec, err := spec.Unmarshal([]byte(jsonSpec))
78-
hasError = hasError || err != nil
79-
80-
if _, ok := specs[name]; ok {
81-
log.L.Fatalf("duplicate spec with name %s", name)
82-
}
83-
84-
if len(spec.Name) == 0 {
85-
spec.Name = name
86-
}
87-
88-
specs[name] = spec
89-
}
90-
}
91-
92-
if hasError {
93-
os.Exit(ExitCodeErrInvalidSpecFormat)
94-
}
42+
specLoader := spec.NewSpecLoader(file.JsonnetReader{})
43+
specs := specLoader.Load(specPattern)
9544

9645
var w writer.Writer
9746
if json {
9847
w = writer.NewJSON(cmd.OutOrStdout())
9948
} else {
10049
w = writer.NewConsole(cmd.OutOrStdout(), silent)
10150
}
102-
w.Prelude()
10351

10452
httpClient := http.NewClient()
10553
stepHttpClient := step.NewHTTPClient(httpClient)
@@ -108,6 +56,9 @@ func check(cmd *cobra.Command, args []string) error {
10856
stepExporter := step.NewExporter()
10957
stepRunner := step.NewRunner(stepHttpClient, *stepInterpolator, stepValidator, stepExporter)
11058
specRunner := runner.NewParallelSpecRunner(parallelism, stepRunner, w)
59+
60+
w.Prelude()
61+
11162
specRunner.Run(specs)
11263

11364
w.Conclusion()
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package loader
1+
package file
22

33
import (
44
"fmt"
@@ -10,13 +10,13 @@ import (
1010
"github.com/google/go-jsonnet"
1111
)
1212

13-
type Loader interface {
14-
Load(file string, environment env.Vars) (map[string]string, error)
13+
type Reader interface {
14+
Load(file string, environment env.Vars) map[string]string
1515
}
1616

17-
type JsonnetLoader struct{}
17+
type JsonnetReader struct{}
1818

19-
func (l JsonnetLoader) Load(path string, environment env.Vars) (map[string]string, error) {
19+
func (l JsonnetReader) Load(path string, environment env.Vars) map[string]string {
2020
vm := jsonnet.MakeVM()
2121
vm.StringOutput = true
2222

@@ -29,13 +29,13 @@ func (l JsonnetLoader) Load(path string, environment env.Vars) (map[string]strin
2929

3030
specs, err := vm.EvaluateFileMulti(path)
3131
if err != nil {
32-
log.L.Errorf("error loading %s: %s", path, err)
32+
log.L.Fatalf("error loading %s: %s", path, err)
3333
}
3434

3535
result := make(map[string]string, len(specs))
3636
for name, spec := range specs {
3737
result[fmt.Sprintf("%s::%s", filename, name)] = spec
3838
}
3939

40-
return result, err
40+
return result
4141
}

spec/loader.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package spec
2+
3+
import (
4+
"errors"
5+
"path/filepath"
6+
7+
"github.com/getapid/apid/env"
8+
"github.com/getapid/apid/file"
9+
"github.com/getapid/apid/log"
10+
)
11+
12+
var (
13+
ErrNoFilesFound error = errors.New("no_files_found")
14+
ErrInvalidSpec error = errors.New("invalid_spec_format")
15+
)
16+
17+
type Loader interface {
18+
Load(string) []Spec
19+
}
20+
21+
type specLoader struct {
22+
filereader file.Reader
23+
}
24+
25+
func NewSpecLoader(filereader file.Reader) Loader {
26+
return &specLoader{filereader: filereader}
27+
}
28+
29+
func (r specLoader) Load(glob string) []Spec {
30+
files, err := filepath.Glob(glob)
31+
if err != nil {
32+
log.L.Errorf("error finding files: %s", err)
33+
}
34+
35+
if len(files) == 0 {
36+
log.L.Fatalf("no files found matching pattern: %s", glob)
37+
}
38+
39+
hasError := false
40+
41+
specs := make(map[string]Spec)
42+
for _, file := range files {
43+
jsonSpecs := r.filereader.Load(file, env.LoadVars())
44+
for name, jsonSpec := range jsonSpecs {
45+
spec, err := Unmarshal([]byte(jsonSpec))
46+
hasError = hasError || err != nil
47+
48+
if _, ok := specs[name]; ok {
49+
log.L.Fatalf("duplicate spec with name %s", name)
50+
}
51+
52+
if len(spec.Name) == 0 {
53+
spec.Name = name
54+
}
55+
56+
specs[name] = spec
57+
}
58+
}
59+
60+
var result []Spec
61+
for _, spec := range specs {
62+
result = append(result, spec)
63+
}
64+
65+
if hasError {
66+
log.L.Fatalf("error parsing specs")
67+
}
68+
69+
return result
70+
}

spec/runner/spec_runner.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ func NewParallelSpecRunner(parallelism int, runner step.Runner, writer writer.Wr
3434
}
3535
}
3636

37-
func (r *ParallelSpecRunner) Run(specs map[string]spec.Spec) bool {
37+
func (r *ParallelSpecRunner) Run(specs []spec.Spec) bool {
3838
var jobs []job
39-
for name, spec := range specs {
40-
jobs = append(jobs, job{name: name, spec: spec})
39+
for _, spec := range specs {
40+
jobs = append(jobs, job{name: spec.Name, spec: spec})
4141
}
4242
jobsChan := make(chan job)
4343
resultsChan := make(chan writer.Result)

0 commit comments

Comments
 (0)