Allow generating OTA package from non-sparse images.

Test: build OTA package in cuttlefish

Bug: 120041578
Change-Id: I246c38e08376c837b7f126aa19cb8c1d73ed1e26
This commit is contained in:
Yifan Hong
2019-04-04 15:37:57 -07:00
parent 2eb9692618
commit 8a66a71b06
4 changed files with 210 additions and 26 deletions

View File

@@ -14,9 +14,13 @@
# limitations under the License.
#
import os
from hashlib import sha1
import common
from blockimgdiff import (
BlockImageDiff, DataImage, EmptyImage, HeapItem, ImgdiffStats, Transfer)
BlockImageDiff, DataImage, EmptyImage, FileImage, HeapItem, ImgdiffStats,
Transfer)
from rangelib import RangeSet
from test_utils import ReleaseToolsTestCase
@@ -264,7 +268,42 @@ class ImgdiffStatsTest(ReleaseToolsTestCase):
class DataImageTest(ReleaseToolsTestCase):
def test_read_range_set(self):
data = "file" + ('\0' * 4092)
image = DataImage(data)
self.assertEqual(data, "".join(image.ReadRangeSet(image.care_map)))
def test_read_range_set(self):
data = "file" + ('\0' * 4092)
image = DataImage(data)
self.assertEqual(data, "".join(image.ReadRangeSet(image.care_map)))
class FileImageTest(ReleaseToolsTestCase):
def setUp(self):
self.file_path = common.MakeTempFile()
self.data = os.urandom(4096 * 4)
with open(self.file_path, 'w') as f:
f.write(self.data)
self.file = FileImage(self.file_path)
def test_totalsha1(self):
self.assertEqual(sha1(self.data).hexdigest(), self.file.TotalSha1())
def test_ranges(self):
blocksize = self.file.blocksize
for s in range(4):
for e in range(s, 4):
expected_data = self.data[s * blocksize : e * blocksize]
rs = RangeSet([s, e])
data = "".join(self.file.ReadRangeSet(rs))
self.assertEqual(expected_data, data)
sha1sum = self.file.RangeSha1(rs)
self.assertEqual(sha1(expected_data).hexdigest(), sha1sum)
tmpfile = common.MakeTempFile()
with open(tmpfile, 'w') as f:
self.file.WriteRangeDataToFd(rs, f)
with open(tmpfile, 'r') as f:
self.assertEqual(expected_data, f.read())
def test_read_all(self):
data = "".join(self.file.ReadRangeSet(self.file.care_map))
self.assertEqual(self.data, data)