blob: 19000273b5cae6fbb7817a675deb6d35d59916a3 [file] [log] [blame] [edit]
#!/usr/bin/env python3
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import pathlib
import shutil
import sys
import tempfile
import unittest
import zipfile
import zip_helpers
def _make_test_zips(tmp_dir, create_conflct=False):
zip1 = os.path.join(tmp_dir, 'A.zip')
zip2 = os.path.join(tmp_dir, 'B.zip')
with zipfile.ZipFile(zip1, 'w') as z:
z.writestr('file1', 'AAAAA')
z.writestr('file2', 'BBBBB')
with zipfile.ZipFile(zip2, 'w') as z:
z.writestr('file2', 'ABABA' if create_conflct else 'BBBBB')
z.writestr('file3', 'CCCCC')
return zip1, zip2
class ZipHelpersTest(unittest.TestCase):
def test_merge_zips__identical_file(self):
with tempfile.TemporaryDirectory() as tmp_dir:
zip1, zip2 = _make_test_zips(tmp_dir)
merged_zip = os.path.join(tmp_dir, 'merged.zip')
zip_helpers.merge_zips(merged_zip, [zip1, zip2])
with zipfile.ZipFile(merged_zip) as z:
self.assertEqual(z.namelist(), ['file1', 'file2', 'file3'])
def test_merge_zips__conflict(self):
with tempfile.TemporaryDirectory() as tmp_dir:
zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True)
merged_zip = os.path.join(tmp_dir, 'merged.zip')
with self.assertRaises(Exception):
zip_helpers.merge_zips(merged_zip, [zip1, zip2])
def test_merge_zips__conflict_with_append(self):
with tempfile.TemporaryDirectory() as tmp_dir:
zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True)
with self.assertRaises(Exception):
with zipfile.ZipFile(zip1, 'a') as dst_zip:
zip_helpers.merge_zips(dst_zip, [zip2])
if __name__ == '__main__':
unittest.main()