From 868082af61ec39c23409d2185e2294e15d248a8a Mon Sep 17 00:00:00 2001
From: "John L. Villalovos" <john.l.villalovos@intel.com>
Date: Sun, 6 Dec 2015 08:11:53 -0800
Subject: [PATCH] Replace HTTP 'magic numbers' with constants

Replace HTTP 'magic numbers' (also known as unnamed numerical constants)
with constants provided by the http_client/httplib library.

For example, use 'http_client.OK' instead of '200'

Change-Id: I7fc70ec0c5fee128054c026a78671d07c48d5eaf
---
 ironicclient/common/apiclient/base.py         |  3 +-
 ironicclient/common/apiclient/exceptions.py   | 60 +++++++------
 ironicclient/common/http.py                   | 25 +++---
 .../unit/common/apiclient/test_exceptions.py  | 14 +--
 ironicclient/tests/unit/common/test_http.py   | 86 ++++++++++---------
 5 files changed, 101 insertions(+), 87 deletions(-)

diff --git a/ironicclient/common/apiclient/base.py b/ironicclient/common/apiclient/base.py
index b8cb626a0..47c92cfcf 100644
--- a/ironicclient/common/apiclient/base.py
+++ b/ironicclient/common/apiclient/base.py
@@ -29,6 +29,7 @@ import copy
 
 from oslo_utils import strutils
 import six
+from six.moves import http_client
 from six.moves.urllib import parse
 
 from ironicclient.common.apiclient import exceptions
@@ -148,7 +149,7 @@ class BaseManager(HookableMixin):
         :param url: a partial URL, e.g., '/servers'
         """
         resp = self.client.head(url)
-        return resp.status_code == 204
+        return resp.status_code == http_client.NO_CONTENT
 
     def _post(self, url, json, response_key=None, return_raw=False):
         """Create an object.
diff --git a/ironicclient/common/apiclient/exceptions.py b/ironicclient/common/apiclient/exceptions.py
index 73b169e16..bcd63853f 100644
--- a/ironicclient/common/apiclient/exceptions.py
+++ b/ironicclient/common/apiclient/exceptions.py
@@ -25,6 +25,7 @@ import inspect
 import sys
 
 import six
+from six.moves import http_client
 
 from ironicclient.common.i18n import _
 
@@ -153,7 +154,7 @@ class MultipleChoices(HTTPRedirection):
     Indicates multiple options for the resource that the client may follow.
     """
 
-    http_status = 300
+    http_status = http_client.MULTIPLE_CHOICES
     message = _("Multiple Choices")
 
 
@@ -162,7 +163,7 @@ class BadRequest(HTTPClientError):
 
     The request cannot be fulfilled due to bad syntax.
     """
-    http_status = 400
+    http_status = http_client.BAD_REQUEST
     message = _("Bad Request")
 
 
@@ -172,7 +173,7 @@ class Unauthorized(HTTPClientError):
     Similar to 403 Forbidden, but specifically for use when authentication
     is required and has failed or has not yet been provided.
     """
-    http_status = 401
+    http_status = http_client.UNAUTHORIZED
     message = _("Unauthorized")
 
 
@@ -181,7 +182,7 @@ class PaymentRequired(HTTPClientError):
 
     Reserved for future use.
     """
-    http_status = 402
+    http_status = http_client.PAYMENT_REQUIRED
     message = _("Payment Required")
 
 
@@ -191,7 +192,7 @@ class Forbidden(HTTPClientError):
     The request was a valid request, but the server is refusing to respond
     to it.
     """
-    http_status = 403
+    http_status = http_client.FORBIDDEN
     message = _("Forbidden")
 
 
@@ -201,7 +202,7 @@ class NotFound(HTTPClientError):
     The requested resource could not be found but may be available again
     in the future.
     """
-    http_status = 404
+    http_status = http_client.NOT_FOUND
     message = _("Not Found")
 
 
