@@ -138,33 +138,36 @@ func (r *Runner) runInstructionSet(hs b.Homeserver, hsURL string, instrs []instr
138138 return err
139139 }
140140 }
141- if i < 100 || i % 200 == 0 {
142- r .log ("%s [%d/%d] %s => HTTP %s\n " , contextStr , i , len (instrs ), req .URL .String (), res .Status )
143- }
144- body , err := ioutil .ReadAll (res .Body )
145- if err != nil {
146- err = isFatalErr (fmt .Errorf ("%s : failed to read response body: %w" , contextStr , err ))
147- if err != nil {
148- return err
141+ // parse the response if we have one (if bestEffort=true then we don't return an error above)
142+ if res != nil && res .Body != nil {
143+ if i < 100 || i % 200 == 0 {
144+ r .log ("%s [%d/%d] %s => HTTP %s\n " , contextStr , i , len (instrs ), req .URL .String (), res .Status )
149145 }
150- }
151- if res .StatusCode < 200 || res .StatusCode >= 300 {
152- r .log ("INSTRUCTION: %+v\n " , instr )
153- err = isFatalErr (fmt .Errorf ("%s : request %s returned HTTP %s : %s" , contextStr , req .URL .String (), res .Status , string (body )))
146+ body , err := ioutil .ReadAll (res .Body )
154147 if err != nil {
155- return err
148+ err = isFatalErr (fmt .Errorf ("%s : failed to read response body: %w" , contextStr , err ))
149+ if err != nil {
150+ return err
151+ }
156152 }
157- }
158- if instr .storeResponse != nil {
159- if ! gjson .ValidBytes (body ) {
160- err = isFatalErr (fmt .Errorf ("%s : cannot storeResponse as response is not valid JSON. Body: %s" , contextStr , string (body )))
153+ if res .StatusCode < 200 || res .StatusCode >= 300 {
154+ r .log ("INSTRUCTION: %+v\n " , instr )
155+ err = isFatalErr (fmt .Errorf ("%s : request %s returned HTTP %s : %s" , contextStr , req .URL .String (), res .Status , string (body )))
161156 if err != nil {
162157 return err
163158 }
164159 }
165- for k , v := range instr .storeResponse {
166- val := gjson .GetBytes (body , strings .TrimPrefix (v , "." ))
167- r .lookup .Store (k , val .Str )
160+ if instr .storeResponse != nil {
161+ if ! gjson .ValidBytes (body ) {
162+ err = isFatalErr (fmt .Errorf ("%s : cannot storeResponse as response is not valid JSON. Body: %s" , contextStr , string (body )))
163+ if err != nil {
164+ return err
165+ }
166+ }
167+ for k , v := range instr .storeResponse {
168+ val := gjson .GetBytes (body , strings .TrimPrefix (v , "." ))
169+ r .lookup .Store (k , val .Str )
170+ }
168171 }
169172 }
170173 req , instr , i = r .next (instrs , hsURL , i )
0 commit comments