# Path: awslimitchecker/tests/services/result_fixtures.py
# def get_boto3_resource_model(service_name, resource_name):
#     def test_instance_usage(self):
#     def test_instance_usage_vcpu(self):
#     def test_instance_usage_key_error(self):
#     def test_find_usage_networking_sgs(self):
#     def test_find_usage_networking_eips(self):
#     def test_find_usage_networking_eni_sg(self):
# class EBS(object):
# class VPC(object):
# class RDS(object):
# class ElasticBeanstalk(object):
# class CloudFront(object):
# class ELB(object):
# class Lambda(object):
# class ElastiCache(object):
# class EC2(object):
# class IAM(object):
# class Firehose(object):
# class Redshift(object):
# class ApiGateway(object):
# class DynamoDB(object):
# class Route53(object):
# class CloudTrail(object):
# class Kinesis(object):
# class EKS(object):
# class CertificateManager(object):
# 
# Path: awslimitchecker/services/redshift.py
# class _RedshiftService(_AwsService):
# 
#     service_name = 'Redshift'
#     api_name = 'redshift'
# 
#     def find_usage(self):
#         """
#         Determine the current usage for each limit of this service,
#         and update corresponding Limit via
#         :py:meth:`~.AwsLimit._add_current_usage`.
#         """
#         logger.debug("Checking usage for service %s", self.service_name)
#         self.connect()
#         for lim in self.limits.values():
#             lim._reset_usage()
#         self._find_cluster_manual_snapshots()
#         self._find_cluster_subnet_groups()
#         self._have_usage = True
#         logger.debug("Done checking usage.")
# 
#     def _find_cluster_manual_snapshots(self):
#         results = paginate_dict(
#             self.conn.describe_cluster_snapshots,
#             alc_marker_path=['Marker'],
#             alc_data_path=['Snapshots'],
#             alc_marker_param='Marker',
#             SnapshotType='manual'
#         )
#         self.limits['Redshift manual snapshots']._add_current_usage(
#             len(results['Snapshots']),
#             resource_id=self._boto3_connection_kwargs['region_name'],
#             aws_type='AWS::Redshift::Snapshot',
#         )
# 
#     def _find_cluster_subnet_groups(self):
#         results = paginate_dict(
#             self.conn.describe_cluster_subnet_groups,
#             alc_marker_path=['Marker'],
#             alc_data_path=['ClusterSubnetGroups'],
#             alc_marker_param='Marker'
#         )
#         self.limits['Redshift subnet groups']._add_current_usage(
#             len(results['ClusterSubnetGroups']),
#             resource_id=self._boto3_connection_kwargs['region_name'],
#             aws_type='AWS::Redshift::SubnetGroup',
#         )
# 
#     def get_limits(self):
#         """
#         Return all known limits for this service, as a dict of their names
#         to :py:class:`~.AwsLimit` objects.
# 
#         :returns: dict of limit names to :py:class:`~.AwsLimit` objects
#         :rtype: dict
#         """
#         if self.limits != {}:
#             return self.limits
#         limits = {}
#         limits['Redshift manual snapshots'] = AwsLimit(
#             'Redshift manual snapshots',
#             self,
#             20,
#             self.warning_threshold,
#             self.critical_threshold,
#             limit_type='AWS::Redshift::Snapshot',
#         )
#         limits['Redshift subnet groups'] = AwsLimit(
#             'Redshift subnet groups',
#             self,
#             20,
#             self.warning_threshold,
#             self.critical_threshold,
#             limit_type='AWS::Redshift::SubnetGroup',
#         )
#         self.limits = limits
#         return limits
# 
#     def required_iam_permissions(self):
#         """
#         Return a list of IAM Actions required for this Service to function
#         properly. All Actions will be shown with an Effect of "Allow"
#         and a Resource of "*".
# 
#         :returns: list of IAM Action strings
#         :rtype: list
#         """
#         return [
#             "redshift:DescribeClusterSnapshots",
#             "redshift:DescribeClusterSubnetGroups",
#         ]


import sys
from awslimitchecker.tests.services import result_fixtures
from awslimitchecker.services.redshift import _RedshiftService
    from mock import patch, call, Mock, DEFAULT
    from unittest.mock import patch, call, Mock, DEFAULT
        """test that existing limits dict is returned on subsequent calls"""
        mock_limits = Mock()
        cls = _RedshiftService(21, 43, {}, None)
        cls.limits = mock_limits
        res = cls.get_limits()
        assert res == mock_limits

    def test_find_usage(self):
        """test find usage method calls other methods"""
        mock_conn = Mock()
        with patch('%s.connect' % pb) as mock_connect:
            with patch.multiple(
                pb,
                _find_cluster_manual_snapshots=DEFAULT,
                _find_cluster_subnet_groups=DEFAULT,
            ) as mocks:
                cls = _RedshiftService(21, 43, {}, None)
                cls.conn = mock_conn
                assert cls._have_usage is False
                cls.find_usage()
        assert mock_connect.mock_calls == [call()]
        assert cls._have_usage is True
        assert mock_conn.mock_calls == []
        for x in [
            '_find_cluster_manual_snapshots',
            '_find_cluster_subnet_groups',
        ]:
            assert mocks[x].mock_calls == [call()]

    def test_find_usage_manual_snapshots(self):

