def test_Finalize_assertReservedLength(self):
        entries = (
            'payload.bin',
            'payload_properties.txt',
            'care_map.txt',
            'META-INF/com/android/metadata',
        )
        zip_file = self._construct_zip_package(entries)
        property_files = StreamingPropertyFiles()
        with zipfile.ZipFile(zip_file, 'r') as zip_fp:
            # First get the raw metadata string (i.e. without padding space).
            raw_metadata = property_files._GetPropertyFilesString(
                zip_fp, reserve_space=False)
            raw_length = len(raw_metadata)

            # Now pass in the exact expected length.
            streaming_metadata = property_files.Finalize(zip_fp, raw_length)
            self.assertEqual(raw_length, len(streaming_metadata))

            # Or pass in insufficient length.
            self.assertRaises(AssertionError, property_files.Finalize, zip_fp,
                              raw_length - 1)

            # Or pass in a much larger size.
            streaming_metadata = property_files.Finalize(
                zip_fp, raw_length + 20)
            self.assertEqual(raw_length + 20, len(streaming_metadata))
            self.assertEqual(' ' * 20, streaming_metadata[raw_length:])
    def test_Compute(self):
        entries = (
            'payload.bin',
            'payload_properties.txt',
        )
        zip_file = self._construct_zip_package(entries)
        property_files = StreamingPropertyFiles()
        with zipfile.ZipFile(zip_file, 'r') as zip_fp:
            streaming_metadata = property_files.Compute(zip_fp)

        tokens = self._parse_streaming_metadata_string(streaming_metadata)
        self.assertEqual(3, len(tokens))
        self._verify_entries(zip_file, tokens, entries)
    def test_Verify(self):
        entries = (
            'payload.bin',
            'payload_properties.txt',
            'care_map.txt',
            'META-INF/com/android/metadata',
        )
        zip_file = self._construct_zip_package(entries)
        property_files = StreamingPropertyFiles()
        with zipfile.ZipFile(zip_file, 'r') as zip_fp:
            # First get the raw metadata string (i.e. without padding space).
            raw_metadata = property_files._GetPropertyFilesString(
                zip_fp, reserve_space=False)

            # Should pass the test if verification passes.
            property_files.Verify(zip_fp, raw_metadata)

            # Or raise on verification failure.
            self.assertRaises(AssertionError, property_files.Verify, zip_fp,
                              raw_metadata + 'x')
    def test_Finalize(self):
        entries = [
            'payload.bin',
            'payload_properties.txt',
            'META-INF/com/android/metadata',
        ]
        zip_file = self._construct_zip_package(entries)
        property_files = StreamingPropertyFiles()
        with zipfile.ZipFile(zip_file, 'r') as zip_fp:
            raw_metadata = property_files._GetPropertyFilesString(
                zip_fp, reserve_space=False)
            streaming_metadata = property_files.Finalize(
                zip_fp, len(raw_metadata))
        tokens = self._parse_streaming_metadata_string(streaming_metadata)

        self.assertEqual(3, len(tokens))
        # 'META-INF/com/android/metadata' will be key'd as 'metadata' in the
        # streaming metadata.
        entries[2] = 'metadata'
        self._verify_entries(zip_file, tokens, entries)
  def test_Finalize(self):
    entries = [
        'payload.bin',
        'payload_properties.txt',
        'care_map.txt',
        'compatibility.zip',
        'META-INF/com/android/metadata',
    ]
    zip_file = self.construct_zip_package(entries)
    property_files = StreamingPropertyFiles()
    with zipfile.ZipFile(zip_file, 'r') as zip_fp:
      # pylint: disable=protected-access
      raw_metadata = property_files._GetPropertyFilesString(
          zip_fp, reserve_space=False)
      streaming_metadata = property_files.Finalize(zip_fp, len(raw_metadata))
    tokens = self._parse_property_files_string(streaming_metadata)

    self.assertEqual(5, len(tokens))
    # 'META-INF/com/android/metadata' will be key'd as 'metadata' in the
    # streaming metadata.
    entries[4] = 'metadata'
    self._verify_entries(zip_file, tokens, entries)
 def test_init(self):
   property_files = StreamingPropertyFiles()
   self.assertEqual('ota-streaming-property-files', property_files.name)
   self.assertEqual(
       (
           'payload.bin',
           'payload_properties.txt',
       ),
       property_files.required)
   self.assertEqual(
       (
           'care_map.txt',
           'compatibility.zip',
       ),
       property_files.optional)