@@ -211,7 +212,7 @@ class MethodNotAllowed(HTTPClientError):
     A request was made of a resource using a request method not supported
     by that resource.
     """
-    http_status = 405
+    http_status = http_client.METHOD_NOT_ALLOWED
     message = _("Method Not Allowed")
 
 
@@ -221,7 +222,7 @@ class NotAcceptable(HTTPClientError):
     The requested resource is only capable of generating content not
     acceptable according to the Accept headers sent in the request.
     """
-    http_status = 406
+    http_status = http_client.NOT_ACCEPTABLE
     message = _("Not Acceptable")
 
 
@@ -230,7 +231,7 @@ class ProxyAuthenticationRequired(HTTPClientError):
 
     The client must first authenticate itself with the proxy.
     """
-    http_status = 407
+    http_status = http_client.PROXY_AUTHENTICATION_REQUIRED
     message = _("Proxy Authentication Required")
 
 
@@ -239,7 +240,7 @@ class RequestTimeout(HTTPClientError):
 
     The server timed out waiting for the request.
     """
-    http_status = 408
+    http_status = http_client.REQUEST_TIMEOUT
     message = _("Request Timeout")
 
 
@@ -249,7 +250,7 @@ class Conflict(HTTPClientError):
     Indicates that the request could not be processed because of conflict
     in the request, such as an edit conflict.
     """
-    http_status = 409
+    http_status = http_client.CONFLICT
     message = _("Conflict")
 
 
@@ -259,7 +260,7 @@ class Gone(HTTPClientError):
     Indicates that the resource requested is no longer available and will
     not be available again.
     """
-    http_status = 410
+    http_status = http_client.GONE
     message = _("Gone")
 
 
@@ -269,7 +270,7 @@ class LengthRequired(HTTPClientError):
     The request did not specify the length of its content, which is
     required by the requested resource.
     """
-    http_status = 411
+    http_status = http_client.LENGTH_REQUIRED
     message = _("Length Required")
 
 
@@ -279,7 +280,7 @@ class PreconditionFailed(HTTPClientError):
     The server does not meet one of the preconditions that the requester
     put on the request.
     """
-    http_status = 412
+    http_status = http_client.PRECONDITION_FAILED
     message = _("Precondition Failed")
 
 
@@ -288,7 +289,7 @@ class RequestEntityTooLarge(HTTPClientError):
 
     The request is larger than the server is willing or able to process.
     """
-    http_status = 413
+    http_status = http_client.REQUEST_ENTITY_TOO_LARGE
     message = _("Request Entity Too Large")
 
     def __init__(self, *args, **kwargs):
@@ -305,7 +306,7 @@ class RequestUriTooLong(HTTPClientError):
 
     The URI provided was too long for the server to process.
     """
-    http_status = 414
+    http_status = http_client.REQUEST_URI_TOO_LONG
     message = _("Request-URI Too Long")
 
 
@@ -315,7 +316,7 @@ class UnsupportedMediaType(HTTPClientError):
     The request entity has a media type which the server or resource does
     not support.
     """
-    http_status = 415
+    http_status = http_client.UNSUPPORTED_MEDIA_TYPE
     message = _("Unsupported Media Type")
 
 
@@ -325,7 +326,7 @@ class RequestedRangeNotSatisfiable(HTTPClientError):
     The client has asked for a portion of the file, but the server cannot
     supply that portion.
     """
-    http_status = 416
+    http_status = http_client.REQUESTED_RANGE_NOT_SATISFIABLE
     message = _("Requested Range Not Satisfiable")
 
 
@@ -334,7 +335,7 @@ class ExpectationFailed(HTTPClientError):
 
     The server cannot meet the requirements of the Expect request-header field.
     """
-    http_status = 417
+    http_status = http_client.EXPECTATION_FAILED
     message = _("Expectation Failed")
 
 
@@ -344,7 +345,7 @@ class UnprocessableEntity(HTTPClientError):
     The request was well-formed but was unable to be followed due to semantic
     errors.
     """
-    http_status = 422
+    http_status = http_client.UNPROCESSABLE_ENTITY
     message = _("Unprocessable Entity")
 
 
