tools/update-packaging/test_make_incremental_updates.py
author Eitan Isaacson <eitan@monotonous.org>
Mon, 10 Dec 2018 03:30:21 +0000
changeset 449682 3386ff76878d83496bb822d09115c77472808b53
parent 408629 b86e592046e4c4b89883fe755945cc36cb613c77
permissions -rw-r--r--
Bug 1511955 - Don't traverse into children without hypertext interfaces. r=Jamie This prevents an infinite loop where we go into a child only to find the nearest hypertext accessible being its parent. Differential Revision: https://phabricator.services.mozilla.com/D13998

#!/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()