def send_request_data(rendered_data): """ Helper that sends a request's rendered data to the server and parses its response. @param rendered_data: The data to send to the server @type rendered_data: Str @return: The response from the server @rtype : HttpResponse """ # Set max retries and retry sleep time to be used in case # a status code from the retry list is encountered. MAX_RETRIES = 5 RETRY_SLEEP_SEC = 5 RETRY_CODES = ['409', '429'] num_retries = 0 while num_retries < MAX_RETRIES: try: # Establish connection to server sock = HttpSock(Settings().connection_settings) except TransportLayerException as error: _RAW_LOGGING(str(error)) return HttpResponse() # Send the request and receive the response success, response = sock.sendRecv( rendered_data, Settings().max_request_execution_time) status_code = response.status_code if status_code and status_code in RESTLER_BUG_CODES: return response if not success or not status_code: _RAW_LOGGING(response.to_str) return HttpResponse() if status_code in RETRY_CODES: time.sleep(RETRY_SLEEP_SEC) num_retries += 1 if num_retries < MAX_RETRIES: _RAW_LOGGING("Retrying request") continue else: return response return response
def _500(self, message="") -> HttpResponse: response_str = self._get_response_str( '500', description='Internal Server Error', body={ "code": "InternalServerError", "message": message }) return HttpResponse(response_str)
def _405(self, method) -> HttpResponse: response_str = self._get_response_str( '405', description='Method Not Allowed', body={"error": f"Method, {method}, not supported"}) return HttpResponse(response_str)
def _403(self) -> HttpResponse: response_str = self._get_response_str( '403', description='Forbidden', body={"User not authorized or no auth token specified."}) return HttpResponse(response_str)
def _404(self, dyn_object="") -> HttpResponse: response_str = self._get_response_str('404', description="Not Found", body={"Resource": dyn_object}) return HttpResponse(response_str)
def _400(self, message) -> HttpResponse: response_str = self._get_response_str('400', description='Bad Request', body={"error": message}) return HttpResponse(response_str)
def _202(self, body: dict) -> HttpResponse: response_str = self._get_response_str('202', description='Accepted', body=body) return HttpResponse(response_str)
def _201(self, body: dict) -> HttpResponse: response_str = self._get_response_str('201', description='Created', body=body) return HttpResponse(response_str)
def _200(self, body: dict) -> HttpResponse: response_str = self._get_response_str('200', description='OK', body=body) return HttpResponse(response_str)
def test_custom_non_bug_codes(self): user_args = {"custom_non_bug_codes": ["200", "4?4", "3*"]} try: settings = RestlerSettings(user_args) settings.validate_options() except: assert False response200 = HttpResponse('HTTP/1.1 200 response') response201 = HttpResponse('HTTP/1.1 201 response') response400 = HttpResponse('HTTP/1.1 400 response') response404 = HttpResponse('HTTP/1.1 404 response') response414 = HttpResponse('HTTP/1.1 414 response') response300 = HttpResponse('HTTP/1.1 300 response') response301 = HttpResponse('HTTP/1.1 301 response') response500 = HttpResponse('HTTP/1.1 500 response') self.assertFalse(response200.has_bug_code()) self.assertTrue(response201.has_bug_code()) self.assertTrue(response400.has_bug_code()) self.assertFalse(response404.has_bug_code()) self.assertFalse(response414.has_bug_code()) self.assertFalse(response300.has_bug_code()) self.assertFalse(response301.has_bug_code()) self.assertTrue(response500.has_bug_code()) settings.TEST_DeleteInstance() user_args["custom_non_bug_codes"].append("500") try: settings = RestlerSettings(user_args) settings.validate_options() except: assert False self.assertFalse(response500.has_bug_code())