def test_good(self): context = ExecutionContext() source = [{ 'metric': 'A', 'limit': 100.0, 'usage': 0.0 }, { 'metric': 'B', 'limit': 100.0, 'usage': 90.0 }, { 'metric': 'C', 'limit': 100.0, 'usage': 100.0 }] require = {'A': 95.0, 'B': 10.0} pred = QuotaPredicate(require) builder = KeyedPredicateResultBuilder(pred) builder.add_result( 'A', make_quota_result(context, True, source, require, 'A')) builder.add_result( 'B', make_quota_result(context, True, source, require, 'B')) builder.comment = 'Satisfied all 2 metrics.' result = pred(context, source) self.assertTrue(result) self.assertEqual(result, builder.build(True))
def test_bad(self): context = ExecutionContext() source = [{ 'metric': 'A', 'limit': 100.0, 'usage': 0.0 }, { 'metric': 'B', 'limit': 100.0, 'usage': 90.0 }, { 'metric': 'C', 'limit': 100.0, 'usage': 100.0 }] require = {'A': 95.0, 'B': 15.0} pred = QuotaPredicate(require) builder = KeyedPredicateResultBuilder(pred) builder.add_result( 'A', make_quota_result(context, True, source, require, 'A')) builder.add_result( 'B', make_quota_result(context, False, source, require, 'B')) builder.comment = 'Insufficient C.' result = pred(context, source) self.assertFalse(result)
def __call__(self, context, value): """Implements ValuePredicate. Args: context: [ExecutionContext] The execution context to evaluate within. values: [array of dict] A list of dictionary resource quota descriptions following the format returned described by the "quotas" attribute of https://cloud.google.com/compute/docs/reference/latest/projects#resource """ builder = KeyedPredicateResultBuilder(self) # NOTE(20180710): # b/111302333: get() because 'metric' is not always provided. dictified = {elem.get('metric'): elem for elem in value} bad_metrics = [] for metric, expect in self.__minimum_quota.items(): found = dictified.get(metric) if found is None: bad_metrics.append(metric) builder.add_result( metric, PathValueResult(source=None, target_path='metric', path_value=PathValue('', value), valid=False, pred=EQUIVALENT(metric), comment='Missing metric value.')) continue pred = PathPredicate('', pred=NUM_GE(expect), transform=self.__diff) result = pred(context, found) builder.add_result(metric, result) if not result: bad_metrics.append(metric) if bad_metrics: builder.comment = 'Insufficient {0}.'.format( ' and '.join(bad_metrics)) valid = False else: valid = True builder.comment = 'Satisfied all {0} metrics.'.format( len(self.__minimum_quota)) return builder.build(valid)
def test_good(self): context = ExecutionContext() source = [{'metric': 'A', 'limit': 100.0, 'usage': 0.0}, {'metric': 'B', 'limit': 100.0, 'usage': 90.0}, {'metric': 'C', 'limit': 100.0, 'usage': 100.0}] require = {'A': 95.0, 'B': 10.0} pred = QuotaPredicate(require) builder = KeyedPredicateResultBuilder(pred) builder.add_result( 'A', make_quota_result(context, True, source, require, 'A')) builder.add_result( 'B', make_quota_result(context, True, source, require, 'B')) builder.comment = 'Satisfied all 2 metrics.' result = pred(context, source) self.assertTrue(result) self.assertEqual(result, builder.build(True))
def __call__(self, context, value): """Implements ValuePredicate. Args: context: [ExecutionContext] The execution context to evaluate within. values: [array of dict] A list of dictionary resource quota descriptions following the format returned described by the "quotas" attribute of https://cloud.google.com/compute/docs/reference/latest/projects#resource """ builder = KeyedPredicateResultBuilder(self) # NOTE(20180710): # b/111302333: get() because 'metric' is not always provided. dictified = {elem.get('metric'): elem for elem in value} bad_metrics = [] for metric, expect in self.__minimum_quota.items(): found = dictified.get(metric) if found is None: bad_metrics.append(metric) builder.add_result( metric, PathValueResult(source=None, target_path='metric', path_value=PathValue('', value), valid=False, pred=EQUIVALENT(metric), comment='Missing metric value.')) continue pred = PathPredicate('', pred=NUM_GE(expect), transform=self.__diff) result = pred(context, found) builder.add_result(metric, result) if not result: bad_metrics.append(metric) if bad_metrics: builder.comment = 'Insufficient {0}.'.format(' and '.join(bad_metrics)) valid = False else: valid = True builder.comment = 'Satisfied all {0} metrics.'.format( len(self.__minimum_quota)) return builder.build(valid)
def test_bad(self): context = ExecutionContext() source = [{'metric': 'A', 'limit': 100.0, 'usage': 0.0}, {'metric': 'B', 'limit': 100.0, 'usage': 90.0}, {'metric': 'C', 'limit': 100.0, 'usage': 100.0}] require = {'A': 95.0, 'B': 15.0} pred = QuotaPredicate(require) builder = KeyedPredicateResultBuilder(pred) builder.add_result( 'A', make_quota_result(context, True, source, require, 'A')) builder.add_result( 'B', make_quota_result(context, False, source, require, 'B')) builder.comment = 'Insufficient C.' result = pred(context, source) self.assertFalse(result)