def _verify_field_mismatch(exists, usage): if not base_verifier._verify_date_field( usage.created_at, exists.created_at, same_second=True): raise FieldMismatch('created_at', { 'name': 'exists', 'value': exists.created_at }, { 'name': 'launches', 'value': usage.created_at }, exists.uuid) if usage.owner != exists.owner: raise FieldMismatch('owner', { 'name': 'exists', 'value': exists.owner }, { 'name': 'launches', 'value': usage.owner }, exists.uuid) if usage.size != exists.size: raise FieldMismatch('size', { 'name': 'exists', 'value': exists.size }, { 'name': 'launches', 'value': usage.size }, exists.uuid)
def _verify_field_mismatch(exists, usage): if not base_verifier._verify_date_field( usage.created_at, exists.created_at, same_second=True): raise FieldMismatch('created_at', exists.created_at, usage.created_at) if usage.owner != exists.owner: raise FieldMismatch('owner', exists.owner, usage.owner) if usage.size != exists.size: raise FieldMismatch('size', exists.size, usage.size)
def _verify_for_delete(exist, delete=None, delete_type="InstanceDeletes"): if not delete and exist.delete: # We know we have a delete and we have it's id delete = exist.delete elif not delete: if exist.deleted_at: # We received this exists before the delete, go find it deletes = models.InstanceDeletes.find( exist.instance, dt.dt_from_decimal(exist.launched_at)) if deletes.count() == 1: delete = deletes[0] else: query = { 'instance': exist.instance, 'launched_at': exist.launched_at } raise NotFound(delete_type, query) else: # We don't know if this is supposed to have a delete or not. # Thus, we need to check if we have a delete for this instance. # We need to be careful though, since we could be verifying an # exist event that we got before the delete. So, we restrict the # search to only deletes before this exist's audit period ended. # If we find any, we fail validation launched_at = dt.dt_from_decimal(exist.launched_at) deleted_at_max = dt.dt_from_decimal(exist.audit_period_ending) deletes = models.InstanceDeletes.find(exist.instance, launched_at, deleted_at_max) if deletes.count() > 0: reason = 'Found %s for non-delete exist' % delete_type raise VerificationException(reason) if delete: if not base_verifier._verify_date_field( delete.launched_at, exist.launched_at, same_second=True): raise FieldMismatch('launched_at', { 'name': 'exists', 'value': exist.launched_at }, { 'name': 'deletes', 'value': delete.launched_at }, exist.instance) if not base_verifier._verify_date_field( delete.deleted_at, exist.deleted_at, same_second=True): raise FieldMismatch('deleted_at', { 'name': 'exists', 'value': exist.deleted_at }, { 'name': 'deletes', 'value': delete.deleted_at }, exist.instance)
def _verify_field_mismatch(exists, launch): if not _verify_date_field(launch.launched_at, exists.launched_at, same_second=True): raise FieldMismatch('launched_at', exists.launched_at, launch.launched_at) if launch.instance_type_id != exists.instance_type_id: raise FieldMismatch('instance_type_id', exists.instance_type_id, launch.instance_type_id) if launch.tenant != exists.tenant: raise FieldMismatch('tenant', exists.tenant, launch.tenant)
def test_verify_exist_marks_exist_failed_if_field_mismatch_exception(self): self.mox.StubOutWithMock(datetime, 'datetime') datetime.datetime.utcnow().AndReturn('2014-01-01 01:01:01') self.mox.ReplayAll() exist1 = self.mox.CreateMockAnything() exist2 = self.mox.CreateMockAnything() self.mox.StubOutWithMock(glance_verifier, '_verify_for_usage') self.mox.StubOutWithMock(glance_verifier, '_verify_for_delete') self.mox.StubOutWithMock(glance_verifier, '_verify_validity') field_mismatch_exc = FieldMismatch('field', 'expected', 'actual', 'uuid') glance_verifier._verify_for_usage(exist1).AndRaise( exception=field_mismatch_exc) exist1.mark_failed( reason="Failed at 2014-01-01 01:01:01 UTC for uuid: Expected " "field to be 'expected' got 'actual'") glance_verifier._verify_for_usage(exist2) glance_verifier._verify_for_delete(exist2) glance_verifier._verify_validity(exist2) exist2.mark_verified() self.mox.ReplayAll() verified, exist = glance_verifier._verify([exist1, exist2]) self.mox.VerifyAll() self.assertFalse(verified)
def test_verify_exist_marks_exist_failed_if_field_mismatch_exception(self): utils.mock_datetime_utcnow(self.mox, '2014-01-02 03:04:05') exist1 = self.mox.CreateMockAnything() exist2 = self.mox.CreateMockAnything() self.mox.StubOutWithMock(glance_verifier, '_verify_for_usage') self.mox.StubOutWithMock(glance_verifier, '_verify_for_delete') self.mox.StubOutWithMock(glance_verifier, '_verify_validity') entity_1 = {'name': 'exists', 'value': 'expected'} entity_2 = {'name': 'launches', 'value': 'actual'} field_mismatch_exc = FieldMismatch('field', entity_1, entity_2, 'uuid') glance_verifier._verify_for_usage(exist1).AndRaise( exception=field_mismatch_exc) exist1.mark_failed( reason="Failed at 2014-01-02 03:04:05 UTC for uuid: Data mismatch " "for 'field' - 'exists' contains 'expected' but 'launches' " "contains 'actual'") glance_verifier._verify_for_usage(exist2) glance_verifier._verify_for_delete(exist2) glance_verifier._verify_validity(exist2) exist2.mark_verified() self.mox.ReplayAll() verified, exist = glance_verifier._verify([exist1, exist2]) self.mox.VerifyAll() self.assertFalse(verified)
def test_verify_exist_marks_exist_failed_if_field_mismatch_exception(self): mock_logger = self._setup_mock_logger() self.mox.StubOutWithMock(mock_logger, 'info') mock_logger.exception("glance: Expected field to be 'expected' " "got 'actual'") exist1 = self.mox.CreateMockAnything() exist2 = self.mox.CreateMockAnything() self.mox.StubOutWithMock(glance_verifier, '_verify_for_usage') self.mox.StubOutWithMock(glance_verifier, '_verify_for_delete') self.mox.StubOutWithMock(glance_verifier, '_verify_validity') field_mismatch_exc = FieldMismatch('field', 'expected', 'actual') glance_verifier._verify_for_usage(exist1).AndRaise( exception=field_mismatch_exc) exist1.mark_failed(reason='FieldMismatch') glance_verifier._verify_for_usage(exist2) glance_verifier._verify_for_delete(exist2) glance_verifier._verify_validity(exist2) exist2.mark_verified() self.mox.ReplayAll() verified, exist = glance_verifier._verify([exist1, exist2]) self.mox.VerifyAll() self.assertFalse(verified)
def _verify_field_mismatch(exists, launch): flavor_field_name = config.flavor_field_name() if not base_verifier._verify_date_field( launch.launched_at, exists.launched_at, same_second=True): raise FieldMismatch('launched_at', exists.launched_at, launch.launched_at, exists.instance) if getattr(launch, flavor_field_name) != \ getattr(exists, flavor_field_name): raise FieldMismatch(flavor_field_name, getattr(exists, flavor_field_name), getattr(launch, flavor_field_name), exists.instance) if launch.tenant != exists.tenant: raise FieldMismatch('tenant', exists.tenant, launch.tenant, exists.instance) if launch.rax_options != exists.rax_options: raise FieldMismatch('rax_options', exists.rax_options, launch.rax_options, exists.instance) if launch.os_architecture != exists.os_architecture: raise FieldMismatch('os_architecture', exists.os_architecture, launch.os_architecture, exists.instance) if launch.os_version != exists.os_version: raise FieldMismatch('os_version', exists.os_version, launch.os_version, exists.instance) if launch.os_distro != exists.os_distro: raise FieldMismatch('os_distro', exists.os_distro, launch.os_distro, exists.instance)
def test_field_mismatch_exception(self): self.mox.StubOutWithMock(datetime, 'datetime') datetime.datetime.utcnow().AndReturn('2014-01-02 03:04:05') self.mox.ReplayAll() exception = FieldMismatch('field_name', 'expected', 'actual', 'uuid') self.assertEqual(exception.reason, "Failed at 2014-01-02 03:04:05 UTC for uuid: Expected" " field_name to be 'expected' got 'actual'")
def test_field_mismatch_exception(self): utils.mock_datetime_utcnow(self.mox, '2014-01-02 03:04:05') exception = FieldMismatch('field_name', { 'name': 'entity1', 'value': 'expected' }, { 'name': 'entity2', 'value': 'actual' }, 'uuid') self.assertEqual( exception.reason, "Failed at 2014-01-02 03:04:05 UTC for uuid: Data mismatch for " "'field_name' - 'entity1' contains 'expected' but 'entity2' " "contains 'actual'")