michael@0: #!/usr/bin/env python michael@0: michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: # You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: import mozinfo michael@0: import mozinstall michael@0: import mozfile michael@0: import os michael@0: import tarfile michael@0: import tempfile michael@0: import unittest michael@0: import zipfile michael@0: michael@0: # Store file location at load time michael@0: here = os.path.dirname(os.path.abspath(__file__)) michael@0: michael@0: class TestMozInstall(unittest.TestCase): michael@0: michael@0: @classmethod michael@0: def setUpClass(cls): michael@0: """ Setting up stub installers """ michael@0: cls.dmg = os.path.join(here, 'Installer-Stubs', 'firefox.dmg') michael@0: cls.exe = os.path.join(here, 'Installer-Stubs', 'firefox.exe') michael@0: cls.zipfile = os.path.join(here, 'Installer-Stubs', 'firefox.zip') michael@0: cls.bz2 = os.path.join(here, 'Installer-Stubs', 'firefox.tar.bz2') michael@0: michael@0: def setUp(self): michael@0: self.tempdir = tempfile.mkdtemp() michael@0: michael@0: def tearDown(self): michael@0: mozfile.rmtree(self.tempdir) michael@0: michael@0: def test_get_binary(self): michael@0: """ Test mozinstall's get_binary method """ michael@0: michael@0: if mozinfo.isLinux: michael@0: installdir = mozinstall.install(self.bz2, self.tempdir) michael@0: binary = os.path.join(installdir, 'firefox') michael@0: self.assertEqual(binary, mozinstall.get_binary(installdir, 'firefox')) michael@0: michael@0: elif mozinfo.isWin: michael@0: installdir_exe = mozinstall.install(self.exe, michael@0: os.path.join(self.tempdir, 'exe')) michael@0: binary_exe = os.path.join(installdir_exe, 'firefox', 'firefox', michael@0: 'firefox.exe') michael@0: self.assertEqual(binary_exe, mozinstall.get_binary(installdir_exe, michael@0: 'firefox')) michael@0: michael@0: installdir_zip = mozinstall.install(self.zipfile, michael@0: os.path.join(self.tempdir, 'zip')) michael@0: binary_zip = os.path.join(installdir_zip, 'firefox.exe') michael@0: self.assertEqual(binary_zip, mozinstall.get_binary(installdir_zip, michael@0: 'firefox')) michael@0: michael@0: elif mozinfo.isMac: michael@0: installdir = mozinstall.install(self.dmg, self.tempdir) michael@0: binary = os.path.join(installdir, 'Contents', 'MacOS', 'firefox') michael@0: self.assertEqual(binary, mozinstall.get_binary(installdir, 'firefox')) michael@0: michael@0: def test_get_binary_error(self): michael@0: """ Test an InvalidBinary error is raised """ michael@0: michael@0: tempdir_empty = tempfile.mkdtemp() michael@0: self.assertRaises(mozinstall.InvalidBinary, mozinstall.get_binary, michael@0: tempdir_empty, 'firefox') michael@0: mozfile.rmtree(tempdir_empty) michael@0: michael@0: def test_is_installer(self): michael@0: """ Test we can identify a correct installer """ michael@0: michael@0: if mozinfo.isLinux: michael@0: self.assertTrue(mozinstall.is_installer(self.bz2)) michael@0: michael@0: if mozinfo.isWin: michael@0: # test zip installer michael@0: self.assertTrue(mozinstall.is_installer(self.zipfile)) michael@0: michael@0: # test exe installer michael@0: self.assertTrue(mozinstall.is_installer(self.exe)) michael@0: michael@0: try: michael@0: # test stub browser file michael@0: # without pefile on the system this test will fail michael@0: import pefile michael@0: stub_exe = os.path.join(here, 'build_stub', 'firefox.exe') michael@0: self.assertFalse(mozinstall.is_installer(stub_exe)) michael@0: except ImportError: michael@0: pass michael@0: michael@0: if mozinfo.isMac: michael@0: self.assertTrue(mozinstall.is_installer(self.dmg)) michael@0: michael@0: def test_invalid_source_error(self): michael@0: """ Test InvalidSource error is raised with an incorrect installer """ michael@0: michael@0: if mozinfo.isLinux: michael@0: self.assertRaises(mozinstall.InvalidSource, mozinstall.install, michael@0: self.dmg, 'firefox') michael@0: michael@0: elif mozinfo.isWin: michael@0: self.assertRaises(mozinstall.InvalidSource, mozinstall.install, michael@0: self.bz2, 'firefox') michael@0: michael@0: elif mozinfo.isMac: michael@0: self.assertRaises(mozinstall.InvalidSource, mozinstall.install, michael@0: self.exe, 'firefox') michael@0: michael@0: def test_install(self): michael@0: """ Test mozinstall's install capability """ michael@0: michael@0: if mozinfo.isLinux: michael@0: installdir = mozinstall.install(self.bz2, self.tempdir) michael@0: self.assertEqual(os.path.join(self.tempdir, 'firefox'), installdir) michael@0: michael@0: elif mozinfo.isWin: michael@0: installdir_exe = mozinstall.install(self.exe, michael@0: os.path.join(self.tempdir, 'exe')) michael@0: self.assertEqual(os.path.join(self.tempdir, 'exe', 'firefox'), michael@0: installdir_exe) michael@0: michael@0: installdir_zip = mozinstall.install(self.zipfile, michael@0: os.path.join(self.tempdir, 'zip')) michael@0: self.assertEqual(os.path.join(self.tempdir, 'zip', 'firefox'), michael@0: installdir_zip) michael@0: michael@0: elif mozinfo.isMac: michael@0: installdir = mozinstall.install(self.dmg, self.tempdir) michael@0: self.assertEqual(os.path.join(os.path.realpath(self.tempdir), michael@0: 'FirefoxStub.app'), installdir) michael@0: michael@0: def test_uninstall(self): michael@0: """ Test mozinstall's uninstall capabilites """ michael@0: # Uninstall after installing michael@0: michael@0: if mozinfo.isLinux: michael@0: installdir = mozinstall.install(self.bz2, self.tempdir) michael@0: mozinstall.uninstall(installdir) michael@0: self.assertFalse(os.path.exists(installdir)) michael@0: michael@0: elif mozinfo.isWin: michael@0: # Exe installer for Windows michael@0: installdir_exe = mozinstall.install(self.exe, michael@0: os.path.join(self.tempdir, 'exe')) michael@0: mozinstall.uninstall(installdir_exe) michael@0: self.assertFalse(os.path.exists(installdir_exe)) michael@0: michael@0: # Zip installer for Windows michael@0: installdir_zip = mozinstall.install(self.zipfile, michael@0: os.path.join(self.tempdir, 'zip')) michael@0: mozinstall.uninstall(installdir_zip) michael@0: self.assertFalse(os.path.exists(installdir_zip)) michael@0: michael@0: elif mozinfo.isMac: michael@0: installdir = mozinstall.install(self.dmg, self.tempdir) michael@0: mozinstall.uninstall(installdir) michael@0: self.assertFalse(os.path.exists(installdir)) michael@0: michael@0: if __name__ == '__main__': michael@0: unittest.main()