# Path: awslimitchecker/tests/services/result_fixtures.py
# def get_boto3_resource_model(service_name, resource_name):
#     def test_instance_usage(self):
#     def test_instance_usage_vcpu(self):
#     def test_instance_usage_key_error(self):
#     def test_find_usage_networking_sgs(self):
#     def test_find_usage_networking_eips(self):
#     def test_find_usage_networking_eni_sg(self):
# class EBS(object):
# class VPC(object):
# class RDS(object):
# class ElasticBeanstalk(object):
# class CloudFront(object):
# class ELB(object):
# class Lambda(object):
# class ElastiCache(object):
# class EC2(object):
# class IAM(object):
# class Firehose(object):
# class Redshift(object):
# class ApiGateway(object):
# class DynamoDB(object):
# class Route53(object):
# class CloudTrail(object):
# class Kinesis(object):
# class EKS(object):
# class CertificateManager(object):
# 
# Path: awslimitchecker/services/redshift.py
# class _RedshiftService(_AwsService):
# 
#     service_name = 'Redshift'
#     api_name = 'redshift'
# 
#     def find_usage(self):
#         """
#         Determine the current usage for each limit of this service,
#         and update corresponding Limit via
#         :py:meth:`~.AwsLimit._add_current_usage`.
#         """
#         logger.debug("Checking usage for service %s", self.service_name)
#         self.connect()
#         for lim in self.limits.values():
#             lim._reset_usage()
#         self._find_cluster_manual_snapshots()
#         self._find_cluster_subnet_groups()
#         self._have_usage = True
#         logger.debug("Done checking usage.")
# 
#     def _find_cluster_manual_snapshots(self):
#         results = paginate_dict(
#             self.conn.describe_cluster_snapshots,
#             alc_marker_path=['Marker'],
#             alc_data_path=['Snapshots'],
#             alc_marker_param='Marker',
#             SnapshotType='manual'
#         )
#         self.limits['Redshift manual snapshots']._add_current_usage(
#             len(results['Snapshots']),
#             resource_id=self._boto3_connection_kwargs['region_name'],
#             aws_type='AWS::Redshift::Snapshot',
#         )
# 
#     def _find_cluster_subnet_groups(self):
#         results = paginate_dict(
#             self.conn.describe_cluster_subnet_groups,
#             alc_marker_path=['Marker'],
#             alc_data_path=['ClusterSubnetGroups'],
#             alc_marker_param='Marker'
#         )
#         self.limits['Redshift subnet groups']._add_current_usage(
#             len(results['ClusterSubnetGroups']),
#             resource_id=self._boto3_connection_kwargs['region_name'],
#             aws_type='AWS::Redshift::SubnetGroup',
#         )
# 
#     def get_limits(self):
#         """
#         Return all known limits for this service, as a dict of their names
#         to :py:class:`~.AwsLimit` objects.
# 
#         :returns: dict of limit names to :py:class:`~.AwsLimit` objects
#         :rtype: dict
#         """
#         if self.limits != {}:
#             return self.limits
#         limits = {}
#         limits['Redshift manual snapshots'] = AwsLimit(
#             'Redshift manual snapshots',
#             self,
#             20,
#             self.warning_threshold,
#             self.critical_threshold,
#             limit_type='AWS::Redshift::Snapshot',
#         )
#         limits['Redshift subnet groups'] = AwsLimit(
#             'Redshift subnet groups',
#             self,
#             20,
#             self.warning_threshold,
#             self.critical_threshold,
#             limit_type='AWS::Redshift::SubnetGroup',
#         )
#         self.limits = limits
#         return limits
# 
#     def required_iam_permissions(self):
#         """
#         Return a list of IAM Actions required for this Service to function
#         properly. All Actions will be shown with an Effect of "Allow"
#         and a Resource of "*".
# 
#         :returns: list of IAM Action strings
#         :rtype: list
#         """
#         return [
#             "redshift:DescribeClusterSnapshots",
#             "redshift:DescribeClusterSubnetGroups",
#         ]


# Path: awslimitchecker/tests/services/test_redshift.py
import sys
from awslimitchecker.tests.services import result_fixtures
from awslimitchecker.services.redshift import _RedshiftService
    from mock import patch, call, Mock, DEFAULT
    from unittest.mock import patch, call, Mock, DEFAULT

        """test that existing limits dict is returned on subsequent calls"""
        mock_limits = Mock()
        cls = _RedshiftService(21, 43, {}, None)
        cls.limits = mock_limits
        res = cls.get_limits()
        assert res == mock_limits

    def test_find_usage(self):
        """test find usage method calls other methods"""
        mock_conn = Mock()
        with patch('%s.connect' % pb) as mock_connect:
            with patch.multiple(
                pb,
                _find_cluster_manual_snapshots=DEFAULT,
                _find_cluster_subnet_groups=DEFAULT,
            ) as mocks:
                cls = _RedshiftService(21, 43, {}, None)
                cls.conn = mock_conn
                assert cls._have_usage is False
                cls.find_usage()
        assert mock_connect.mock_calls == [call()]
        assert cls._have_usage is True
        assert mock_conn.mock_calls == []
        for x in [
            '_find_cluster_manual_snapshots',
            '_find_cluster_subnet_groups',
        ]:
            assert mocks[x].mock_calls == [call()]

    def test_find_usage_manual_snapshots(self):

        response = result_fixtures.Redshift.test_describe_cluster_snapshots