Esempio n. 1
0
 def test_get_limits_again(self):
     """test that existing limits dict is returned on subsequent calls"""
     mock_limits = Mock(spec_set=AwsLimit)
     cls = _DynamodbService(21, 43)
     cls.limits = mock_limits
     res = cls.get_limits()
     assert res == mock_limits
Esempio n. 2
0
    def test_find_usage(self):
        mock_conn = Mock()
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            with patch('%s._find_usage_dynamodb' % pb, autospec=True) as m_fud:
                with patch(
                    '%s.connect_resource' % pb, autospec=True
                ) as mock_conn_res:
                    mock_connect.side_effect = se_conn
                    cls = _DynamodbService(21, 43)
                    cls.conn = mock_conn
                    assert cls._have_usage is False
                    cls.find_usage()
        assert mock_connect.mock_calls == [call(cls)]
        assert mock_conn_res.mock_calls == [call(cls)]
        assert mock_conn.mock_calls == []
        assert m_client.mock_calls == []
        assert m_fud.mock_calls == [call(cls)]
        assert cls._have_usage is True
Esempio n. 3
0
 def test_required_iam_permissions(self):
     cls = _DynamodbService(21, 43)
     assert cls.required_iam_permissions() == [
         "dynamodb:DescribeLimits",
         "dynamodb:DescribeTable",
         "dynamodb:ListTables"
     ]
Esempio n. 4
0
 def test_required_iam_permissions(self):
     cls = _DynamodbService(21, 43)
     assert cls.required_iam_permissions() == [
         "dynamodb:DescribeLimits",
         "dynamodb:DescribeTable",
         "dynamodb:ListTables"
     ]
Esempio n. 5
0
    def test_find_usage(self):
        mock_conn = Mock()
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            with patch('%s._find_usage_dynamodb' % pb, autospec=True) as m_fud:
                with patch(
                    '%s.connect_resource' % pb, autospec=True
                ) as mock_conn_res:
                    mock_connect.side_effect = se_conn
                    cls = _DynamodbService(21, 43)
                    cls.conn = mock_conn
                    assert cls._have_usage is False
                    cls.find_usage()
        assert mock_connect.mock_calls == [call(cls)]
        assert mock_conn_res.mock_calls == [call(cls)]
        assert mock_conn.mock_calls == []
        assert m_client.mock_calls == []
        assert m_fud.mock_calls == [call(cls)]
        assert cls._have_usage is True
Esempio n. 6
0
 def test_get_limits_again(self):
     """test that existing limits dict is returned on subsequent calls"""
     mock_limits = Mock(spec_set=AwsLimit)
     cls = _DynamodbService(21, 43)
     cls.limits = mock_limits
     res = cls.get_limits()
     assert res == mock_limits
Esempio n. 7
0
 def test_init(self):
     """test __init__()"""
     with patch('%s.get_limits' % pb):
         cls = _DynamodbService(21, 43)
     assert cls.service_name == 'DynamoDB'
     assert cls.api_name == 'dynamodb'
     assert cls.conn is None
     assert cls.resource_conn is None
     assert cls.warning_threshold == 21
     assert cls.critical_threshold == 43
Esempio n. 8
0
 def test_init(self):
     """test __init__()"""
     with patch('%s.get_limits' % pb):
         cls = _DynamodbService(21, 43)
     assert cls.service_name == 'DynamoDB'
     assert cls.api_name == 'dynamodb'
     assert cls.conn is None
     assert cls.resource_conn is None
     assert cls.warning_threshold == 21
     assert cls.critical_threshold == 43
Esempio n. 9
0
    def test_get_limits_other_region(self):
        mock_conn = Mock()
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)

        limits = cls.limits
        for x in limits:
            assert isinstance(limits[x], AwsLimit)
            assert x == limits[x].name
            assert limits[x].service == cls
        assert len(limits) == 7
        table_count = limits['Tables Per Region']
        assert table_count.limit_type == 'AWS::DynamoDB::Table'
        assert table_count.default_limit == 256
        write_capacity_region = limits['Account Max Write Capacity Units']
        assert write_capacity_region.limit_type == 'AWS::DynamoDB::Table'
        write_capacity_table = limits['Table Max Write Capacity Units']
        assert write_capacity_table.limit_type == 'AWS::DynamoDB::Table'
        read_capacity_region = limits['Account Max Read Capacity Units']
        assert read_capacity_region.limit_type == 'AWS::DynamoDB::Table'
        read_capacity_table = limits['Table Max Read Capacity Units']
        assert read_capacity_table.limit_type == 'AWS::DynamoDB::Table'
        global_secondary_index = limits['Global Secondary Indexes']
        assert global_secondary_index.limit_type == 'AWS::DynamoDB::Table'
        assert global_secondary_index.default_limit == 5
        local_secondary_index = limits['Local Secondary Indexes']
        assert local_secondary_index.limit_type == 'AWS::DynamoDB::Table'
        assert local_secondary_index.default_limit == 5
        # NOT us-east-1
        assert write_capacity_region.default_limit == 20000
        assert write_capacity_table.default_limit == 10000
        assert read_capacity_region.default_limit == 20000
        assert read_capacity_table.default_limit == 10000
