Skip to content

Commit b53cedf

Browse files
committed
Support error exit codes
1 parent f3a237c commit b53cedf

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ Multiple JSON specs can be passed
2222

2323
$ ./validate-http-headers internal.json external.json mtv.json
2424

25+
Non-zero exit codes indicate failure. All failures begin with "FAIL: "; exit
26+
code constants can be found in validator.go.
27+
2528
Simple spec:
2629

2730
{

validator.go

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,48 @@ func main() {
3636
} else {
3737
filenames = os.Args[1:]
3838
}
39+
exitCodes := make([]int, 0)
3940
for _, filename := range filenames {
40-
validateSpecFile(filename)
41+
errorCodes := validateSpecFile(filename)
42+
if len(errorCodes) > 0 {
43+
fmt.Println("ERROR CODES:", errorCodes)
44+
exitCodes = append(exitCodes, errorCodes...)
45+
}
46+
}
47+
if len(exitCodes) > 0 {
48+
os.Exit(exitCodes[0])
4149
}
4250
}
4351

44-
func validateSpecFile(filename string) {
52+
func validateSpecFile(filename string) []int {
4553
fmt.Println("\n------------------------------------------------------------------------")
4654
fmt.Println("FILE:", filename)
4755
// Read file
4856
file, e := ioutil.ReadFile(filename)
4957
if e != nil {
5058
fmt.Printf("ERROR: File error: %v\n", e)
51-
return
52-
//os.Exit(FileError)
59+
return []int{FileError}
5360
}
5461

5562
// Marshal from JSON
5663
var specContainer SpecContainer
5764
e = json.Unmarshal(file, &specContainer)
5865
if e != nil {
5966
fmt.Printf("ERROR: Unmarshal error: %v\n", e)
60-
return
61-
//os.Exit(UnmarshalError)
67+
return []int{UnmarshalError}
6268
}
6369
specs := specContainer.Specs
6470
defaultSpec := specContainer.Default
6571

6672
// Request each URL in specs
73+
errorCodes := make([]int, 0, len(specs))
6774
for _, spec := range specs {
6875
// Setup request headers
69-
req, err := http.NewRequest("GET", spec.Url, nil)
70-
if err != nil {
71-
fmt.Printf("ERROR: Failed to create request: %v\n", err)
76+
req, e := http.NewRequest("GET", spec.Url, nil)
77+
if e != nil {
78+
fmt.Printf("ERROR: Failed to create request: %v\n", e)
79+
errorCodes = append(errorCodes, InvalidRequest)
7280
break
73-
//os.Exit(InvalidRequest)
7481
}
7582
requestHeaders := clone(defaultSpec.RequestHeaders, spec.RequestHeaders)
7683
for key, headerValues := range requestHeaders {
@@ -81,11 +88,11 @@ func validateSpecFile(filename string) {
8188

8289
// Send request
8390
fmt.Println("\nURL:", req.URL)
84-
resp, err := http.DefaultClient.Do(req)
85-
if err != nil {
86-
fmt.Printf("ERROR: Failed to request: %v\n", err.Error())
91+
resp, e := http.DefaultClient.Do(req)
92+
if e != nil {
93+
fmt.Printf("ERROR: Failed to request: %v\n", e)
94+
errorCodes = append(errorCodes, FailedRequest)
8795
break
88-
//os.Exit(FailedRequest)
8996
}
9097

9198
// Validate response headers
@@ -107,6 +114,7 @@ func validateSpecFile(filename string) {
107114
expectedNumHeaderValues,
108115
expectedHeaderValues,
109116
resp.Header[key])
117+
errorCodes = append(errorCodes, MissingResponseHeader)
110118
continue
111119
} else if expectedNumHeaderValues == 0 {
112120
fmt.Println("SUCCESS: Response header '"+key+"' should not",
@@ -121,6 +129,7 @@ func validateSpecFile(filename string) {
121129
fmt.Printf("Header assertion failed: Expected '%v'"+
122130
"to have '%v' instead of '%v'\n", key,
123131
expectedHeaderValue, respHeaderValue)
132+
errorCodes = append(errorCodes, FailAssertResponseHeaderValue)
124133
} else {
125134
fmt.Println("SUCCESS: Expected", "'"+key+"'",
126135
"to have", "'"+expectedHeaderValue+"'", "match",
@@ -129,6 +138,7 @@ func validateSpecFile(filename string) {
129138
}
130139
}
131140
}
141+
return errorCodes
132142
}
133143

134144
// Returns a merge of the maps. Nil values ignored

0 commit comments

Comments
 (0)