def test_auth_header_sent(self):
   http = HttpMockSequence([
     ({'status': '200'}, 'echo_request_headers'),
     ])
   http = self.credentials.authorize(http)
   resp, content = http.request('http://example.com')
   self.assertEqual('Bearer foo', content['Authorization'])
 def test_non_401_error_response(self):
   http = HttpMockSequence([
     ({'status': '400'}, ''),
     ])
   http = self.credentials.authorize(http)
   resp, content = http.request('http://example.com')
   self.assertEqual(400, resp.status)
 def test_assertion_refresh(self):
   http = HttpMockSequence([
     ({'status': '200'}, '{"access_token":"1/3w"}'),
     ({'status': '200'}, 'echo_request_headers'),
     ])
   http = self.credentials.authorize(http)
   resp, content = http.request('http://example.com')
   self.assertEqual('Bearer 1/3w', content['Authorization'])
示例#4
0
 def _credentials_refresh(self, credentials):
   http = HttpMockSequence([
       ({'status': '200'}, '{"access_token":"1/3w","expires_in":3600}'),
       ({'status': '401'}, ''),
       ({'status': '200'}, '{"access_token":"3/3w","expires_in":3600}'),
       ({'status': '200'}, 'echo_request_headers'),
   ])
   http = credentials.authorize(http)
   _, content = http.request('http://example.org')
   return content
 def test_token_refresh_success(self):
   for status_code in REFRESH_STATUS_CODES:
     http = HttpMockSequence([
       ({'status': status_code}, ''),
       ])
     http = self.credentials.authorize(http)
     try:
       resp, content = http.request('http://example.com')
       self.fail('should throw exception if token expires')
     except AccessTokenCredentialsError:
       pass
     except Exception:
       self.fail('should only throw AccessTokenCredentialsError')
 def test_token_refresh_success(self):
   for status_code in REFRESH_STATUS_CODES:
     token_response = {'access_token': '1/3w', 'expires_in': 3600}
     http = HttpMockSequence([
         ({'status': status_code}, ''),
         ({'status': '200'}, simplejson.dumps(token_response)),
         ({'status': '200'}, 'echo_request_headers'),
     ])
     http = self.credentials.authorize(http)
     resp, content = http.request('http://example.com')
     self.assertEqual('Bearer 1/3w', content['Authorization'])
     self.assertFalse(self.credentials.access_token_expired)
     self.assertEqual(token_response, self.credentials.token_response)
 def test_token_refresh_failure(self):
   for status_code in REFRESH_STATUS_CODES:
     http = HttpMockSequence([
       ({'status': status_code}, ''),
       ({'status': '400'}, '{"error":"access_denied"}'),
       ])
     http = self.credentials.authorize(http)
     try:
       http.request('http://example.com')
       self.fail('should raise AccessTokenRefreshError exception')
     except AccessTokenRefreshError:
       pass
     self.assertTrue(self.credentials.access_token_expired)
     self.assertEqual(None, self.credentials.token_response)
示例#8
0
 def test_credentials_good(self):
   private_key = datafile('privatekey.%s' % self.format)
   credentials = SignedJwtAssertionCredentials(
       '*****@*****.**',
       private_key,
       scope='read+write',
       sub='*****@*****.**')
   http = HttpMockSequence([
       ({'status': '200'}, '{"access_token":"1/3w","expires_in":3600}'),
       ({'status': '200'}, 'echo_request_headers'),
   ])
   http = credentials.authorize(http)
   _, content = http.request('http://example.org')
   self.assertEqual('Bearer 1/3w', content['Authorization'])
    def test_exchange_code_for_token_fail(self):
        http = HttpMockSequence([
            ({
                'status': '400'
            }, '{"error":"invalid_request"}'),
        ])

        try:
            credentials = credentials_from_code(self.client_id,
                                                self.client_secret,
                                                self.scope,
                                                self.code,
                                                redirect_uri=self.redirect_uri,
                                                http=http)
            self.fail('should raise exception if exchange doesn\'t get 200')
        except FlowExchangeError:
            pass
示例#10
0
  def test_exchange_failure_with_json_error(self):
    # Some providers have 'error' attribute as a JSON object
    # in place of regular string.
    # This test makes sure no strange object-to-string coversion
    # exceptions are being raised instead of FlowExchangeError.
    http = HttpMockSequence([
      ({'status': '400'},
      """ {"error": {
              "type": "OAuthException",
              "message": "Error validating verification code."} }"""),
      ])

    try:
      credentials = self.flow.step2_exchange('some random code', http=http)
      self.fail('should raise exception if exchange doesn\'t get 200')
    except FlowExchangeError, e:
      pass
示例#11
0
    def test_get_access_token(self):
        S = 2  # number of seconds in which the token expires
        token_response_first = {'access_token': 'first_token', 'expires_in': S}
        token_response_second = {
            'access_token': 'second_token',
            'expires_in': S
        }
        http = HttpMockSequence([
            ({
                'status': '200'
            }, simplejson.dumps(token_response_first)),
            ({
                'status': '200'
            }, simplejson.dumps(token_response_second)),
        ])

        token = self.credentials.get_access_token(http=http)
        self.assertEqual('first_token', token.access_token)
        self.assertEqual(S - 1, token.expires_in)
        self.assertFalse(self.credentials.access_token_expired)
        self.assertEqual(token_response_first, self.credentials.token_response)

        token = self.credentials.get_access_token(http=http)
        self.assertEqual('first_token', token.access_token)
        self.assertEqual(S - 1, token.expires_in)
        self.assertFalse(self.credentials.access_token_expired)
        self.assertEqual(token_response_first, self.credentials.token_response)

        time.sleep(S)
        self.assertTrue(self.credentials.access_token_expired)

        token = self.credentials.get_access_token(http=http)
        self.assertEqual('second_token', token.access_token)
        self.assertEqual(S - 1, token.expires_in)
        self.assertFalse(self.credentials.access_token_expired)
        self.assertEqual(token_response_second,
                         self.credentials.token_response)