def test_wrap_redfish_request_retries_404s_trailing_slash(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, "Agent") mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.NOT_FOUND expected_headers.headers = "Testing Headers" happy_headers = Mock() happy_headers.code = HTTPStatus.OK happy_headers.headers = "Testing Headers" mock_agent.return_value.request.side_effect = [ succeed(expected_headers), succeed(happy_headers), ] mock_readBody = self.patch(redfish_module, "readBody") mock_readBody.return_value = succeed( json.dumps(SAMPLE_JSON_SYSTEMS).encode("utf-8")) expected_response = SAMPLE_JSON_SYSTEMS response, return_headers = yield driver.redfish_request( b"GET", uri, headers) self.assertThat( mock_agent.return_value.request, MockCallsMatch( call(b"GET", uri, headers, None), call(b"GET", uri + "/".encode("utf-8"), headers, None), ), ) self.assertEquals(expected_response, response) self.assertEquals(expected_headers.headers, return_headers)
def test_redfish_request_continues_partial_download_error(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, "Agent") mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.OK expected_headers.headers = "Testing Headers" mock_agent.return_value.request.return_value = succeed( expected_headers ) mock_readBody = self.patch(redfish_module, "readBody") error = PartialDownloadError( response=json.dumps(SAMPLE_JSON_SYSTEMS).encode("utf-8"), code=HTTPStatus.OK, ) mock_readBody.return_value = fail(error) expected_response = SAMPLE_JSON_SYSTEMS response, headers = yield driver.redfish_request(b"GET", uri, headers) self.assertEqual(expected_response, response) self.assertEqual(expected_headers.headers, headers)
def test_redfish_request_raises_error_on_response_code_above_400(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, "Agent") mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.BAD_REQUEST expected_headers.headers = "Testing Headers" mock_agent.return_value.request.return_value = succeed( expected_headers) mock_readBody = self.patch(redfish_module, "readBody") with ExpectedException(PowerActionError): yield driver.redfish_request(b"GET", uri, headers) self.assertThat(mock_readBody, MockNotCalled())
def test_redfish_request_raises_invalid_json_error(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, "Agent") mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.OK expected_headers.headers = "Testing Headers" mock_agent.return_value.request.return_value = succeed( expected_headers) mock_readBody = self.patch(redfish_module, "readBody") mock_readBody.return_value = succeed( '{"invalid": "json"'.encode("utf-8")) with ExpectedException(PowerActionError): yield driver.redfish_request(b"GET", uri, headers)
def test_redfish_request_renders_response(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, 'Agent') mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.OK expected_headers.headers = "Testing Headers" mock_agent.return_value.request.return_value = succeed( expected_headers) mock_readBody = self.patch(redfish_module, 'readBody') mock_readBody.return_value = succeed( json.dumps(SAMPLE_JSON_SYSTEMS).encode('utf-8')) expected_response = SAMPLE_JSON_SYSTEMS response, headers = yield driver.redfish_request(b"GET", uri, headers) self.assertEquals(expected_response, response) self.assertEquals(expected_headers.headers, headers)
def test_redfish_request_raises_failures(self): driver = RedfishPowerDriver() context = make_context() url = driver.get_url(context) uri = join(url, b"redfish/v1/Systems") headers = driver.make_auth_headers(**context) mock_agent = self.patch(redfish_module, "Agent") mock_agent.return_value.request = Mock() expected_headers = Mock() expected_headers.code = HTTPStatus.OK expected_headers.headers = "Testing Headers" mock_agent.return_value.request.return_value = succeed( expected_headers) mock_readBody = self.patch(redfish_module, "readBody") error = PartialDownloadError( response=json.dumps(SAMPLE_JSON_SYSTEMS).encode("utf-8"), code=HTTPStatus.NOT_FOUND, ) mock_readBody.return_value = fail(error) with ExpectedException(PartialDownloadError): yield driver.redfish_request(b"GET", uri, headers) self.assertThat(mock_readBody, MockCalledOnceWith(expected_headers))