예제 #1
0
  def testTelemetryValidatorIgnoresMissingPointOnPartialUpdate(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_1, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_MISSING_POINT_PARTIAL)

    self.assertEmpty(validator.GetErrors())
예제 #2
0
    def testTelemetryValidatorCallbackWhenAllEntitiesValidated(self):
        def ValidationCallback(validator):
            self.assertEmpty(validator.GetErrors())
            self.assertTrue(validator.AllEntitiesValidated())

        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, ValidationCallback)

        validator.ValidateMessage(_MESSAGE_GOOD)
예제 #3
0
    def testTelemetryValidatorOnMultiStateWithStringSuccess(self):
        def ValidationCallback(validator):
            self.assertEmpty(validator.GetErrors())
            self.assertTrue(validator.AllEntitiesValidated())

        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_7, 1, ValidationCallback)

        validator.ValidateMessage(_MESSAGE_STRING_STATES)
예제 #4
0
    def testTelemetryValidatorOnMultiStateWithRawValueList(self):
        def ValidationCallback(validator):
            self.assertEmpty(validator.GetErrors())
            self.assertTrue(validator.AllEntitiesValidated())

        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_6, 1, ValidationCallback)

        validator.ValidateMessage(_MESSAGE_GOOD_STATES_LIST)
예제 #5
0
  def testTelemetryValidatorGetUnvalidatedEntitiesReturnsMissingEntities(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_3_4, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_GOOD_2)

    unvalidated_entities = validator.GetUnvalidatedEntityNames()
    self.assertNotIn(_ENTITY_NAME_3, unvalidated_entities)
    self.assertIn(_ENTITY_NAME_4, unvalidated_entities)
    self.assertLen(unvalidated_entities, 1)
예제 #6
0
    def testTelemetryValidatorDetectsUnknownEntity(self):
        validator = telemetry_validator.TelemetryValidator({}, 1,
                                                           _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_GOOD)

        error = telemetry_error.TelemetryError(_ENTITY_NAME_1, None,
                                               'Unknown entity')
        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertEqual(len(errors), 1)
예제 #7
0
    def testTelemetryValidatorDetectsBooleanAsInvalidNumber(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_INVALID_NUMBER_BOOLEAN)

        error = telemetry_error.TelemetryError(_ENTITY_NAME_1, _POINT_NAME_1,
                                               'Invalid number: False')
        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertEqual(len(errors), 1)
예제 #8
0
    def testTelemetryValidatorDetectsInvalidState(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_2, 1, _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_INVALID_STATE)

        error = telemetry_error.TelemetryError(_ENTITY_NAME_2, _POINT_NAME_3,
                                               'Invalid state: BAD_STATE')
        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertEqual(len(errors), 1)
예제 #9
0
    def testTelemetryValidatorDetectsMissingPresentValue(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_MISSING_PRESENT_VALUE)

        error = telemetry_error.TelemetryError(_ENTITY_NAME_1, _POINT_NAME_1,
                                               'Missing present value')
        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertEqual(len(errors), 1)
예제 #10
0
  def testTelemetryValidatorDetectsMissingPoint(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_1, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_MISSING_POINT)

    error = telemetry_error.TelemetryError(
        _ENTITY_NAME_1, _POINT_NAME_2, 'Field missing from '
        'telemetry message')
    errors = validator.GetErrors()
    self.assertIn(error, errors)
    self.assertLen(errors, 1)
예제 #11
0
  def testTelemetryValidatorDetectsNoneValue(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_1, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_INVALID_NUMBER)

    error = telemetry_error.TelemetryError(
        _ENTITY_NAME_1, _POINT_NAME_1, 'Missing number in telemetry message'
        ': None')

    errors = validator.GetErrors()
    self.assertIn(error, errors)
    self.assertEqual(len(errors), 1)
예제 #12
0
  def testTelemetryValidatorDetectsStringAsInvalidNumber(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_1, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_INVALID_NUMBER)

    error = telemetry_error.TelemetryError(
        _ENTITY_NAME_1, _POINT_NAME_1, 'Invalid number in telemetry message'
        ': BAD_NUMBER')

    errors = validator.GetErrors()
    self.assertIn(error, errors)
    self.assertLen(errors, 1)
    def testTelemetryValidatorDetectsMissingPresentValue(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NullCallback)

        validator.ValidateMessage(_MESSAGE_MISSING_PRESENT_VALUE)

        error = telemetry_error.TelemetryError(
            _ENTITY_NAME_1, _POINT_NAME_1,
            'Missing number in telemetry message'
            ': None')

        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertLen(errors, 1)
    def testTelemetryValidatorDetectsBooleanAsInvalidNumber(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NullCallback)

        validator.ValidateMessage(_MESSAGE_INVALID_NUMBER_BOOLEAN)

        error = telemetry_error.TelemetryError(
            _ENTITY_NAME_1, _POINT_NAME_1,
            'Invalid number in telemetry message'
            ': false')

        errors = validator.GetErrors()
        self.assertIn(error, errors)
        self.assertLen(errors, 1)
