Merge "Modify oauth calls to expect urlencoded responses"

This commit is contained in:
Jenkins
2014-07-03 21:23:17 +00:00
committed by Gerrit Code Review
4 changed files with 15 additions and 11 deletions

View File

@@ -16,9 +16,9 @@ import uuid
import httpretty
import mock
import six
from six.moves.urllib import parse as urlparse
from testtools import matchers
from keystoneclient.openstack.common import jsonutils
from keystoneclient.openstack.common import timeutils
from keystoneclient import session
from keystoneclient.tests.v3 import client_fixtures
@@ -87,13 +87,17 @@ class TokenTests(BaseTest):
def _new_oauth_token(self):
key = uuid.uuid4().hex
secret = uuid.uuid4().hex
token = 'oauth_token=%s&oauth_token_secret=%s' % (key, secret)
params = {'oauth_token': key, 'oauth_token_secret': secret}
token = urlparse.urlencode(params)
return (key, secret, token)
def _new_oauth_token_with_expires_at(self):
key, secret, token = self._new_oauth_token()
expires_at = timeutils.strtime()
token += '&oauth_expires_at=%s' % expires_at
params = {'oauth_token': key,
'oauth_token_secret': secret,
'oauth_expires_at': expires_at}
token = urlparse.urlencode(params)
return (key, secret, expires_at, token)
def _validate_oauth_headers(self, auth_header, oauth_client):
@@ -171,10 +175,8 @@ class RequestTokenTests(TokenTests):
request_key, request_secret, resp_ref = self._new_oauth_token()
# NOTE(stevemar) The server expects the body to be JSON. Even though
# the resp_ref is a string it is not a JSON string.
self.stub_url(httpretty.POST, [self.path_prefix, 'request_token'],
status=201, body=jsonutils.dumps(resp_ref),
status=201, body=resp_ref,
content_type='application/x-www-form-urlencoded')
# Assert the manager is returning request token object
@@ -214,10 +216,8 @@ class AccessTokenTests(TokenTests):
t = self._new_oauth_token_with_expires_at()
access_key, access_secret, expires_at, resp_ref = t
# NOTE(stevemar) The server expects the body to be JSON. Even though
# the resp_ref is a string it is not a JSON string.
self.stub_url(httpretty.POST, [self.path_prefix, 'access_token'],
status=201, body=jsonutils.dumps(resp_ref),
status=201, body=resp_ref,
content_type='application/x-www-form-urlencoded')
# Assert that the manager creates an access token object

View File

@@ -42,5 +42,5 @@ class AccessTokenManager(base.CrudManager):
url = self.client.auth_url.rstrip("/") + endpoint
url, headers, body = oauth_client.sign(url, http_method='POST')
resp, body = self.client.post(endpoint, headers=headers)
token = utils.get_oauth_token_from_body(body)
token = utils.get_oauth_token_from_body(resp.content)
return self.resource_class(self, token)

View File

@@ -66,5 +66,5 @@ class RequestTokenManager(base.CrudManager):
url, headers, body = oauth_client.sign(url, http_method='POST',
headers=headers)
resp, body = self.client.post(endpoint, headers=headers)
token = utils.get_oauth_token_from_body(body)
token = utils.get_oauth_token_from_body(resp.content)
return self.resource_class(self, token)

View File

@@ -11,6 +11,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import six
from six.moves.urllib import parse as urlparse
@@ -25,6 +26,9 @@ def get_oauth_token_from_body(body):
'oauth_expires_at=2013-03-30T05:27:19.463201' possibly there, too.
"""
if six.PY3:
body = body.decode('utf-8')
credentials = urlparse.parse_qs(body)
key = credentials['oauth_token'][0]
secret = credentials['oauth_token_secret'][0]