Example #1
0
 def test_get_value(self):
     mock_limit = Mock(spec_set=AwsLimit)
     u = AwsLimitUsage(
         mock_limit,
         3.456
     )
     assert u.get_value() == 3.456
Example #2
0
    def test_print_issue_both_one(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        c1 = AwsLimitUsage(mock_limit, 10)
        w1 = AwsLimitUsage(mock_limit, 10, resource_id='w3id')

        res = self.cls.print_issue('svcname', mock_limit, [c1], [w1])
        assert res == ('svcname/limitname', '(limit 12) ' +
                       red('CRITICAL: 10') + ' ' + yellow('WARNING: w3id=10'))
Example #3
0
    def test_print_issue_crit_multi(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 5

        c1 = AwsLimitUsage(mock_limit, 10)
        c2 = AwsLimitUsage(mock_limit, 12, resource_id='c2id')
        c3 = AwsLimitUsage(mock_limit, 8)

        res = self.cls.print_issue('svcname', mock_limit, [c1, c2, c3], [])
        assert res == ('svcname/limitname',
                       '(limit 5) ' + red('CRITICAL: 8, 10, c2id=12'))
Example #4
0
    def test_print_issue_warn_multi(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        w1 = AwsLimitUsage(mock_limit, 11)
        w2 = AwsLimitUsage(mock_limit, 10, resource_id='w2id')
        w3 = AwsLimitUsage(mock_limit, 10, resource_id='w3id')

        res = self.cls.print_issue('svcname', mock_limit, [], [w1, w2, w3])
        assert res == ('svcname/limitname',
                       '(limit 12) ' + yellow('WARNING: '
                                              'w2id=10, w3id=10, 11'))
Example #5
0
    def test_repr(self):
        mock_limit = Mock(spec_set=AwsLimit)
        u = AwsLimitUsage(
            mock_limit,
            3.456
        )
        assert str(u) == '3.456'

        u2 = AwsLimitUsage(
            mock_limit,
            3.456,
            resource_id='foobar'
        )
        assert str(u2) == 'foobar=3.456'
    def test_check_limits_crit_verbose(self, colored, capsys):
        def se_colored(s, color):
            return "(%s)%s" % (color, s)

        colored.side_effect = se_colored

        mock_foo_limit1 = Mock()
        mock_foo_limit1.get_warnings.return_value = []
        mock_foo_limit1.get_criticals.return_value = []
        mock_foo_limit1.get_current_usage_str.return_value = 'foo1_usage'
        mock_foo_limit1.get_limit.return_value = 'foo1_limit'
        mock_bar_limit1 = Mock()
        usage1 = AwsLimitUsage(mock_bar_limit1, 95)
        mock_bar_limit1.get_warnings.return_value = []
        mock_bar_limit1.get_criticals.return_value = [usage1]
        mock_bar_limit1.get_current_usage_str.return_value = 'bar1_usage'
        mock_bar_limit1.get_limit.return_value = 'bar1_limit'
        mock_bar_limit2 = Mock()
        mock_bar_limit2.get_warnings.return_value = []
        mock_bar_limit2.get_criticals.return_value = []
        mock_bar_limit2.get_current_usage_str.return_value = 'bar2_usage'
        mock_bar_limit2.get_limit.return_value = 'bar2_limit'

        result = {
            'FooSvc': {
                'FooLimit1': mock_foo_limit1,
            },
            'BarSvc': {
                'BarLimit1': mock_bar_limit1,
                'BarLimit2': mock_bar_limit2,
            },
        }
        with patch('check_aws_limits.AwsLimitChecker',
                   create=True) as mock_checker:
            type(mock_checker.return_value).warning_threshold = 60
            type(mock_checker.return_value).critical_threshold = 90
            mock_checker.return_value.check_thresholds.return_value = {}
            mock_checker.return_value.get_limits.return_value = result
            cmd = check_aws_limits.CheckAWSLimits()
            res = cmd.check_limits(verbose=True)
        assert res == ([], [
            "(red)BarSvc 'BarLimit1' usage (95) exceeds critical threshold (limit=bar1_limit)"
        ])
        out, err = capsys.readouterr()
        assert out == 'Checking AWS resource usage; WARNING threshold 60% of ' \
            'limit, CRITICAL threshold 90% of limit\n' \
            "BarSvc 'BarLimit2' OK: bar2_usage (limit=bar2_limit)\n" \
            "FooSvc 'FooLimit1' OK: foo1_usage (limit=foo1_limit)\n" \
            "\n\n\n"
        assert err == ''
        assert mock_checker.mock_calls == [
            call(),
            call().set_threshold_overrides(
                check_aws_limits.AWS_THRESHOLD_OVERRIDES),
            call().set_limit_overrides(check_aws_limits.AWS_LIMIT_OVERRIDES),
            call().check_thresholds(),
            call().get_limits()
        ]
Example #7
0
 def test_check_thresholds_pct_warn_crit(self):
     limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2)
     u1 = AwsLimitUsage(limit, 50, resource_id='foo4bar')
     u2 = AwsLimitUsage(limit, 3, resource_id='foo3bar')
     u3 = AwsLimitUsage(limit, 95, resource_id='foo2bar')
     limit._current_usage = [u1, u2, u3]
     with patch('awslimitchecker.limit.AwsLimit.'
                '_get_thresholds') as mock_get_thresh:
         with patch('awslimitchecker.limit.AwsLimit.get_'
                    'limit') as mock_get_limit:
             mock_get_thresh.return_value = (None, 40, None, 80)
             mock_get_limit.return_value = 100
             res = limit.check_thresholds()
     assert res is False
     assert limit._warnings == [u1]
     assert limit._criticals == [u3]
     assert mock_get_thresh.mock_calls == [call()]
     assert mock_get_limit.mock_calls == [call()]
Example #8
0
    def test_print_issue_crit_one(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        c1 = AwsLimitUsage(mock_limit, 56)

        res = self.cls.print_issue('svcname', mock_limit, [c1], [])
        assert res == ('svcname/limitname',
                       '(limit 12) ' + red('CRITICAL: 56'))
Example #9
0
    def test_print_issue_warn_one(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        w1 = AwsLimitUsage(mock_limit, 11)

        res = self.cls.print_issue('svcname', mock_limit, [], [w1])
        assert res == ('svcname/limitname',
                       '(limit 12) ' + yellow('WARNING: 11'))
Example #10
0
 def test_ta_zero(self):
     limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2)
     u1 = AwsLimitUsage(limit, 4, resource_id='foo4bar')
     u2 = AwsLimitUsage(limit, 3, resource_id='foo3bar')
     u3 = AwsLimitUsage(limit, 2, resource_id='foo2bar')
     limit._current_usage = [u1, u2, u3]
     limit._set_ta_unlimited()
     with patch('awslimitchecker.limit.AwsLimit.'
                '_get_thresholds') as mock_get_thresh:
         with patch('awslimitchecker.limit.AwsLimit.get_'
                    'limit') as mock_get_limit:
             mock_get_thresh.return_value = (None, 40, None, 80)
             mock_get_limit.return_value = 0
             res = limit.check_thresholds()
     assert res is True
     assert limit._warnings == []
     assert limit._criticals == []
     assert mock_get_thresh.mock_calls == [call()]
     assert mock_get_limit.mock_calls == [call(), call(), call()]
Example #11
0
    def test_crit_multi(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 5

        c1 = AwsLimitUsage(mock_limit, 10)
        c2 = AwsLimitUsage(mock_limit, 12, resource_id='c2id')
        c3 = AwsLimitUsage(mock_limit, 8)

        def se_color(s, c, colorize=True):
            return 'xX%sXx' % s

        with patch('%s.color_output' % pbm) as m_co:
            m_co.side_effect = se_color
            res = issue_string_tuple('svcname', mock_limit, [c1, c2, c3], [])
        assert res == ('svcname/limitname',
                       '(limit 5) xXCRITICAL: 8, 10, c2id=12Xx')
        assert m_co.mock_calls == [
            call('CRITICAL: 8, 10, c2id=12', 'red', colorize=True)
        ]
Example #12
0
    def test_warn_multi(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        w1 = AwsLimitUsage(mock_limit, 11)
        w2 = AwsLimitUsage(mock_limit, 10, resource_id='w2id')
        w3 = AwsLimitUsage(mock_limit, 10, resource_id='w3id')

        def se_color(s, c, colorize=True):
            return 'xX%sXx' % s

        with patch('%s.color_output' % pbm) as m_co:
            m_co.side_effect = se_color
            res = issue_string_tuple('svcname', mock_limit, [], [w1, w2, w3])
        assert res == ('svcname/limitname',
                       '(limit 12) xXWARNING: w2id=10, w3id=10, 11Xx')
        assert m_co.mock_calls == [
            call('WARNING: w2id=10, w3id=10, 11', 'yellow', colorize=True)
        ]
Example #13
0
    def test_init(self):
        mock_limit = Mock(spec_set=AwsLimit)
        u = AwsLimitUsage(
            mock_limit,
            1.23,
        )
        assert u.limit == mock_limit
        assert u.value == 1.23
        assert u.resource_id is None
        assert u.aws_type is None

        u2 = AwsLimitUsage(
            mock_limit,
            3,
            resource_id='foobar',
            aws_type='mytype',
        )
        assert u2.limit == mock_limit
        assert u2.value == 3
        assert u2.resource_id == 'foobar'
        assert u2.aws_type == 'mytype'
Example #14
0
    def test_both_one(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        c1 = AwsLimitUsage(mock_limit, 10)
        w1 = AwsLimitUsage(mock_limit, 10, resource_id='w3id')

        def se_color(s, c, colorize=True):
            return 'xX%sXx' % s

        with patch('%s.color_output' % pbm) as m_co:
            m_co.side_effect = se_color
            res = issue_string_tuple('svcname',
                                     mock_limit, [c1], [w1],
                                     colorize=False)
        assert res == ('svcname/limitname',
                       '(limit 12) xXCRITICAL: 10Xx xXWARNING: w3id=10Xx')
        assert m_co.mock_calls == [
            call('CRITICAL: 10', 'red', colorize=False),
            call('WARNING: w3id=10', 'yellow', colorize=False)
        ]
Example #15
0
 def test_comparable(self):
     mock_limit = Mock(spec_set=AwsLimit)
     u1 = AwsLimitUsage(
         mock_limit,
         3.456
     )
     u2 = AwsLimitUsage(
         mock_limit,
         3
     )
     u3 = AwsLimitUsage(
         mock_limit,
         4
     )
     u1b = AwsLimitUsage(
         mock_limit,
         3.456
     )
     assert u1 == u1b
     assert u1 != u2
     assert u1 < u3
     assert u1 > u2
     assert u1 >= u2
Example #16
0
    def test_crit_one(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        c1 = AwsLimitUsage(mock_limit, 56)

        def se_color(s, c, colorize=True):
            return 'xX%sXx' % s

        with patch('%s.color_output' % pbm) as m_co:
            m_co.side_effect = se_color
            res = issue_string_tuple('svcname', mock_limit, [c1], [])
        assert res == ('svcname/limitname', '(limit 12) xXCRITICAL: 56Xx')
        assert m_co.mock_calls == [call('CRITICAL: 56', 'red', colorize=True)]
Example #17
0
    def test_print_issue_both_multi(self):
        mock_limit = Mock(spec_set=AwsLimit)
        type(mock_limit).name = 'limitname'
        mock_limit.get_limit.return_value = 12

        c1 = AwsLimitUsage(mock_limit, 10)
        c2 = AwsLimitUsage(mock_limit, 12, resource_id='c2id')
        c3 = AwsLimitUsage(mock_limit, 8)
        w1 = AwsLimitUsage(mock_limit, 11)
        w2 = AwsLimitUsage(mock_limit, 10, resource_id='w2id')
        w3 = AwsLimitUsage(mock_limit, 10, resource_id='w3id')

        res = self.cls.print_issue('svcname', mock_limit, [c1, c2, c3],
                                   [w1, w2, w3])
        assert res == ('svcname/limitname',
                       '(limit 12) ' + red('CRITICAL: 8, 10, c2id=12') + ' ' +
                       yellow('WARNING: w2id=10, w3id=10, 11'))
Example #18
0
 def test_get_value(self):
     mock_limit = Mock(spec_set=AwsLimit)
     u = AwsLimitUsage(mock_limit, 3.456)
     assert u.get_value() == 3.456