def test_copy_attachments_from_phase(self): first_attachment_name = 'first_attachment_name' first_attachment = _create_hacked_massive_attachment() expected_first_attachment_proto = mfg_event_pb2.EventAttachment( name=first_attachment_name, value_binary=first_attachment.data, type=test_runs_pb2.TEXT_UTF8) other_attachment_name = 'mock-attachment-name1' other_attachment = _create_hacked_massive_attachment() expected_other_attachment_proto = mfg_event_pb2.EventAttachment( name=other_attachment_name, value_binary=other_attachment.data, type=test_runs_pb2.TEXT_UTF8) phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), attachments={ first_attachment_name: first_attachment, other_attachment_name: other_attachment, }, ) mfg_event = mfg_event_pb2.MfgEvent() # Leave attachment_cache as None so attachment sizes are irrelevant as # partial uploads are considered unavailable. copier = mfg_event_converter.PhaseCopier([phase]) copier.copy_attachments(mfg_event) self.assertCountEqual( tuple(mfg_event.attachment), (expected_first_attachment_proto, expected_other_attachment_proto))
def test_copy_measurements_from_phase(self): measurement = (self._create_and_set_measurement( 'mock-measurement-name', 5).doc('mock measurement docstring').with_units( units.Unit('radian')).in_range(1, 10)) # We 'incorrectly' create a measurement with a unicode character as # a python2 string. We don't want mfg_event_converter to guess at it's # encoding but we also don't want to fail after a test on conversion so it # replaces errors with a unicode question mark character. measurement_text = self._create_and_set_measurement('text', b'\xfd') measurement_unicode = self._create_and_set_measurement( 'unicode', u'\ufffa') phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), measurements={ 'mock-measurement-name': measurement, 'text': measurement_text, 'unicode': measurement_unicode, }, ) mfg_event = mfg_event_pb2.MfgEvent() copier = mfg_event_converter.PhaseCopier([phase]) copier.copy_measurements(mfg_event) # Names. created_measurements = sorted(mfg_event.measurement, key=lambda m: m.name) mock_measurement = created_measurements[0] text_measurement = created_measurements[1] unicode_measurement = created_measurements[2] self.assertEqual(mock_measurement.name, u'mock-measurement-name') self.assertEqual(text_measurement.name, u'text') self.assertEqual(unicode_measurement.name, u'unicode') # Basic measurement fields. self.assertEqual(mock_measurement.status, test_runs_pb2.PASS) self.assertEqual(mock_measurement.description, 'mock measurement docstring') self.assertEqual(mock_measurement.parameter_tag[0], 'mock-phase-name') self.assertEqual(mock_measurement.unit_code, test_runs_pb2.Units.UnitCode.Value('RADIAN')) # Measurement value. self.assertEqual(mock_measurement.numeric_value, 5.0) # FFFD is unicode's '?'. This occurs when we can't easily convert a python2 # string to unicode. self.assertEqual(text_measurement.text_value, u'\ufffd') self.assertEqual(unicode_measurement.text_value, u'\ufffa') # Measurement validators. self.assertEqual(mock_measurement.numeric_minimum, 1.0) self.assertEqual(mock_measurement.numeric_maximum, 10.0) self.assertEqual(mock_measurement.name, u'mock-measurement-name') self.assertEqual(mock_measurement.name, u'mock-measurement-name')
def testCopyAttachmentsFromPhase(self): attachment = test_record.Attachment('mock-data', 'text/plain') phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), attachments={'mock-attachment-name': attachment}, ) mfg_event = mfg_event_pb2.MfgEvent() copier = mfg_event_converter.PhaseCopier([phase]) copier.copy_attachments(mfg_event) self.assertEqual(mfg_event.attachment[0].name, 'mock-attachment-name') self.assertEqual(mfg_event.attachment[0].value_binary, b'mock-data') self.assertEqual(mfg_event.attachment[0].type, test_runs_pb2.TEXT_UTF8)
def test_copy_attachments_skips_if_too_much_data_and_returns_false(self): attachment_names = ('mock-attachment-name0', 'mock-attachment-name1') phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), attachments={ name: _create_hacked_massive_attachment() for name in attachment_names }, ) mfg_event = mfg_event_pb2.MfgEvent() copier = mfg_event_converter.PhaseCopier( [phase], attachment_cache={}, # Indicates partial uploads are available. ) self.assertFalse(copier.copy_attachments(mfg_event)) self.assertEqual(len(mfg_event.attachment), 1)
def test_copy_attachments_uses_attachment_cache_and_overcomes_size_limits( self): cached_attachment_name = 'cached_attachment_name' cached_attachment = _create_hacked_massive_attachment() cached_attachment_proto = mfg_event_pb2.EventAttachment( name='incorrect_name_to_ensure_cache_is_used', existing_blobref=mfg_event_pb2.EventAttachment.ExistingBlobRef( blob_id=b'dummy_id', size=cached_attachment.size)) other_attachment_name = 'mock-attachment-name1' other_attachment = _create_hacked_massive_attachment() expected_other_attachment_proto = mfg_event_pb2.EventAttachment( name=other_attachment_name, value_binary=other_attachment.data, type=test_runs_pb2.TEXT_UTF8) phase = test_record.PhaseRecord( name='mock-phase-name', descriptor_id=1, codeinfo=self.create_codeinfo(), attachments={ cached_attachment_name: cached_attachment, other_attachment_name: other_attachment, }, ) mfg_event = mfg_event_pb2.MfgEvent() copier = mfg_event_converter.PhaseCopier( [phase], attachment_cache={ mfg_event_converter.AttachmentCacheKey(name=cached_attachment_name, size=cached_attachment.size): cached_attachment_proto }) self.assertTrue(copier.copy_attachments(mfg_event)) self.assertCountEqual( tuple(mfg_event.attachment), (cached_attachment_proto, expected_other_attachment_proto))