-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathbinary_sizes_test.py
executable file
·135 lines (110 loc) · 3.79 KB
/
binary_sizes_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env vpython3
# Copyright 2020 The Chromium Authors
# 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()