def test_get_thresholds(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) assert limit._get_thresholds() == ( None, 1, None, 2 )
def test_get_current_usage_str_none(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) assert limit.get_current_usage_str() == '<unknown>'
def test_get_current_usage_str(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4) assert limit.get_current_usage_str() == '4'
def test_get_current_usage(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._current_usage = 2 assert limit.get_current_usage() == 2
def test_get_current_usage_str_id(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4, resource_id='foobar') assert limit.get_current_usage_str() == 'foobar=4'
def test_set_api_limit(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) assert limit.api_limit is None limit._set_api_limit(10) assert limit.api_limit == 10
def test_set_limit_override_ta_False(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit.set_limit_override(1, override_ta=False) assert limit.limit_override == 1 assert limit.default_limit == 3 assert limit.override_ta is False
def test_set_limit_override(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit.set_limit_override(10) assert limit.limit_override == 10 assert limit.default_limit == 3 assert limit.override_ta is True
def test_set_threshold_override(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) limit.set_threshold_override( warn_percent=1, warn_count=2, crit_percent=3, crit_count=4 ) assert limit.warn_percent == 1 assert limit.warn_count == 2 assert limit.crit_percent == 3 assert limit.crit_count == 4
def test_set_ta_unlimited(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) assert limit.ta_limit is None assert limit.ta_unlimited is False limit._set_ta_unlimited() assert limit.ta_limit is None assert limit.ta_unlimited is True
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_check_thresholds_pct(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] 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 True assert limit._warnings == [] assert limit._criticals == [] assert mock_get_thresh.mock_calls == [call()] assert mock_get_limit.mock_calls == [call()]
def test_init_valueerror(self): with pytest.raises(ValueError) as excinfo: AwsLimit('limitname', self.mock_svc, 3, 11, 7) if sys.version_info[0] > 2: msg = excinfo.value.args[0] else: msg = excinfo.value.message assert msg == "critical threshold must be greater " \ "than warning threshold"
def test_check_thresholds_ta_unlimited(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 = None res = limit.check_thresholds() assert res is True assert limit._warnings == [] assert limit._criticals == [] assert mock_get_thresh.mock_calls == [] assert mock_get_limit.mock_calls == [call()]
def sample_limits(): limits = { 'SvcBar': { 'barlimit1': AwsLimit( 'barlimit1', 'SvcBar', 1, 2, 3, limit_type='ltbar1', limit_subtype='sltbar1', ), 'bar limit2': AwsLimit( 'bar limit2', 'SvcBar', 2, 2, 3, limit_type='ltbar2', limit_subtype='sltbar2', ), }, 'SvcFoo': { 'foo limit3': AwsLimit( 'foo limit3', 'SvcFoo', 3, 2, 3, limit_type='ltfoo3', limit_subtype='sltfoo3', ), }, } limits['SvcBar']['bar limit2'].set_limit_override(99) limits['SvcFoo']['foo limit3']._set_ta_limit(10) return limits
def test_init(self): limit = AwsLimit('limitname', self.mock_svc, 3, 7, 11) assert limit.name == 'limitname' assert limit.service == self.mock_svc assert limit.default_limit == 3 assert limit.limit_type is None assert limit.limit_subtype is None assert limit.limit_override is None assert limit.override_ta is True assert limit.ta_limit is None assert limit.api_limit is None assert limit.def_warning_threshold == 7 assert limit.def_critical_threshold == 11
def test_simple(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) assert limit._current_usage == [] limit._add_current_usage(2) assert len(limit.get_current_usage()) == 1 assert limit._current_usage[0].get_value() == 2 limit._add_current_usage(4) assert len(limit.get_current_usage()) == 2 assert limit._current_usage[1].get_value() == 4
def test_str_multi(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4) limit._add_current_usage(3) limit._add_current_usage(2) assert limit.get_current_usage_str() == 'max: 4 (2, 3, 4)'
def test_overridden(self): limit = AwsLimit('limitname', self.mock_svc, 100, 88, 99) limit.warn_percent = 1 limit.warn_count = 2 limit.crit_percent = 3 limit.crit_count = 4 assert limit._get_thresholds() == ( 2, 1, 4, 3 )
def test_str_multi_id(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4, resource_id='foo4bar') limit._add_current_usage(3, resource_id='foo3bar') limit._add_current_usage(2, resource_id='foo2bar') assert limit.get_current_usage_str() == 'max: foo4bar=4 (foo2bar=2, ' \ 'foo3bar=3, foo4bar=4)'
def __init__(self, limit: AwsLimit, type: str, dimensions: list, alarm_actions: List[str] = []): self.alarm_name = f'{limit.service.service_name} {limit.name} {type}' self.metric_name = f'{limit.service.service_name}-{limit.name}' self.alarm_actions = alarm_actions self.period = 3600 # 1h self.evaluation_period_sec = 4 # 4h self.dimensions = dimensions resource_id = self.get_resource_id_from_dimensions() if resource_id is not None: self.alarm_name += ' ' + resource_id if type == 'warn': self.threshold = limit.get_limit() * ( limit.warn_percent or limit.def_warning_threshold / 100) elif type == 'crit': self.threshold = limit.get_limit() * ( limit.crit_percent or limit.def_critical_threshold / 100) else: raise Exception(f'Unknown type "{type}" for Alarm')
def test_add_current_usage(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) assert limit._current_usage == [] limit._add_current_usage(2) assert len(limit.get_current_usage()) == 1 assert limit._current_usage[0].get_value() == 2 limit._add_current_usage(4) assert len(limit.get_current_usage()) == 2 assert limit._current_usage[1].get_value() == 4
def test_get_current_usage_str_multi(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4) limit._add_current_usage(3) limit._add_current_usage(2) assert limit.get_current_usage_str() == 'max: 4 (2, 3, 4)'
def test_get_thresholds_overridden(self): limit = AwsLimit('limitname', self.mock_svc, 100, 88, 99) limit.warn_percent = 1 limit.warn_count = 2 limit.crit_percent = 3 limit.crit_count = 4 assert limit._get_thresholds() == ( 2, 1, 4, 3 )
def test_get_current_usage_str_multi_id(self): limit = AwsLimit( 'limitname', self.mock_svc, 3, 1, 2 ) limit._add_current_usage(4, resource_id='foo4bar') limit._add_current_usage(3, resource_id='foo3bar') limit._add_current_usage(2, resource_id='foo2bar') assert limit.get_current_usage_str() == 'max: foo4bar=4 (foo2bar=2, ' \ 'foo3bar=3, foo4bar=4)'
def test_init_type(self): limit = AwsLimit( 'limitname', self.mock_svc, 1, 6, 12, limit_type='foo', limit_subtype='bar', ) assert limit.name == 'limitname' assert limit.service == self.mock_svc assert limit.default_limit == 1 assert limit.limit_type == 'foo' assert limit.limit_subtype == 'bar' assert limit.limit_override is None assert limit.override_ta is True assert limit.def_warning_threshold == 6 assert limit.def_critical_threshold == 12
def test_simple(self): limit = AwsLimit('limitname', self.mock_svc, 3, 7, 11) assert limit.name == 'limitname' assert limit.service == self.mock_svc assert limit.default_limit == 3 assert limit.limit_type is None assert limit.limit_subtype is None assert limit.limit_override is None assert limit.override_ta is True assert limit.ta_limit is None assert limit.ta_unlimited is False assert limit.api_limit is None assert limit.def_warning_threshold == 7 assert limit.def_critical_threshold == 11 assert limit._ta_service_name is None assert limit._ta_limit_name is None assert limit._quotas_service_code is None assert limit._quotas_name is None assert limit._quotas_unit == 'None' assert limit.quotas_limit is None assert limit.quotas_unit_converter is None
def test_update_limits_from_api(self): mock_conn = Mock() mock_conf = Mock() type(mock_conf).region_name = 'us-west-2' mock_conn._client_config = mock_conf with patch('%s.connect' % pb, create=True) as mock_connect: cls = _EfsService(21, 43) cls.conn = mock_conn cls.limits = { 'File systems': AwsLimit( 'File systems', cls, 125, cls.warning_threshold, cls.critical_threshold, limit_type='AWS::EFS::FileSystem', ) } cls._update_limits_from_api() assert mock_connect.mock_calls == [call()] assert mock_conn.mock_calls == [] assert cls.limits['File systems'].default_limit == 125
def test_get_limit_source_ta_unlimited(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._set_ta_unlimited() assert limit.get_limit_source() == SOURCE_TA
def test_get_limit_source_api_override_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._set_api_limit(40) limit._set_ta_limit(41) limit.set_limit_override(55) assert limit.get_limit_source() == SOURCE_OVERRIDE
def test_get_limit_source_override_no_override_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(55, override_ta=False) limit._set_ta_limit(40) assert limit.get_limit_source() == SOURCE_TA
def test_get_limit_api_override_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(55) limit._set_ta_limit(40) limit._set_api_limit(11) assert limit.get_limit() == 55
def test_get_limit_override(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(55) assert limit.get_limit() == 55
def test_get_current_usage_str_id(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._add_current_usage(4, resource_id='foobar') assert limit.get_current_usage_str() == 'foobar=4'
def test_get_current_usage_str_none(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) assert limit.get_current_usage_str() == '<unknown>'
def test_get_limit_api(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._set_api_limit(40) assert limit.get_limit() == 40
def test_get_limit_source_default(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) assert limit.get_limit_source() == SOURCE_DEFAULT
def test_get_limit_source_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._set_ta_limit(40) assert limit.get_limit_source() == 2
def test_get_thresholds(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) assert limit._get_thresholds() == (None, 1, None, 2)
def test_set_api_limit(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) assert limit.api_limit is None limit._set_api_limit(10) assert limit.api_limit == 10
def test_get_current_usage(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._current_usage = 2 assert limit.get_current_usage() == 2
def test_get_limit_ta_unlimited(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(55, override_ta=False) limit._set_ta_unlimited() assert limit.get_limit() is None
def test_get_current_usage_str(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._add_current_usage(4) assert limit.get_current_usage_str() == '4'
def test_get_limit_default(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) assert limit.get_limit() == 3
def test_get_warnings(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) m = Mock() limit._warnings = m assert limit.get_warnings() == m
def test_get_limit_source_api_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit._set_api_limit(40) limit._set_ta_limit(41) assert limit.get_limit_source() == SOURCE_API
def test_set_limit_override_ta_False(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(1, override_ta=False) assert limit.limit_override == 1 assert limit.default_limit == 3 assert limit.override_ta is False
def test_get_criticals(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) m = Mock() limit._criticals = m assert limit.get_criticals() == m
def test_ta_limit_name_default(self): limit = AwsLimit('limitname', self.mock_svc, 100, 1, 2) assert limit.ta_limit_name == 'limitname'
def test_get_limit_source_override_with_ta(self): limit = AwsLimit('limitname', self.mock_svc, 3, 1, 2) limit.set_limit_override(55) limit._set_ta_limit(40) assert limit.get_limit_source() == 1