def test_get_request_exception_and_retry_four_times(self, Session):
        request_exception = RequestException('I raise RequestException!')
        def exception_raiser(method, url, data, params, headers=None,
                             allow_redirects=None):
            raise request_exception

        Session.return_value = MagicMock(request=exception_raiser)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        def try_four_times(retries, status):
            return retries <= 3

        ShouldRetry = MagicMock()
        ShouldRetry.side_effect = try_four_times

        with patch('stormpath.http.HttpExecutor.should_retry', ShouldRetry):
            with self.assertRaises(Error):
                ex.get('/test')

        should_retry_calls = [
            call(0, request_exception), call(1, request_exception),
            call(2, request_exception), call(3, request_exception),
            call(4, request_exception)
        ]
        ShouldRetry.assert_has_calls(should_retry_calls)
    def test_get_request_exception_and_retry_and_success(self, Session):
        self.count = 0
        request_exception = RequestException('I raise RequestException!')
        def exception_raiser(method, url, data, params, headers=None,
                             allow_redirects=None):
            if self.count < 4:
                self.count += 1
                raise request_exception

            return MagicMock(
                status_code=200,
                json=MagicMock(return_value={'success': 'True'}))

        Session.return_value = MagicMock(request=exception_raiser)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        ShouldRetry = MagicMock(return_value=True)

        with patch('stormpath.http.HttpExecutor.should_retry', ShouldRetry):
            with self.assertRaises(Error):
                ex.get('/test')

        should_retry_calls = [
            call(0, request_exception), call(1, request_exception),
            call(2, request_exception), call(3, request_exception),
        ]
        ShouldRetry.assert_has_calls(should_retry_calls)
    def test_get_request_exception_and_retry_and_success(self, Session):
        self.count = 0
        request_exception = RequestException('I raise RequestException!')

        def exception_raiser(method,
                             url,
                             data,
                             params,
                             headers=None,
                             allow_redirects=None):
            if self.count < 4:
                self.count += 1
                raise request_exception

            return MagicMock(status_code=200,
                             json=MagicMock(return_value={'success': 'True'}))

        Session.return_value = MagicMock(request=exception_raiser)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        ShouldRetry = MagicMock(return_value=True)

        with patch('stormpath.http.HttpExecutor.should_retry', ShouldRetry):
            with self.assertRaises(Error):
                ex.get('/test')

        should_retry_calls = [
            call(0, request_exception),
            call(1, request_exception),
            call(2, request_exception),
            call(3, request_exception),
        ]
        ShouldRetry.assert_has_calls(should_retry_calls)
    def test_get_request_exception_and_retry_and_success(self, Session):
        self.count = 0
        request_exception = RequestException('mocked error')
        successful_response = MagicMock(
            status_code=200, json=MagicMock(return_value={'success': 'True'}))

        def faker(*args, **kwargs):
            if self.count < 3:
                self.count += 1
                raise request_exception

            return successful_response

        Session.return_value = MagicMock(request=faker)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        should_retry = MagicMock(return_value=True)

        with patch('stormpath.http.HttpExecutor.should_retry', should_retry):
            resp = ex.get('/test')

        self.assertEqual(resp['sp_http_status'], 200)
        should_retry.assert_has_calls([
            call(0, request_exception),
            call(1, request_exception),
            call(2, request_exception),
        ])
    def test_get_request_exception_and_retry_four_times(self, Session):
        request_exception = RequestException('I raise RequestException!')

        def exception_raiser(method,
                             url,
                             data,
                             params,
                             headers=None,
                             allow_redirects=None):
            raise request_exception

        Session.return_value = MagicMock(request=exception_raiser)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        def try_four_times(retries, status):
            return retries <= 3

        ShouldRetry = MagicMock()
        ShouldRetry.side_effect = try_four_times

        with patch('stormpath.http.HttpExecutor.should_retry', ShouldRetry):
            with self.assertRaises(Error):
                ex.get('/test')

        should_retry_calls = [
            call(0, request_exception),
            call(1, request_exception),
            call(2, request_exception),
            call(3, request_exception),
            call(4, request_exception)
        ]
        ShouldRetry.assert_has_calls(should_retry_calls)
    def test_get_request_exception_and_retry_and_success(self, Session):
        self.count = 0
        request_exception = RequestException('mocked error')
        successful_response = MagicMock(status_code=200, json=MagicMock(return_value={'success': 'True'}))

        def faker(*args, **kwargs):
            if self.count < 3:
                self.count += 1
                raise request_exception

            return successful_response

        Session.return_value = MagicMock(request=faker)

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        should_retry = MagicMock(return_value=True)

        with patch('stormpath.http.HttpExecutor.should_retry', should_retry):
            resp = ex.get('/test')

        self.assertEqual(resp['sp_http_status'], 200)
        should_retry.assert_has_calls([
            call(0, request_exception),
            call(1, request_exception),
            call(2, request_exception),
        ])
    def test_get_request_error(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 400
        s.request.return_value.json.return_value = None

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        with self.assertRaises(Error):
            ex.get('/test')
    def test_get_request_error(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 400
        s.request.return_value.json.return_value = None

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        with self.assertRaises(Error):
            ex.get('/test')
Example #9
0
    def test_get_request(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 200

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        data = ex.get('/test', {'q': 'foo'})

        s.request.assert_called_once_with('GET',
            'http://api.stormpath.com/v1/test',
            data=None, params={'q': 'foo'}, allow_redirects=False)

        self.assertEqual(data, s.request.return_value.json.return_value)
    def test_get_request(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 200

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        data = ex.get('/test', {'q': 'foo'})

        s.request.assert_called_once_with(
            'GET', 'http://api.stormpath.com/v1/test', data=None,
            params={'q': 'foo'}, headers=None, allow_redirects=False)

        self.assertEqual(data, s.request.return_value.json.return_value)
    def test_get_binary_request(self, Session):
        s = Session.return_value
        s.request.return_value.json.side_effect = ValueError
        s.request.return_value.status_code = 200
        s.request.return_value.content = 'some content'
        s.request.return_value.headers = {
            'Content-Disposition': 'attachment; filename="some_archive.zip"'}

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        data = ex.get('/test')

        self.assertEqual(
            data, {'content': 'some content', 'filename': 'some_archive.zip'})
    def test_get_binary_request(self, Session):
        s = Session.return_value
        s.request.return_value.json.side_effect = ValueError
        s.request.return_value.status_code = 200
        s.request.return_value.content = 'some content'
        s.request.return_value.headers = {
            'Content-Disposition': 'attachment; filename="some_archive.zip"'
        }

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        data = ex.get('/test')

        self.assertEqual(data, {
            'content': 'some content',
            'filename': 'some_archive.zip'
        })
Example #13
0
    def test_follow_redirects(self, Session):

        def redirector(method, url, data, params, allow_redirects=None):
            if url.endswith('/first'):
                return MagicMock(status_code=302, headers={
                    'location': '/second'})
            elif url.endswith('/second'):
                return MagicMock(status_code=200,
                    json=MagicMock(return_value={'hello': 'World'}))

        Session.return_value = MagicMock(request=redirector)
        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        data = ex.get('/first')

        self.assertEqual(data, {'hello': 'World'})
    def setUp(self, Session):

        # Set mock.
        self.request_mock = Session.return_value.request
        self.request_mock.return_value = MagicMock(status_code=200)

        ex = HttpExecutor('https://api.stormpath.com/v1', ('user', 'pass'))
        self.client = MagicMock(BASE_URL='http://example.com')
        self.data_store = DataStore(ex)
        self.client.data_store = self.data_store
        self.account = Account(self.client,
                               properties={
                                   'href': 'http://example.com/account',
                                   'username': '******',
                                   'given_name': 'given_name',
                                   'surname': 'surname',
                                   'email': '*****@*****.**',
                                   'password': '******'
                               })
        self.factor = Factor(self.client,
                             properties={
                                 'href': '/factors/factor_id',
                                 'name': 'factor'
                             })
        self.challenge = Challenge(self.client,
                                   properties={
                                       'href': '/challenges/challenge_id',
                                       'factor': self.factor,
                                       'account': self.account
                                   })
Example #15
0
    def test_follow_redirects(self, Session):

        def redirector(method, url, data, params, allow_redirects=None):
            if url.endswith('/first'):
                return MagicMock(status_code=302, headers={
                    'location': 'http://api.stormpath.com/v1/second'})
            elif url.endswith('/second'):
                return MagicMock(status_code=200,
                    json=MagicMock(return_value={'hello': 'World'}))

        Session.return_value = MagicMock(request=redirector)
        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        data = ex.get('/first')

        self.assertEqual(data, {'hello': 'World', 'sp_http_status': 200})
    def test_get_request_error_without_dict(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 400
        s.request.return_value.json.return_value = 'Not a dict'

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        error = None
        try:
            ex.get('/test')
        except Error as e:
            error = e

        self.assertIsNotNone(error)
        self.assertIsInstance(error, Error)
        self.assertEqual(error.developer_message, 'Not a dict')
        self.assertEqual(error.status, 400)
Example #17
0
    def test_sauthc1_dict(self, Session):
        Session.return_value.request.return_value = \
            MagicMock(status_code=200,
                json=MagicMock(return_value={'hello': 'World'}))

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        params = OrderedDict([('username', 'username'), ('email', 'email'),
                              ('password', 'password')])
        ex.get('/resource', params=params)

        Session.return_value.request.assert_called_once_with(
            'GET',
            'http://api.stormpath.com/v1/resource',
            params=OrderedDict([('email', 'email'), ('password', 'password'),
                                ('username', 'username')]),
            allow_redirects=False,
            data=None)
    def test_get_request_error_without_dict(self, Session):
        s = Session.return_value
        s.request.return_value.status_code = 400
        s.request.return_value.json.return_value = 'Not a dict'

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        error = None
        try:
            ex.get('/test')
        except Error as e:
            error = e

        self.assertIsNotNone(error)
        self.assertIsInstance(error, Error)
        self.assertEqual(error.developer_message, 'Not a dict')
        self.assertEqual(error.status, 400)
    def test_sauthc1_dict(self, Session):
        Session.return_value.request.return_value = \
            MagicMock(status_code=200,
                json=MagicMock(return_value={'hello': 'World'}))

        ex = HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))
        params = OrderedDict([('username', 'username'),
            ('email', 'email'), ('password', 'password')])
        ex.get('/resource', params=params)

        Session.return_value.request.assert_called_once_with('GET',
            'http://api.stormpath.com/v1/resource',
            params=OrderedDict([
                ('email', 'email'),
                ('password', 'password'),
                ('username', 'username')]),
            headers=None, allow_redirects=False, data=None)
    def test_session_init(self, Session):
        s = Session.return_value
        s.headers = {}

        HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        self.assertEqual(s.auth, ('user', 'pass'))
        self.assertEqual(s.headers['Content-Type'], 'application/json')
        self.assertEqual(s.headers['User-Agent'], HttpExecutor.USER_AGENT)
Example #21
0
    def test_session_init(self, Session):
        s = Session.return_value
        s.headers = {}

        HttpExecutor('http://api.stormpath.com/v1', ('user', 'pass'))

        self.assertEqual(s.auth, ('user', 'pass'))
        self.assertEqual(s.headers['Content-Type'], 'application/json')
        self.assertEqual(s.headers['User-Agent'], 'Stormpath-PythonSDK/' +
            STORMPATH_VERSION)
 def setUp(self):
     super(TestLiveDataStore, self).setUp()
     self.executor = HttpExecutor(
         base_url = 'https://api.stormpath.com/v1',
         auth = (self.api_key_id, self.api_key_secret),
     )