@@ -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 ("\n URL:" , 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