@@ -353,7 +354,7 @@ class InternalServerError(HttpServerError):
 
     A generic error message, given when no more specific message is suitable.
     """
-    http_status = 500
+    http_status = http_client.INTERNAL_SERVER_ERROR
     message = _("Internal Server Error")
 
 
@@ -364,7 +365,7 @@ class HttpNotImplemented(HttpServerError):
     The server either does not recognize the request method, or it lacks
     the ability to fulfill the request.
     """
-    http_status = 501
+    http_status = http_client.NOT_IMPLEMENTED
     message = _("Not Implemented")
 
 
@@ -374,7 +375,7 @@ class BadGateway(HttpServerError):
     The server was acting as a gateway or proxy and received an invalid
     response from the upstream server.
     """
-    http_status = 502
+    http_status = http_client.BAD_GATEWAY
     message = _("Bad Gateway")
 
 
@@ -383,7 +384,7 @@ class ServiceUnavailable(HttpServerError):
 
     The server is currently unavailable.
     """
-    http_status = 503
+    http_status = http_client.SERVICE_UNAVAILABLE
     message = _("Service Unavailable")
 
 
@@ -393,7 +394,7 @@ class GatewayTimeout(HttpServerError):
     The server was acting as a gateway or proxy and did not receive a timely
     response from the upstream server.
     """
-    http_status = 504
+    http_status = http_client.GATEWAY_TIMEOUT
     message = _("Gateway Timeout")
 
 
@@ -402,7 +403,7 @@ class HttpVersionNotSupported(HttpServerError):
 
     The server does not support the HTTP protocol version used in the request.
     """
-    http_status = 505
+    http_status = http_client.HTTP_VERSION_NOT_SUPPORTED
     message = _("HTTP Version Not Supported")
 
 
@@ -456,9 +457,12 @@ def from_response(response, method, url):
     try:
         cls = _code_map[response.status_code]
     except KeyError:
-        if 500 <= response.status_code < 600:
+        # 5XX status codes are server errors
+        if response.status_code >= http_client.INTERNAL_SERVER_ERROR:
             cls = HttpServerError
-        elif 400 <= response.status_code < 500:
+        # 4XX status codes are client request errors
+        elif (http_client.BAD_REQUEST <= response.status_code <
+                http_client.INTERNAL_SERVER_ERROR):
             cls = HTTPClientError
         else:
             cls = HttpError
diff --git a/ironicclient/common/http.py b/ironicclient/common/http.py
index a42c576e5..fdaf75ca0 100644
--- a/ironicclient/common/http.py
+++ b/ironicclient/common/http.py
@@ -27,6 +27,7 @@ import time
 from keystoneclient import adapter
 from oslo_utils import strutils
 import six
+from six.moves import http_client
 import six.moves.urllib.parse as urlparse
 
 from ironicclient.common import filecache
@@ -323,7 +324,7 @@ class HTTPClient(VersionNegotiationMixin):
             # to servers that did not support microversions. Details here:
             # http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html#use-case-3b-new-client-communicating-with-a-old-ironic-user-specified  # noqa
 
-            if resp.status == 406:
+            if resp.status == http_client.NOT_ACCEPTABLE:
                 negotiated_ver = self.negotiate_version(conn, resp)
                 kwargs['headers']['X-OpenStack-Ironic-API-Version'] = (
                     negotiated_ver)
@@ -350,15 +351,16 @@ class HTTPClient(VersionNegotiationMixin):
         else:
             self.log_http_response(resp)
 
-        if 400 <= resp.status < 600:
+        if resp.status >= http_client.BAD_REQUEST:
             error_json = _extract_error_json(body_str)
             raise exc.from_response(
                 resp, error_json.get('faultstring'),
                 error_json.get('debuginfo'), method, url)
-        elif resp.status in (301, 302, 305):
+        elif resp.status in (http_client.MOVED_PERMANENTLY, http_client.FOUND,
+                             http_client.USE_PROXY):
             # Redirected. Reissue the request to the new location.
             return self._http_request(resp['location'], method, **kwargs)
-        elif resp.status == 300:
+        elif resp.status == http_client.MULTIPLE_CHOICES:
             raise exc.from_response(resp, method=method, url=url)
 
         return resp, body_iter