예제 #15
0
    def testTelemetryValidatorDetectsMultipleErrorsInMessage(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_MULTIPLE_ERRORS)

        error_one = telemetry_error.TelemetryError(
            _ENTITY_NAME_1, _POINT_NAME_1, 'Invalid number: BAD_NUMBER')
        error_two = telemetry_error.TelemetryError(_ENTITY_NAME_1,
                                                   _POINT_NAME_2,
                                                   'Missing point')
        errors = validator.GetErrors()
        self.assertIn(error_one, errors)
        self.assertIn(error_two, errors)
        self.assertEqual(len(errors), 2)
예제 #16
0
  def Validate(self, entities: Dict[str, entity_instance.EntityInstance],
               timeout: int) -> None:
    """Validates telemetry payload received from the subscription.

    Args:
      entities: EntityInstance dictionary keyed by entity name
      timeout: number of seconds to wait for telemetry
    """

    print('Connecting to pubsub subscription: ', self.subscription)
    sub = subscriber.Subscriber(self.subscription, self.service_account_file)
    validator = telemetry_validator.TelemetryValidator(
        entities, timeout, _TelemetryValidationCallback)
    validator.StartTimer()
    sub.Listen(validator.ValidateMessage)
예제 #17
0
  def testTelemetryValidatorGetErrorsReturnsAllErrors(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_1, 1,
                                                       _NULL_CALLBACK)
    error_one = telemetry_error.TelemetryError(_ENTITY_NAME_1, _POINT_NAME_1,
                                               'Test error 1')
    error_two = telemetry_error.TelemetryError(_ENTITY_NAME_2, _POINT_NAME_2,
                                               'Test error 2')

    validator.AddError(error_one)
    validator.AddError(error_two)
    errors = validator.GetErrors()

    self.assertIn(error_one, errors)
    self.assertIn(error_two, errors)
    self.assertLen(errors, 2)
예제 #18
0
  def testTelemetryValidatorDetectsUnmappedState(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_2, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_INVALID_STATE)

    error1 = telemetry_error.TelemetryError(
        _ENTITY_NAME_2, _POINT_NAME_3, 'Unmapped state in telemetry message'
        ': BAD_STATE')
    error2 = telemetry_error.TelemetryError(
        _ENTITY_NAME_2, _POINT_NAME_4, 'Unmapped state in telemetry message: 3')

    errors = validator.GetErrors()
    self.assertIn(error1, errors)
    self.assertIn(error2, errors)
    self.assertLen(errors, 2)
예제 #19
0
 def StartTelemetryValidation(self, subscription, service_account_file,
                              entity_instances):
     """Validates telemetry payload received from the subscription.
  Args:
    subscription: a pubsub subscription.
    service_account_file: a GCP service account file.
    entity_instances: EntityInstance dictionary
 """
     if self.pubsub_validation_set:
         print('Connecting to pubsub subscription: ', subscription)
         sub = subscriber.Subscriber(subscription, service_account_file)
         validator = telemetry_validator.TelemetryValidator(
             entity_instances, self.timeout,
             self.TelemetryValidationCallback)
         validator.StartTimer()
         sub.Listen(validator.ValidateMessage)
예제 #20
0
  def testTelemetryValidatorDetectsInvalidState(self):
    validator = telemetry_validator.TelemetryValidator(_ENTITIES_2, 1,
                                                       _NULL_CALLBACK)

    validator.ValidateMessage(_MESSAGE_INVALID_STATE)

    error1 = telemetry_error.TelemetryError(
        _ENTITY_NAME_2, _POINT_NAME_3, 'Missing state in telemetry message'
        ': None')
    error2 = telemetry_error.TelemetryError(
        _ENTITY_NAME_2, _POINT_NAME_4, 'Missing state in telemetry message'
        ': None')

    errors = validator.GetErrors()
    self.assertIn(error1, errors)
    self.assertIn(error2, errors)
    self.assertEqual(len(errors), 2)
예제 #21
0
    def testTelemetryValidatorDetectsMultipleErrorsInMessage(self):
        validator = telemetry_validator.TelemetryValidator(
            _ENTITIES_1, 1, _NULL_CALLBACK)

        validator.ValidateMessage(_MESSAGE_MULTIPLE_ERRORS)

        error_one = telemetry_error.TelemetryError(
            _ENTITY_NAME_1, _POINT_NAME_1, 'Missing number in telemetry '
            'message: None')
        error_two = telemetry_error.TelemetryError(
            _ENTITY_NAME_1, _POINT_NAME_2, 'Field missing from telemetry '
            'message')

        errors = validator.GetErrors()
        self.assertIn(error_one, errors)
        self.assertIn(error_two, errors)
        self.assertLen(errors, 2)