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))
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
  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))