@@ -374,7 +376,8 @@ class HTTPClient(VersionNegotiationMixin):
         resp, body_iter = self._http_request(url, method, **kwargs)
         content_type = resp.getheader('content-type', None)
 
-        if resp.status == 204 or resp.status == 205 or content_type is None:
+        if (resp.status in (http_client.NO_CONTENT, http_client.RESET_CONTENT)
+                or content_type is None):
             return resp, list()
 
         if 'application/json' in content_type:
@@ -499,20 +502,21 @@ class SessionClient(VersionNegotiationMixin, adapter.LegacyJsonAdapter):
 
         resp = self.session.request(url, method,
                                     raise_exc=False, **kwargs)
-        if resp.status_code == 406:
+        if resp.status_code == http_client.NOT_ACCEPTABLE:
             negotiated_ver = self.negotiate_version(self.session, resp)
             kwargs['headers']['X-OpenStack-Ironic-API-Version'] = (
                 negotiated_ver)
             return self._http_request(url, method, **kwargs)
-        if 400 <= resp.status_code < 600:
+        if resp.status_code >= http_client.BAD_REQUEST:
             error_json = _extract_error_json(resp.content)
             raise exc.from_response(resp, error_json.get('faultstring'),
                                     error_json.get('debuginfo'), method, url)
-        elif resp.status_code in (301, 302, 305):
+        elif resp.status_code in (http_client.MOVED_PERMANENTLY,
+                                  http_client.FOUND, http_client.USE_PROXY):
             # Redirected. Reissue the request to the new location.
             location = resp.headers.get('location')
             resp = self._http_request(location, method, **kwargs)
-        elif resp.status_code == 300:
+        elif resp.status_code == http_client.MULTIPLE_CHOICES:
             raise exc.from_response(resp, method=method, url=url)
         return resp
 
@@ -528,7 +532,8 @@ class SessionClient(VersionNegotiationMixin, adapter.LegacyJsonAdapter):
         body = resp.content
         content_type = resp.headers.get('content-type', None)
         status = resp.status_code
-        if status == 204 or status == 205 or content_type is None:
+        if (status in (http_client.NO_CONTENT, http_client.RESET_CONTENT) or
+                content_type is None):
             return resp, list()
         if 'application/json' in content_type:
             try:
diff --git a/ironicclient/tests/unit/common/apiclient/test_exceptions.py b/ironicclient/tests/unit/common/apiclient/test_exceptions.py
index e21a1a409..3a6b39baf 100644
--- a/ironicclient/tests/unit/common/apiclient/test_exceptions.py
+++ b/ironicclient/tests/unit/common/apiclient/test_exceptions.py
@@ -15,6 +15,7 @@
 
 from oslotest import base as test_base
 import six
+from six.moves import http_client
 
 from ironicclient.common.apiclient import exceptions
 
@@ -54,7 +55,7 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
     def test_from_response_known(self):
         method = "GET"
         url = "/fake"
