def test_service_request_with_999_status_code(self):
        target = Path('http://example/com/a/b')

        mock_method = mock.MagicMock()
        mock_method.return_value.json.return_value = {'result': {'x': 'y'}}
        mock_method.return_value.status_code = 999
        mock_body = mock.MagicMock()
        mock_params = mock.MagicMock()

        with self.assertRaises(error.HttpError):
            target._Path__service_request(mock_method, mock_body, mock_params)
    def test_service_request_with_session(self, mock_AWS4Auth):
        mock_session = mock.MagicMock()

        target = Path('http://example/com/a/b', session=mock_session)

        mock_method = mock.MagicMock()
        mock_method.return_value.json.return_value = {'result': {'x': 'y'}}
        mock_method.return_value.status_code = 200
        mock_body = mock.MagicMock()
        mock_params = mock.MagicMock()

        response = target._Path__service_request(mock_method, mock_body,
                                                 mock_params)

        mock_AWS4Auth.assert_called_once_with(
            mock_session.get_credentials.return_value.get_frozen_credentials.
            return_value.access_key,
            mock_session.get_credentials.return_value.get_frozen_credentials.
            return_value.secret_key,
            mock_session.region_name,
            'execute-api',
            session_token=mock_session.get_credentials(
            ).get_frozen_credentials().token)

        mock_method.assert_called_once_with('http://example/com/a/b',
                                            auth=mock_AWS4Auth.return_value,
                                            json=mock_body,
                                            params=mock_params)
        self.assertEquals(response.DATA, {'x': 'y'})
    def test_service_request_with_role_arn(self, mock_AWS4Auth):
        mock_session = mock.Mock()
        # See https://docs.python.org/3/library/unittest.mock.html#unittest.mock.PropertyMock about how to mock properties
        region_mock = mock.PropertyMock(return_value="TEST-REGION")
        type(mock_session).region_name = region_mock

        mock_role_arn = mock.MagicMock()

        print("Mock_session {} region_name={}".format(
            mock_session, mock_session.region_name))
        mock_session.client.return_value.assume_role.return_value = {
            'Credentials': {
                'AccessKeyId': mock.MagicMock(),
                'SecretAccessKey': mock.MagicMock(),
                'SessionToken': mock.MagicMock()
            }
        }
        target = Path('http://example/com/a/b',
                      session=mock_session,
                      role_arn=mock_role_arn)

        mock_method = mock.MagicMock()
        mock_method.return_value.json.return_value = {'result': {'x': 'y'}}
        mock_method.return_value.status_code = 200
        mock_body = mock.MagicMock()
        mock_params = mock.MagicMock()

        response = target._Path__service_request(mock_method, mock_body,
                                                 mock_params)

        mock_session.client.assert_called_once_with(
            'sts', endpoint_url=AWSSTSUtils("TEST-REGION").endpoint_url)
        mock_session.client.return_value.assume_role.assert_called_once_with(
            RoleArn=mock_role_arn, RoleSessionName='cgf_service_client')

        mock_AWS4Auth.assert_called_once_with(
            mock_session.client.return_value.assume_role.
            return_value['Credentials']['AccessKeyId'],
            mock_session.client.return_value.assume_role.
            return_value['Credentials']['SecretAccessKey'],
            mock_session.region_name,
            'execute-api',
            session_token=mock_session.client.return_value.assume_role.
            return_value['Credentials']['SessionToken'])

        mock_method.assert_called_once_with('http://example/com/a/b',
                                            auth=mock_AWS4Auth.return_value,
                                            json=mock_body,
                                            params=mock_params)
        self.assertEquals(response.DATA, {'x': 'y'})
    def test_service_request_without_session(self):

        target = Path('http://example/com/a/b')

        mock_method = mock.MagicMock()
        mock_method.return_value.json.return_value = {'result': {'x': 'y'}}
        mock_method.return_value.status_code = 200
        mock_body = mock.MagicMock()
        mock_params = mock.MagicMock()

        response = target._Path__service_request(mock_method, mock_body, mock_params)

        mock_method.assert_called_once_with('http://example/com/a/b', auth = None, json = mock_body, params = mock_params)
        self.assertEquals(response.DATA, {'x': 'y'})
Example #5
0
    def test_service_request_with_role_arn(self, mock_AWS4Auth):

        mock_session = mock.MagicMock()
        mock_role_arn = mock.MagicMock()

        mock_session.client.return_value.assume_role.return_value = {
            'Credentials': {
                'AccessKeyId': mock.MagicMock(),
                'SecretAccessKey': mock.MagicMock(),
                'SessionToken': mock.MagicMock()
            }
        }

        target = Path('http://example/com/a/b',
                      session=mock_session,
                      role_arn=mock_role_arn)

        mock_method = mock.MagicMock()
        mock_method.return_value.json.return_value = {'result': {'x': 'y'}}
        mock_method.return_value.status_code = 200
        mock_body = mock.MagicMock()
        mock_params = mock.MagicMock()

        response = target._Path__service_request(mock_method, mock_body,
                                                 mock_params)

        mock_session.client.assert_called_once_with('sts')
        mock_session.client.return_value.assume_role.assert_called_once_with(
            RoleArn=mock_role_arn, RoleSessionName='cgf_service_client')

        mock_AWS4Auth.assert_called_once_with(
            mock_session.client.return_value.assume_role.
            return_value['Credentials']['AccessKeyId'],
            mock_session.client.return_value.assume_role.
            return_value['Credentials']['SecretAccessKey'],
            mock_session.region_name,
            'execute-api',
            session_token=mock_session.client.return_value.assume_role.
            return_value['Credentials']['SessionToken'])

        mock_method.assert_called_once_with('http://example/com/a/b',
                                            auth=mock_AWS4Auth.return_value,
                                            json=mock_body,
                                            params=mock_params)
        self.assertEquals(response.DATA, {'x': 'y'})