Esempio n. 10
0
    def test_get_limits_other_region(self):
        mock_conn = Mock()
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)

        limits = cls.limits
        for x in limits:
            assert isinstance(limits[x], AwsLimit)
            assert x == limits[x].name
            assert limits[x].service == cls
        assert len(limits) == 7
        table_count = limits['Tables Per Region']
        assert table_count.limit_type == 'AWS::DynamoDB::Table'
        assert table_count.default_limit == 256
        write_capacity_region = limits['Account Max Write Capacity Units']
        assert write_capacity_region.limit_type == 'AWS::DynamoDB::Table'
        write_capacity_table = limits['Table Max Write Capacity Units']
        assert write_capacity_table.limit_type == 'AWS::DynamoDB::Table'
        read_capacity_region = limits['Account Max Read Capacity Units']
        assert read_capacity_region.limit_type == 'AWS::DynamoDB::Table'
        read_capacity_table = limits['Table Max Read Capacity Units']
        assert read_capacity_table.limit_type == 'AWS::DynamoDB::Table'
        global_secondary_index = limits['Global Secondary Indexes']
        assert global_secondary_index.limit_type == 'AWS::DynamoDB::Table'
        assert global_secondary_index.default_limit == 20
        local_secondary_index = limits['Local Secondary Indexes']
        assert local_secondary_index.limit_type == 'AWS::DynamoDB::Table'
        assert local_secondary_index.default_limit == 5
        # NOT us-east-1
        assert write_capacity_region.default_limit == 20000
        assert write_capacity_table.default_limit == 10000
        assert read_capacity_region.default_limit == 20000
        assert read_capacity_table.default_limit == 10000
Esempio n. 11
0
    def test_update_limits_from_api(self):
        response = result_fixtures.DynamoDB.test_update_limits_from_api
        mock_conn = Mock()
        mock_conn.describe_limits.return_value = response
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)
            cls.conn = mock_conn
            cls._update_limits_from_api()
        assert cls.limits['Account Max Read Capacity Units'].api_limit == 111
        assert cls.limits['Account Max Write Capacity Units'].api_limit == 222
        assert cls.limits['Table Max Read Capacity Units'].api_limit == 333
        assert cls.limits['Table Max Write Capacity Units'].api_limit == 444
        assert mock_connect.mock_calls == [call(cls), call(cls)]
        assert mock_conn.mock_calls == [call.describe_limits()]
Esempio n. 12
0
    def test_update_limits_from_api(self):
        response = result_fixtures.DynamoDB.test_update_limits_from_api
        mock_conn = Mock()
        mock_conn.describe_limits.return_value = response
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)
            cls.conn = mock_conn
            cls._update_limits_from_api()
        assert cls.limits['Account Max Read Capacity Units'].api_limit == 111
        assert cls.limits['Account Max Write Capacity Units'].api_limit == 222
        assert cls.limits['Table Max Read Capacity Units'].api_limit == 333
        assert cls.limits['Table Max Write Capacity Units'].api_limit == 444
        assert mock_connect.mock_calls == [
            call(cls), call(cls)
        ]
        assert mock_conn.mock_calls == [call.describe_limits()]
Esempio n. 13
0
    def test_find_usage_dynamodb(self):
        response = result_fixtures.DynamoDB.test_find_usage_dynamodb
        mock_conn = Mock()
        mock_conn.describe_limits.return_value = response
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        mock_tables = Mock()
        mock_tables.all.return_value = response
        mock_res_conn = Mock()
        type(mock_res_conn).tables = mock_tables

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)
            cls.conn = mock_conn
            cls.resource_conn = mock_res_conn
            cls._find_usage_dynamodb()
        # Account/Region wide limits
        u = cls.limits['Tables Per Region'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 3
        u = cls.limits['Account Max Write Capacity Units'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 1355
        u = cls.limits['Account Max Read Capacity Units'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 1000
        # Per Table Limits
        u = cls.limits['Global Secondary Indexes'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 2
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 1
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 0
        u = cls.limits['Local Secondary Indexes'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 3
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 1
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 0
        u = cls.limits['Table Max Write Capacity Units'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 106
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 449
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 800
        u = cls.limits['Table Max Read Capacity Units'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 64
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 336
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 600
Esempio n. 14
0
    def test_find_usage_dynamodb(self):
        response = result_fixtures.DynamoDB.test_find_usage_dynamodb
        mock_conn = Mock()
        mock_conn.describe_limits.return_value = response
        m_client = Mock()
        type(m_client).region_name = 'foo'
        type(mock_conn)._client_config = m_client

        def se_conn(cls):
            cls.conn = mock_conn

        mock_tables = Mock()
        mock_tables.all.return_value = response
        mock_res_conn = Mock()
        type(mock_res_conn).tables = mock_tables

        with patch('%s.connect' % pb, autospec=True) as mock_connect:
            mock_connect.side_effect = se_conn
            cls = _DynamodbService(21, 43)
            cls.conn = mock_conn
            cls.resource_conn = mock_res_conn
            cls._find_usage_dynamodb()
        # Account/Region wide limits
        u = cls.limits['Tables Per Region'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 3
        u = cls.limits['Account Max Write Capacity Units'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 1355
        u = cls.limits['Account Max Read Capacity Units'].get_current_usage()
        assert len(u) == 1
        assert u[0].get_value() == 1000
        # Per Table Limits
        u = cls.limits['Global Secondary Indexes'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 2
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 1
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 0
        u = cls.limits['Local Secondary Indexes'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 3
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 1
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 0
        u = cls.limits['Table Max Write Capacity Units'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 106
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 449
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 800
        u = cls.limits['Table Max Read Capacity Units'].get_current_usage()
        assert len(u) == 3
        assert u[0].resource_id == 'table1'
        assert u[0].get_value() == 64
        assert u[1].resource_id == 'table2'
        assert u[1].get_value() == 336
        assert u[2].resource_id == 'table3'
        assert u[2].get_value() == 600