Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
  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))
Ejemplo n.º 5
0
  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)
Ejemplo n.º 6
0
  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)