-        status_code = 400
+        status_code = http_client.BAD_REQUEST
         json_data = {"error": {"message": "fake message",
                                "details": "fake details"}}
         self.assert_exception(
@@ -75,7 +76,7 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
     def test_from_response_non_openstack(self):
         method = "POST"
         url = "/fake-unknown"
-        status_code = 400
+        status_code = http_client.BAD_REQUEST
         json_data = {"alien": 123}
         self.assert_exception(
             exceptions.BadRequest, method, url, status_code, json_data,
@@ -84,7 +85,7 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
     def test_from_response_with_different_response_format(self):
         method = "GET"
         url = "/fake-wsme"
-        status_code = 400
+        status_code = http_client.BAD_REQUEST
         json_data1 = {"error_message": {"debuginfo": None,
                                         "faultcode": "Client",
                                         "faultstring": "fake message"}}
@@ -95,7 +96,8 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
             exceptions.BadRequest, method, url, status_code, json_data1,
             message, details)
 
-        json_data2 = {"badRequest": {"message": "fake message", "code": 400}}
+        json_data2 = {"badRequest": {"message": "fake message",
+                                     "code": http_client.BAD_REQUEST}}
         message = six.text_type(json_data2["badRequest"]["message"])
         details = six.text_type(json_data2)
         self.assert_exception(
@@ -105,7 +107,7 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
     def test_from_response_with_text_response_format(self):
         method = "GET"
         url = "/fake-wsme"
-        status_code = 400
+        status_code = http_client.BAD_REQUEST
         text_data1 = "error_message: fake message"
 
         ex = exceptions.from_response(
@@ -123,7 +125,7 @@ class ExceptionsArgsTest(test_base.BaseTestCase):
     def test_from_response_with_text_response_format_with_no_body(self):
         method = "GET"
         url = "/fake-wsme"
-        status_code = 401
+        status_code = http_client.UNAUTHORIZED
 
         ex = exceptions.from_response(
             FakeResponse(status_code=status_code,
diff --git a/ironicclient/tests/unit/common/test_http.py b/ironicclient/tests/unit/common/test_http.py
index 5d7d7fc35..d6a7a9cc0 100644
--- a/ironicclient/tests/unit/common/test_http.py
+++ b/ironicclient/tests/unit/common/test_http.py
@@ -18,6 +18,7 @@ import time
 
 import mock
 import six
+from six.moves import http_client
 
 from ironicclient.common import filecache
 from ironicclient.common import http
@@ -68,7 +69,8 @@ class VersionNegotiationMixinTest(utils.BaseTestCase):
         self.test_object.endpoint = "http://localhost:1234"
         self.mock_mcu = mock.MagicMock()
         self.test_object._make_connection_url = self.mock_mcu
-        self.response = utils.FakeResponse({}, status=406)
+        self.response = utils.FakeResponse(
+            {}, status=http_client.NOT_ACCEPTABLE)
         self.test_object.get_server = mock.MagicMock(
             return_value=('localhost', '1234'))
 
@@ -209,10 +211,10 @@ class HttpClientTest(utils.BaseTestCase):
 
     def test_server_exception_empty_body(self):
         error_body = _get_error_body()
-        fake_resp = utils.FakeResponse({'content-type': 'application/json'},
-                                       six.StringIO(error_body),
-                                       version=1,
-                                       status=500)
+        fake_resp = utils.FakeResponse(
+            {'content-type': 'application/json'},
+            six.StringIO(error_body), version=1,
+            status=http_client.INTERNAL_SERVER_ERROR)
         client = http.HTTPClient('http://localhost/')
         client.get_connection = (
             lambda *a, **kw: utils.FakeConnection(fake_resp))
@@ -225,10 +227,10 @@ class HttpClientTest(utils.BaseTestCase):
     def test_server_exception_msg_only(self):
         error_msg = 'test error msg'
         error_body = _get_error_body(error_msg)
-        fake_resp = utils.FakeResponse({'content-type': 'application/json'},
-                                       six.StringIO(error_body),
-                                       version=1,
-                                       status=500)
+        fake_resp = utils.FakeResponse(
+            {'content-type': 'application/json'},
+            six.StringIO(error_body), version=1,
+            status=http_client.INTERNAL_SERVER_ERROR)
         client = http.HTTPClient('http://localhost/')
         client.get_connection = (
             lambda *a, **kw: utils.FakeConnection(fake_resp))
@@ -243,10 +245,10 @@ class HttpClientTest(utils.BaseTestCase):
         error_trace = ("\"Traceback (most recent call last):\\n\\n  "
                        "File \\\"/usr/local/lib/python2.7/...")
         error_body = _get_error_body(error_msg, error_trace)
-        fake_resp = utils.FakeResponse({'content-type': 'application/json'},
-                                       six.StringIO(error_body),
-                                       version=1,
-                                       status=500)
+        fake_resp = utils.FakeResponse(
+            {'content-type': 'application/json'},
+            six.StringIO(error_body), version=1,
+            status=http_client.INTERNAL_SERVER_ERROR)
         client = http.HTTPClient('http://localhost/')
         client.get_connection = (
             lambda *a, **kw: utils.FakeConnection(fake_resp))
@@ -369,7 +371,7 @@ class HttpClientTest(utils.BaseTestCase):
         fake_resp = utils.FakeResponse({'content-type': 'text/plain'},
                                        six.StringIO(error_body),
                                        version=1,
-                                       status=401)
+                                       status=http_client.UNAUTHORIZED)
         client = http.HTTPClient('http://localhost/')
         client.get_connection = (
             lambda *a, **kw: utils.FakeConnection(fake_resp))
@@ -387,7 +389,7 @@ class HttpClientTest(utils.BaseTestCase):
              },
             six.StringIO(error_body),
             version=1,
-            status=406)
+            status=http_client.NOT_ACCEPTABLE)
         expected_result = ('1.1', '1.6')
         client = http.HTTPClient('http://localhost/')
         result = client._parse_version_headers(fake_resp)
@@ -407,7 +409,7 @@ class HttpClientTest(utils.BaseTestCase):
              },
             six.StringIO(error_body),
             version=1,
