mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 17:56:10 +03:00
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
|
#!/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()
|