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_run_ok(self, capsys): cls = check_aws_limits.CheckAWSLimits() with patch('check_aws_limits.CheckAWSLimits.check_limits') as mock_check: mock_check.return_value = ([], []) cls.run(verbose=True) assert mock_check.mock_calls == [call.check_limits(verbose=True)] out, err = capsys.readouterr() assert out == "All limits are within thresholds.\n" assert err == ''
def test_run_warn(self, capsys): cls = check_aws_limits.CheckAWSLimits() with patch( 'check_aws_limits.CheckAWSLimits.check_limits') as mock_check: mock_check.return_value = (['warn1', 'warn2'], []) cls.run() assert mock_check.mock_calls == [call.check_limits(verbose=False)] out, err = capsys.readouterr() assert out == "\nWARNING:\n\n" \ "warn1\n" \ "warn2\n" \ "\n0 limit(s) above CRITICAL threshold; 2 limit(s) above WARNING threshold\n" assert err == ''
def test_run_crit(self, capsys): cls = check_aws_limits.CheckAWSLimits() with patch( 'check_aws_limits.CheckAWSLimits.check_limits') as mock_check: mock_check.return_value = ([], ['crit1']) with pytest.raises(SystemExit) as excinfo: cls.run(error_on_warning=True) assert excinfo.value.code == 1 assert mock_check.mock_calls == [call.check_limits(verbose=False)] out, err = capsys.readouterr() assert out == "\nCRITICAL:\n\n" \ "crit1\n" \ "\n1 limit(s) above CRITICAL threshold; 0 limit(s) above WARNING threshold\n" assert err == ''
def test_check_limits_ok(self, capsys): 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 = {} cmd = check_aws_limits.CheckAWSLimits() res = cmd.check_limits() assert res == ([], []) out, err = capsys.readouterr() assert out == 'Checking AWS resource usage; WARNING threshold 60% of ' \ 'limit, CRITICAL threshold 90% of limit\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() ]