-            status=406)
+            status=http_client.NOT_ACCEPTABLE)
         client = http.HTTPClient('http://%s:%s/' % (host, port))
         mock_getcon.return_value = utils.FakeConnection(fake_resp)
         self.assertRaises(
@@ -433,7 +435,7 @@ class HttpClientTest(utils.BaseTestCase):
              },
             six.StringIO(error_body),
             version=1,
-            status=406)
+            status=http_client.NOT_ACCEPTABLE)
         good_resp = utils.FakeResponse(
             {'X-OpenStack-Ironic-API-Minimum-Version': '1.1',
              'X-OpenStack-Ironic-API-Maximum-Version': '1.6',
@@ -441,12 +443,12 @@ class HttpClientTest(utils.BaseTestCase):
              },
             six.StringIO("We got some text"),
             version=1,
-            status=200)
+            status=http_client.OK)
         client = http.HTTPClient('http://localhost/')
         mock_getcon.side_effect = iter([utils.FakeConnection(bad_resp),
                                         utils.FakeConnection(good_resp)])
         response, body_iter = client._http_request('/v1/resources', 'GET')
-        self.assertEqual(200, response.status)
+        self.assertEqual(http_client.OK, response.status)
         self.assertEqual(1, mock_negotiate.call_count)
 
     @mock.patch.object(http.LOG, 'debug', autospec=True)
@@ -480,7 +482,7 @@ class SessionClientTest(utils.BaseTestCase):
 
         fake_session = utils.FakeSession({'Content-Type': 'application/json'},
                                          error_body,
-                                         500)
+                                         http_client.INTERNAL_SERVER_ERROR)
 
         client = _session_client(session=fake_session)
 
@@ -499,7 +501,7 @@ class SessionClientTest(utils.BaseTestCase):
 
         fake_session = utils.FakeSession({'Content-Type': 'application/json'},
                                          error_body,
-                                         500)
+                                         http_client.INTERNAL_SERVER_ERROR)
 
         client = _session_client(session=fake_session)
 
@@ -517,7 +519,7 @@ class SessionClientTest(utils.BaseTestCase):
              'content-type': 'text/plain',
              },
             None,
-            506)
+            http_client.HTTP_VERSION_NOT_SUPPORTED)
         expected_result = ('1.1', '1.6')
         client = _session_client(session=fake_session)
         result = client._parse_version_headers(fake_session)
@@ -534,7 +536,7 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=409)
+            status=http_client.CONFLICT)
         client = http.HTTPClient('http://localhost/', max_retries=0)
         mock_getcon.return_value = utils.FakeConnection(bad_resp)
         self.assertRaises(exc.Conflict, client._http_request,
@@ -548,17 +550,17 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=409)
+            status=http_client.CONFLICT)
         good_resp = utils.FakeResponse(
             {'content-type': 'text/plain'},
             six.StringIO("meow"),
             version=1,
-            status=200)
+            status=http_client.OK)
         client = http.HTTPClient('http://localhost/')
         mock_getcon.side_effect = iter((utils.FakeConnection(bad_resp),
                                         utils.FakeConnection(good_resp)))
         response, body_iter = client._http_request('/v1/resources', 'GET')
-        self.assertEqual(200, response.status)
+        self.assertEqual(http_client.OK, response.status)
         self.assertEqual(2, mock_getcon.call_count)
 
     @mock.patch.object(http.HTTPClient, 'get_connection', autospec=True)
