123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #!/usr/bin/env vpython3
- # Copyright 2020 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import json
- import os
- import shutil
- import subprocess
- import tempfile
- import unittest
- import binary_sizes
- from common import DIR_SOURCE_ROOT
- _EXAMPLE_BLOBS = """
- {
- "web_engine": [
- {
- "merkle": "77e876447dd2daaaab7048d646e87fe8b6d9fecef6cbfcc4af30b8fbfa50b881",
- "path": "locales/ta.pak",
- "bytes": 17916,
- "is_counted": true,
- "size": 16384
- },
- {
- "merkle": "5f1932b8c9fe954f3c3fdb34ab2089d2af34e5a0cef90cad41a1cd37d92234bf",
- "path": "lib/libEGL.so",
- "bytes": 226960,
- "is_counted": true,
- "size": 90112
- },
- {
- "merkle": "9822fc0dd95cdd1cc46b5c6632a928a6ad19b76ed0157397d82a2f908946fc34",
- "path": "meta.far",
- "bytes": 24576,
- "is_counted": true,
- "size": 16384
- },
- {
- "merkle": "090aed4593c4f7d04a3ad80e9971c0532dd5b1d2bdf4754202cde510a88fd220",
- "path": "locales/ru.pak",
- "bytes": 11903,
- "is_counted": true,
- "size": 16384
- }
- ]
- }
- """
- class TestBinarySizes(unittest.TestCase):
- tmpdir = None
- @classmethod
- def setUpClass(cls):
- cls.tmpdir = tempfile.mkdtemp()
- @classmethod
- def tearDownClass(cls):
- shutil.rmtree(cls.tmpdir)
- def testReadAndWritePackageBlobs(self):
- # TODO(1309977): Disabled on Windows because Windows doesn't allow opening a
- # NamedTemporaryFile by name.
- if os.name == 'nt':
- return
- with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
- tmp_file.write(_EXAMPLE_BLOBS)
- tmp_file.flush()
- package_blobs = binary_sizes.ReadPackageBlobsJson(tmp_file.name)
- tmp_package_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
- tmp_package_file.close()
- try:
- binary_sizes.WritePackageBlobsJson(tmp_package_file.name, package_blobs)
- self.assertEqual(binary_sizes.ReadPackageBlobsJson(tmp_package_file.name),
- package_blobs)
- finally:
- os.remove(tmp_package_file.name)
- def testReadAndWritePackageSizes(self):
- # TODO(1309977): Disabled on Windows because Windows doesn't allow opening a
- # NamedTemporaryFile by name.
- if os.name == 'nt':
- return
- with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
- tmp_file.write(_EXAMPLE_BLOBS)
- tmp_file.flush()
- blobs = binary_sizes.ReadPackageBlobsJson(tmp_file.name)
- sizes = binary_sizes.GetPackageSizes(blobs)
- new_sizes = {}
- with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
- binary_sizes.WritePackageSizesJson(tmp_file.name, sizes)
- new_sizes = binary_sizes.ReadPackageSizesJson(tmp_file.name)
- self.assertEqual(new_sizes, sizes)
- self.assertIn('web_engine', new_sizes)
- def testGetPackageSizesUsesBlobMerklesForCount(self):
- # TODO(1309977): Disabled on Windows because Windows doesn't allow opening a
- # NamedTemporaryFile by name.
- if os.name == 'nt':
- return
- blobs = json.loads(_EXAMPLE_BLOBS)
- # Make a duplicate of the last blob.
- last_blob = dict(blobs['web_engine'][-1])
- blobs['cast_runner'] = []
- last_blob['path'] = 'foo' # Give a non-sense name, but keep merkle.
- # If the merkle is the same, the blob_count increases by 1.
- # This effectively reduces the size of the blobs size by half.
- # In both packages, despite it appearing in both and under different
- # names.
- blobs['cast_runner'].append(last_blob)
- with tempfile.NamedTemporaryFile(mode='w') as tmp_file:
- tmp_file.write(json.dumps(blobs))
- tmp_file.flush()
- blobs = binary_sizes.ReadPackageBlobsJson(tmp_file.name)
- sizes = binary_sizes.GetPackageSizes(blobs)
- self.assertEqual(sizes['cast_runner'].compressed, last_blob['size'] / 2)
- if __name__ == '__main__':
- unittest.main()
|