def test_get_value(self): mock_limit = Mock(spec_set=AwsLimit) u = AwsLimitUsage( mock_limit, 3.456 ) assert u.get_value() == 3.456
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'))
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'))
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'))
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() ]
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()]
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'))
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'))
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()]
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) ]
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) ]
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'
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) ]
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
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)]
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'))
def test_get_value(self): mock_limit = Mock(spec_set=AwsLimit) u = AwsLimitUsage(mock_limit, 3.456) assert u.get_value() == 3.456