зеркало из https://github.com/mozilla/gecko-dev.git
212 строки
7.5 KiB
Python
212 строки
7.5 KiB
Python
#!/usr/bin/python
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
import unittest
|
|
import make_incremental_updates as mkup
|
|
from make_incremental_updates import PatchInfo, MarFileEntry
|
|
|
|
|
|
class TestPatchInfo(unittest.TestCase):
|
|
def setUp(self):
|
|
self.work_dir = "work_dir"
|
|
self.file_exclusion_list = [
|
|
"update.manifest",
|
|
"updatev2.manifest",
|
|
"updatev3.manifest",
|
|
]
|
|
self.path_exclusion_list = ["/readme.txt"]
|
|
self.patch_info = PatchInfo(
|
|
self.work_dir, self.file_exclusion_list, self.path_exclusion_list
|
|
)
|
|
|
|
def testPatchInfo(self):
|
|
self.assertEquals(self.work_dir, self.patch_info.work_dir)
|
|
self.assertEquals([], self.patch_info.archive_files)
|
|
self.assertEquals([], self.patch_info.manifestv2)
|
|
self.assertEquals([], self.patch_info.manifestv3)
|
|
self.assertEquals(self.file_exclusion_list, self.patch_info.file_exclusion_list)
|
|
self.assertEquals(self.path_exclusion_list, self.patch_info.path_exclusion_list)
|
|
|
|
def test_append_add_instruction(self):
|
|
self.patch_info.append_add_instruction("file.test")
|
|
self.assertEquals(['add "file.test"'], self.patch_info.manifestv2)
|
|
self.assertEquals(['add "file.test"'], self.patch_info.manifestv3)
|
|
|
|
def test_append_add_if_instruction(self):
|
|
self.patch_info.append_add_instruction(
|
|
"distribution/extensions/extension/file.test"
|
|
)
|
|
self.assertEquals(
|
|
[
|
|
'add-if "distribution/extensions/extension" "distribution/extensions/extension/file.test"' # NOQA: E501
|
|
],
|
|
self.patch_info.manifestv2,
|
|
)
|
|
self.assertEquals(
|
|
[
|
|
'add-if "distribution/extensions/extension" "distribution/extensions/extension/file.test"' # NOQA: E501
|
|
],
|
|
self.patch_info.manifestv3,
|
|
)
|
|
|
|
def test_append_add_if_not_instruction(self):
|
|
self.patch_info.append_add_if_not_instruction("file.test")
|
|
self.assertEquals([], self.patch_info.manifestv2)
|
|
self.assertEquals(
|
|
['add-if-not "file.test" "file.test"'], self.patch_info.manifestv3
|
|
)
|
|
|
|
def test_append_patch_instruction(self):
|
|
self.patch_info.append_patch_instruction("file.test", "patchname")
|
|
self.assertEquals(['patch "patchname" "file.test"'], self.patch_info.manifestv2)
|
|
self.assertEquals(['patch "patchname" "file.test"'], self.patch_info.manifestv3)
|
|
|
|
def test_append_patch_if_instruction(self):
|
|
self.patch_info.append_patch_instruction(
|
|
"distribution/extensions/extension/file.test", "patchname"
|
|
)
|
|
self.assertEquals(
|
|
[
|
|
'patch-if "distribution/extensions/extension" "patchname" "distribution/extensions/extension/file.test"' # NOQA: E501
|
|
],
|
|
self.patch_info.manifestv2,
|
|
)
|
|
self.assertEquals(
|
|
[
|
|
'patch-if "distribution/extensions/extension" "patchname" "distribution/extensions/extension/file.test"' # NOQA: E501
|
|
],
|
|
self.patch_info.manifestv3,
|
|
)
|
|
|
|
def test_append_remove_instruction(self):
|
|
self.patch_info.append_remove_instruction("file.test")
|
|
self.assertEquals(['remove "file.test"'], self.patch_info.manifestv2)
|
|
self.assertEquals(['remove "file.test"'], self.patch_info.manifestv3)
|
|
|
|
def test_append_rmdir_instruction(self):
|
|
self.patch_info.append_remove_instruction("dirtest/")
|
|
self.assertEquals(['rmdir "dirtest/"'], self.patch_info.manifestv2)
|
|
self.assertEquals(['rmdir "dirtest/"'], self.patch_info.manifestv3)
|
|
|
|
def test_append_rmrfdir_instruction(self):
|
|
self.patch_info.append_remove_instruction("dirtest/*")
|
|
self.assertEquals(['rmrfdir "dirtest/"'], self.patch_info.manifestv2)
|
|
self.assertEquals(['rmrfdir "dirtest/"'], self.patch_info.manifestv3)
|
|
|
|
""" FIXME touches the filesystem, need refactoring
|
|
def test_create_manifest_file(self):
|
|
self.patch_info.create_manifest_file()
|
|
"""
|
|
|
|
def test_build_marfile_entry_hash(self):
|
|
self.assertEquals(
|
|
({}, set([]), set([])),
|
|
self.patch_info.build_marfile_entry_hash("root_path"),
|
|
)
|
|
|
|
|
|
""" FIXME touches the filesystem, need refactoring
|
|
class TestMarFileEntry(unittest.TestCase):
|
|
def setUp(self):
|
|
root_path = '.'
|
|
self.filename = 'file.test'
|
|
f = open(self.filename, 'w')
|
|
f.write('Test data\n')
|
|
f.close()
|
|
self.mar_file_entry = MarFileEntry(root_path, self.filename)
|
|
|
|
def test_calc_file_sha_digest(self):
|
|
f = open('test.sha', 'r')
|
|
goodSha = f.read()
|
|
f.close()
|
|
sha = self.mar_file_entry.calc_file_sha_digest(self.filename)
|
|
self.assertEquals(goodSha, sha)
|
|
|
|
def test_sha(self):
|
|
f = open('test.sha', 'r')
|
|
goodSha = f.read()
|
|
f.close()
|
|
sha = self.mar_file_entry.sha()
|
|
self.assertEquals(goodSha, sha)
|
|
"""
|
|
|
|
|
|
class TestMakeIncrementalUpdates(unittest.TestCase):
|
|
def setUp(self):
|
|
work_dir = "."
|
|
self.patch_info = PatchInfo(
|
|
work_dir,
|
|
["update.manifest", "updatev2.manifest", "updatev3.manifest"],
|
|
["/readme.txt"],
|
|
)
|
|
root_path = "/"
|
|
filename = "test.file"
|
|
self.mar_file_entry = MarFileEntry(root_path, filename)
|
|
|
|
""" FIXME makes direct shell calls, need refactoring
|
|
def test_exec_shell_cmd(self):
|
|
mkup.exec_shell_cmd('echo test')
|
|
|
|
def test_copy_file(self):
|
|
mkup.copy_file('src_file_abs_path', 'dst_file_abs_path')
|
|
|
|
def test_bzip_file(self):
|
|
mkup.bzip_file('filename')
|
|
|
|
def test_bunzip_file(self):
|
|
mkup.bunzip_file('filename')
|
|
|
|
def test_extract_mar(self):
|
|
mkup.extract_mar('filename', 'work_dir')
|
|
|
|
def test_create_partial_patch_for_file(self):
|
|
mkup.create_partial_patch_for_file('from_marfile_entry', 'to_marfile_entry', 'shas',
|
|
self.patch_info)
|
|
|
|
def test_create_add_patch_for_file(self):
|
|
mkup.create_add_patch_for_file('to_marfile_entry', self.patch_info)
|
|
|
|
def test_process_explicit_remove_files(self):
|
|
mkup.process_explicit_remove_files('dir_path', self.patch_info)
|
|
|
|
def test_create_partial_patch(self):
|
|
mkup.create_partial_patch('from_dir_path', 'to_dir_path', 'patch_filename', 'shas',
|
|
self.patch_info, 'forced_updates')
|
|
|
|
def test_create_partial_patches(patches):
|
|
mkup.create_partial_patches('patches')
|
|
|
|
"""
|
|
|
|
""" FIXME touches the filesystem, need refactoring
|
|
def test_get_buildid(self):
|
|
mkup.get_buildid('work_dir', 'platform')
|
|
"""
|
|
|
|
def test_decode_filename(self):
|
|
expected = {
|
|
"locale": "lang",
|
|
"platform": "platform",
|
|
"product": "product",
|
|
"version": "1.0",
|
|
"type": "complete",
|
|
}
|
|
self.assertEquals(
|
|
expected, mkup.decode_filename("product-1.0.lang.platform.complete.mar")
|
|
)
|
|
self.assertEquals(
|
|
expected, mkup.decode_filename("platform/lang/product-1.0.complete.mar")
|
|
)
|
|
with self.assertRaises(Exception) as cm:
|
|
mkup.decode_filename("fail")
|
|
self.assertTrue(
|
|
cm.exception.args[0].startswith("could not parse filepath fail:")
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|