@@ -568,17 +570,17 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=503)
+            status=http_client.SERVICE_UNAVAILABLE)
         good_resp = utils.FakeResponse(
             {'content-type': 'text/plain'},
             six.StringIO("meow"),
             version=1,
-            status=200)
+            status=http_client.OK)
         client = http.HTTPClient('http://localhost/')
         mock_getcon.side_effect = iter((utils.FakeConnection(bad_resp),
                                         utils.FakeConnection(good_resp)))
         response, body_iter = client._http_request('/v1/resources', 'GET')
-        self.assertEqual(200, response.status)
+        self.assertEqual(http_client.OK, response.status)
         self.assertEqual(2, mock_getcon.call_count)
 
     @mock.patch.object(http.HTTPClient, 'get_connection', autospec=True)
@@ -587,12 +589,12 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO("meow"),
             version=1,
-            status=200)
+            status=http_client.OK)
         client = http.HTTPClient('http://localhost/')
         mock_getcon.side_effect = iter((exc.ConnectionRefused(),
                                         utils.FakeConnection(good_resp)))
         response, body_iter = client._http_request('/v1/resources', 'GET')
-        self.assertEqual(200, response.status)
+        self.assertEqual(http_client.OK, response.status)
         self.assertEqual(2, mock_getcon.call_count)
 
     @mock.patch.object(http.HTTPClient, 'get_connection', autospec=True)
@@ -602,7 +604,7 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=409)
+            status=http_client.CONFLICT)
         client = http.HTTPClient('http://localhost/')
         mock_getcon.return_value = utils.FakeConnection(bad_resp)
         self.assertRaises(exc.Conflict, client._http_request,
@@ -616,7 +618,7 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=409)
+            status=http_client.CONFLICT)
         client = http.HTTPClient('http://localhost/', max_retries=None)
         mock_getcon.return_value = utils.FakeConnection(bad_resp)
         self.assertRaises(exc.Conflict, client._http_request,
@@ -630,7 +632,7 @@ class RetriesTestCase(utils.BaseTestCase):
             {'content-type': 'text/plain'},
             six.StringIO(error_body),
             version=1,
-            status=409)
+            status=http_client.CONFLICT)
         client = http.HTTPClient('http://localhost/',
                                  max_retries=http.DEFAULT_MAX_RETRIES + 1)
         mock_getcon.return_value = utils.FakeConnection(bad_resp)
@@ -644,11 +646,11 @@ class RetriesTestCase(utils.BaseTestCase):
         fake_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             error_body,
-            409)
+            http_client.CONFLICT)
         ok_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             b"OK",
-            200)
+            http_client.OK)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.side_effect = iter((fake_resp, ok_resp))
 
@@ -662,11 +664,11 @@ class RetriesTestCase(utils.BaseTestCase):
         fake_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             error_body,
-            503)
+            http_client.SERVICE_UNAVAILABLE)
         ok_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             b"OK",
-            200)
+            http_client.OK)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.side_effect = iter((fake_resp, ok_resp))
 
@@ -678,7 +680,7 @@ class RetriesTestCase(utils.BaseTestCase):
         ok_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             b"OK",
-            200)
+            http_client.OK)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.side_effect = iter((exc.ConnectionRefused(),
                                                  ok_resp))
@@ -693,7 +695,7 @@ class RetriesTestCase(utils.BaseTestCase):
         fake_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             error_body,
-            409)
+            http_client.CONFLICT)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.return_value = fake_resp
 
@@ -710,7 +712,7 @@ class RetriesTestCase(utils.BaseTestCase):
         fake_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             error_body,
-            409)
+            http_client.CONFLICT)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.return_value = fake_resp
 
@@ -728,7 +730,7 @@ class RetriesTestCase(utils.BaseTestCase):
         fake_resp = utils.FakeSessionResponse(
             {'Content-Type': 'application/json'},
             error_body,
-            409)
+            http_client.CONFLICT)
         fake_session = mock.Mock(spec=utils.FakeSession)
         fake_session.request.return_value = fake_resp