# -*- coding: utf-8 -*- # 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 os import unittest from pathlib import Path from tempfile import mkstemp import mozunit from mozrelease.update_verify import UpdateVerifyConfig, UpdateVerifyError DATA_PATH = Path(__file__).with_name("data") class TestUpdateVerifyConfig(unittest.TestCase): config = str(DATA_PATH.joinpath("sample-update-verify.cfg")) def setUp(self): self.uvc = UpdateVerifyConfig() fd, self.tmpfilename = mkstemp() self.tmpfile = os.fdopen(fd, "wb") def tearDown(self): self.tmpfile.close() os.unlink(self.tmpfilename) def testEq(self): self.uvc.product = "foo" self.uvc.channel = "betatest" self.uvc.aus_server = "aus" self.uvc.ftp_server_from = "ftp" self.uvc.ftp_server_to = "ftp" self.uvc.to = "/firefox/4.0rc2.tar.bz2" self.uvc.mar_channel_IDs = "baz" self.uvc.to_build_id = "999" self.uvc.to_display_version = "99.0 Zeta 9" self.uvc.to_app_version = "99.0" uvc2 = UpdateVerifyConfig() uvc2.product = "foo" uvc2.channel = "betatest" uvc2.aus_server = "aus" uvc2.ftp_server_form = "ftp" uvc2.ftp_server_to = "ftp" uvc2.to = "/firefox/4.0rc2.tar.bz2" uvc2.mar_channel_IDs = "baz" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" self.assertEqual(self.uvc, uvc2) def testNe(self): self.uvc.product = "foo" uvc2 = UpdateVerifyConfig() # assertNotEqual doesn't test the __ne__ function, so we do this self.assertTrue(self.uvc != uvc2) def testAddRelease(self): releases = [ { "release": "4.0", "platform": "bar", "build_id": 555, "locales": ["af", "de"], "patch_types": ["partial", "complete"], "from": "/pub/firefox/foo.bz2", "ftp_server_from": "from", "ftp_server_to": "to", "mar_channel_IDs": "firefox-mozilla-booyah", "updater_package": None, } ] self.uvc.addRelease( "4.0", build_id=555, locales=["af", "de"], patch_types=["partial", "complete"], from_path="/pub/firefox/foo.bz2", ftp_server_from="from", ftp_server_to="to", mar_channel_IDs="firefox-mozilla-booyah", platform="bar", ) self.assertEqual(self.uvc.releases, releases) def testAddReleasesWithDifferentPlatforms(self): releases = [ { "release": "4.0", "platform": "WINNT_x86-msvc", "build_id": 555, "locales": ["af", "de"], "patch_types": ["partial", "complete"], "from": "/pub/firefox/foo.bz2", "ftp_server_from": "from", "ftp_server_to": "to", "mar_channel_IDs": "firefox-mozilla-booyah", "updater_package": None, }, { "release": "5.0", "platform": "WINNT_x86-msvc-x86", "build_id": 666, "locales": ["af", "de"], "patch_types": ["partial", "complete"], "from": "/pub/firefox/foo2.bz2", "ftp_server_from": "from", "ftp_server_to": "to", "mar_channel_IDs": "firefox-mozilla-booyah", "updater_package": None, }, ] self.uvc.addRelease( "4.0", build_id=555, locales=["af", "de"], patch_types=["partial", "complete"], from_path="/pub/firefox/foo.bz2", ftp_server_from="from", ftp_server_to="to", mar_channel_IDs="firefox-mozilla-booyah", platform="WINNT_x86-msvc", ) self.uvc.addRelease( "5.0", build_id=666, locales=["af", "de"], patch_types=["partial", "complete"], from_path="/pub/firefox/foo2.bz2", ftp_server_from="from", ftp_server_to="to", mar_channel_IDs="firefox-mozilla-booyah", platform="WINNT_x86-msvc-x86", ) self.assertEqual(self.uvc.releases, releases) def testRead(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" uvc2 = UpdateVerifyConfig() uvc2.product = "Firefox" uvc2.channel = "betatest" uvc2.aus_server = "https://aus4.mozilla.org" uvc2.to = "/firefox/4.0rc2.tar.bz2" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" uvc2.addRelease( "4.0", build_id="888", platform="Linux_x86-gcc3", locales=["af", "de", "en-US", "ja", "zh-TW"], patch_types=["partial", "complete"], from_path="/firefox/4.0rc1.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, mar_channel_IDs="firefox-mozilla-beta", ) uvc2.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["af", "en-US"], from_path="/firefox/4.0b12.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) uvc2.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["de", "ja", "zh-TW"], ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) uvc2.addRelease( "3.7a1", build_id="666", locales=["en-US"], ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, platform="Linux_x86-gcc3", ) self.uvc.read(self.config) self.assertEqual(self.uvc, uvc2) def testWrite(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" self.uvc.product = "Firefox" self.uvc.channel = "betatest" self.uvc.aus_server = "https://aus4.mozilla.org" self.uvc.to = "/firefox/4.0rc2.tar.bz2" self.uvc.to_build_id = "999" self.uvc.to_display_version = "99.0 Zeta 9" self.uvc.to_app_version = "99.0" self.uvc.addRelease( "4.0", build_id="888", platform="Linux_x86-gcc3", locales=("af", "de", "en-US", "ja", "zh-TW"), patch_types=("partial", "complete"), from_path="/firefox/4.0rc1.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, mar_channel_IDs="firefox-mozilla-beta", ) self.uvc.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["af", "en-US"], from_path="/firefox/4.0b12.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) self.uvc.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=("de", "ja", "zh-TW"), ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) self.uvc.addRelease( "3.7a1", build_id="666", locales=("en-US",), ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, platform="Linux_x86-gcc3", ) self.uvc.write(self.tmpfile) self.tmpfile.close() self.assertEqual(open(self.config).read(), open(self.tmpfilename).read()) def testReadInvalidKey(self): invalidLine = 'foo="bar"' self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) def testReadDuplicateKey(self): invalidLine = 'release="bar" release="blah"' self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) def testParseLineBad(self): invalidLine = "abh nthntuehonhuh nhhueont hntueoh nthouo" self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) def testGetChunk(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" self.uvc.read(self.config) uvc2 = UpdateVerifyConfig() uvc2.product = "Firefox" uvc2.channel = "betatest" uvc2.aus_server = "https://aus4.mozilla.org" uvc2.to = "/firefox/4.0rc2.tar.bz2" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" uvc2.addRelease( "4.0", build_id="888", platform="Linux_x86-gcc3", locales=["af", "de", "en-US"], patch_types=["partial", "complete"], from_path="/firefox/4.0rc1.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, mar_channel_IDs="firefox-mozilla-beta", ) uvc2.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["de", "ja"], patch_types=["complete"], ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, from_path=None, ) chunkedConfig = self.uvc.getChunk(chunks=3, thisChunk=1) self.assertEqual(chunkedConfig, uvc2) def testGetChunkWithPathWithSpaces(self): self.uvc.product = "Firefox" self.uvc.channel = "betatest" self.uvc.aus_server = "https://aus4.mozilla.org" self.uvc.ftp_server_from = "stage.mozilla.org/firefox" self.uvc.ftp_server_to = "stage.mozilla.org/firefox" self.uvc.to = "/firefox/Firefox 4.0 Beta 2.exe" self.uvc.to_build_id = "999" self.uvc.to_display_version = "99.0 Zeta 9" self.uvc.to_app_version = "99.0" self.uvc.addRelease( "4.0b1", build_id="222", platform="Linux_x86-gcc3", locales=["en-US", "ja", "zh-TW"], patch_types=["complete"], from_path="/firefox/Firefox 4.0 Beta 1.exe", ) uvc2 = UpdateVerifyConfig() uvc2.product = "Firefox" uvc2.channel = "betatest" uvc2.aus_server = "https://aus4.mozilla.org" uvc2.ftp_server_from = "stage.mozilla.org/firefox" uvc2.ftp_server_to = "stage.mozilla.org/firefox" uvc2.to = "/firefox/Firefox 4.0 Beta 2.exe" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" uvc2.addRelease( "4.0b1", build_id="222", platform="Linux_x86-gcc3", locales=["en-US", "ja"], patch_types=["complete"], from_path="/firefox/Firefox 4.0 Beta 1.exe", ) chunkedConfig = self.uvc.getChunk(chunks=2, thisChunk=1) self.assertEqual(chunkedConfig, uvc2) def testAddLocaleToRelease(self): from_path = "/firefox/4.0rc1.tar.bz2" self.uvc.read(self.config) self.uvc.addLocaleToRelease("888", "he", from_path) self.assertEqual( self.uvc.getRelease("888", from_path)["locales"], ["af", "de", "en-US", "he", "ja", "zh-TW"], ) def testAddLocaleToReleaseMultipleBuildIDs(self): from_path = None self.uvc.read(self.config) self.uvc.addLocaleToRelease("777", "he", from_path) self.assertEqual( self.uvc.getRelease("777", from_path)["locales"], ["de", "he", "ja", "zh-TW"], ) def testAddLocaleToNonexistentRelease(self): self.uvc.read(self.config) self.assertRaises(UpdateVerifyError, self.uvc.addLocaleToRelease, "123", "he") def testGetReleaseNonexistenceRelease(self): self.uvc.read(self.config) self.assertEqual(self.uvc.getRelease("123", None), {}) def testGetFullReleaseTests(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" self.uvc.read(self.config) uvc2 = UpdateVerifyConfig() uvc2.product = "Firefox" uvc2.channel = "betatest" uvc2.aus_server = "https://aus4.mozilla.org" uvc2.to = "/firefox/4.0rc2.tar.bz2" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" uvc2.addRelease( "4.0", build_id="888", platform="Linux_x86-gcc3", locales=["af", "de", "en-US", "ja", "zh-TW"], patch_types=["partial", "complete"], from_path="/firefox/4.0rc1.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, mar_channel_IDs="firefox-mozilla-beta", ) uvc2.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["af", "en-US"], patch_types=["complete"], from_path="/firefox/4.0b12.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) self.assertEqual(self.uvc.getFullReleaseTests(), uvc2.releases) def testGetQuickReleaseTests(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" self.uvc.read(self.config) uvc2 = UpdateVerifyConfig() uvc2.product = "Firefox" uvc2.channel = "betatest" uvc2.aus_server = "https://aus4.mozilla.org" uvc2.to = "/firefox/4.0rc2.tar.bz2" uvc2.to_build_id = "999" uvc2.to_display_version = "99.0 Zeta 9" uvc2.to_app_version = "99.0" uvc2.addRelease( "4.0b12", build_id="777", platform="Linux_x86-gcc3", locales=["de", "ja", "zh-TW"], patch_types=["complete"], from_path=None, ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) uvc2.addRelease( "3.7a1", build_id="666", platform="Linux_x86-gcc3", locales=["en-US"], patch_types=["complete"], from_path=None, ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, ) self.assertEqual(self.uvc.getQuickReleaseTests(), uvc2.releases) if __name__ == "__main__": mozunit.main()