test_update_verify.py (15071B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import os 6 import unittest 7 from pathlib import Path 8 from tempfile import mkstemp 9 10 import mozunit 11 12 from mozrelease.update_verify import UpdateVerifyConfig, UpdateVerifyError 13 14 DATA_PATH = Path(__file__).with_name("data") 15 16 17 class TestUpdateVerifyConfig(unittest.TestCase): 18 config = str(DATA_PATH.joinpath("sample-update-verify.cfg")) 19 20 def setUp(self): 21 self.uvc = UpdateVerifyConfig() 22 fd, self.tmpfilename = mkstemp() 23 self.tmpfile = os.fdopen(fd, "wb") 24 25 def tearDown(self): 26 self.tmpfile.close() 27 os.unlink(self.tmpfilename) 28 29 def testEq(self): 30 self.uvc.product = "foo" 31 self.uvc.channel = "betatest" 32 self.uvc.aus_server = "aus" 33 self.uvc.ftp_server_from = "ftp" 34 self.uvc.ftp_server_to = "ftp" 35 self.uvc.to = "/firefox/4.0rc2.tar.bz2" 36 self.uvc.mar_channel_IDs = "baz" 37 self.uvc.to_build_id = "999" 38 self.uvc.to_display_version = "99.0 Zeta 9" 39 self.uvc.to_app_version = "99.0" 40 uvc2 = UpdateVerifyConfig() 41 uvc2.product = "foo" 42 uvc2.channel = "betatest" 43 uvc2.aus_server = "aus" 44 uvc2.ftp_server_form = "ftp" 45 uvc2.ftp_server_to = "ftp" 46 uvc2.to = "/firefox/4.0rc2.tar.bz2" 47 uvc2.mar_channel_IDs = "baz" 48 uvc2.to_build_id = "999" 49 uvc2.to_display_version = "99.0 Zeta 9" 50 uvc2.to_app_version = "99.0" 51 self.assertEqual(self.uvc, uvc2) 52 53 def testNe(self): 54 self.uvc.product = "foo" 55 uvc2 = UpdateVerifyConfig() 56 # assertNotEqual doesn't test the __ne__ function, so we do this 57 self.assertTrue(self.uvc != uvc2) 58 59 def testAddRelease(self): 60 releases = [ 61 { 62 "release": "4.0", 63 "platform": "bar", 64 "build_id": 555, 65 "locales": ["af", "de"], 66 "patch_types": ["partial", "complete"], 67 "from": "/pub/firefox/foo.bz2", 68 "ftp_server_from": "from", 69 "ftp_server_to": "to", 70 "mar_channel_IDs": "firefox-mozilla-booyah", 71 "updater_package": None, 72 } 73 ] 74 self.uvc.addRelease( 75 "4.0", 76 build_id=555, 77 locales=["af", "de"], 78 patch_types=["partial", "complete"], 79 from_path="/pub/firefox/foo.bz2", 80 ftp_server_from="from", 81 ftp_server_to="to", 82 mar_channel_IDs="firefox-mozilla-booyah", 83 platform="bar", 84 ) 85 self.assertEqual(self.uvc.releases, releases) 86 87 def testAddReleasesWithDifferentPlatforms(self): 88 releases = [ 89 { 90 "release": "4.0", 91 "platform": "WINNT_x86-msvc", 92 "build_id": 555, 93 "locales": ["af", "de"], 94 "patch_types": ["partial", "complete"], 95 "from": "/pub/firefox/foo.bz2", 96 "ftp_server_from": "from", 97 "ftp_server_to": "to", 98 "mar_channel_IDs": "firefox-mozilla-booyah", 99 "updater_package": None, 100 }, 101 { 102 "release": "5.0", 103 "platform": "WINNT_x86-msvc-x86", 104 "build_id": 666, 105 "locales": ["af", "de"], 106 "patch_types": ["partial", "complete"], 107 "from": "/pub/firefox/foo2.bz2", 108 "ftp_server_from": "from", 109 "ftp_server_to": "to", 110 "mar_channel_IDs": "firefox-mozilla-booyah", 111 "updater_package": None, 112 }, 113 ] 114 self.uvc.addRelease( 115 "4.0", 116 build_id=555, 117 locales=["af", "de"], 118 patch_types=["partial", "complete"], 119 from_path="/pub/firefox/foo.bz2", 120 ftp_server_from="from", 121 ftp_server_to="to", 122 mar_channel_IDs="firefox-mozilla-booyah", 123 platform="WINNT_x86-msvc", 124 ) 125 self.uvc.addRelease( 126 "5.0", 127 build_id=666, 128 locales=["af", "de"], 129 patch_types=["partial", "complete"], 130 from_path="/pub/firefox/foo2.bz2", 131 ftp_server_from="from", 132 ftp_server_to="to", 133 mar_channel_IDs="firefox-mozilla-booyah", 134 platform="WINNT_x86-msvc-x86", 135 ) 136 self.assertEqual(self.uvc.releases, releases) 137 138 def testRead(self): 139 ftp_server_from = "stage.mozilla.org/firefox" 140 ftp_server_to = "stage.mozilla.org/firefox" 141 uvc2 = UpdateVerifyConfig() 142 uvc2.product = "Firefox" 143 uvc2.channel = "betatest" 144 uvc2.aus_server = "https://aus4.mozilla.org" 145 uvc2.to = "/firefox/4.0rc2.tar.bz2" 146 uvc2.to_build_id = "999" 147 uvc2.to_display_version = "99.0 Zeta 9" 148 uvc2.to_app_version = "99.0" 149 uvc2.addRelease( 150 "4.0", 151 build_id="888", 152 platform="Linux_x86-gcc3", 153 locales=["af", "de", "en-US", "ja", "zh-TW"], 154 patch_types=["partial", "complete"], 155 from_path="/firefox/4.0rc1.tar.bz2", 156 ftp_server_from=ftp_server_from, 157 ftp_server_to=ftp_server_to, 158 mar_channel_IDs="firefox-mozilla-beta", 159 ) 160 uvc2.addRelease( 161 "4.0b12", 162 build_id="777", 163 platform="Linux_x86-gcc3", 164 locales=["af", "en-US"], 165 from_path="/firefox/4.0b12.tar.bz2", 166 ftp_server_from=ftp_server_from, 167 ftp_server_to=ftp_server_to, 168 ) 169 uvc2.addRelease( 170 "4.0b12", 171 build_id="777", 172 platform="Linux_x86-gcc3", 173 locales=["de", "ja", "zh-TW"], 174 ftp_server_from=ftp_server_from, 175 ftp_server_to=ftp_server_to, 176 ) 177 uvc2.addRelease( 178 "3.7a1", 179 build_id="666", 180 locales=["en-US"], 181 ftp_server_from=ftp_server_from, 182 ftp_server_to=ftp_server_to, 183 platform="Linux_x86-gcc3", 184 ) 185 186 self.uvc.read(self.config) 187 self.assertEqual(self.uvc, uvc2) 188 189 def testWrite(self): 190 ftp_server_from = "stage.mozilla.org/firefox" 191 ftp_server_to = "stage.mozilla.org/firefox" 192 self.uvc.product = "Firefox" 193 self.uvc.channel = "betatest" 194 self.uvc.aus_server = "https://aus4.mozilla.org" 195 self.uvc.to = "/firefox/4.0rc2.tar.bz2" 196 self.uvc.to_build_id = "999" 197 self.uvc.to_display_version = "99.0 Zeta 9" 198 self.uvc.to_app_version = "99.0" 199 self.uvc.addRelease( 200 "4.0", 201 build_id="888", 202 platform="Linux_x86-gcc3", 203 locales=("af", "de", "en-US", "ja", "zh-TW"), 204 patch_types=("partial", "complete"), 205 from_path="/firefox/4.0rc1.tar.bz2", 206 ftp_server_from=ftp_server_from, 207 ftp_server_to=ftp_server_to, 208 mar_channel_IDs="firefox-mozilla-beta", 209 ) 210 self.uvc.addRelease( 211 "4.0b12", 212 build_id="777", 213 platform="Linux_x86-gcc3", 214 locales=["af", "en-US"], 215 from_path="/firefox/4.0b12.tar.bz2", 216 ftp_server_from=ftp_server_from, 217 ftp_server_to=ftp_server_to, 218 ) 219 self.uvc.addRelease( 220 "4.0b12", 221 build_id="777", 222 platform="Linux_x86-gcc3", 223 locales=("de", "ja", "zh-TW"), 224 ftp_server_from=ftp_server_from, 225 ftp_server_to=ftp_server_to, 226 ) 227 self.uvc.addRelease( 228 "3.7a1", 229 build_id="666", 230 locales=("en-US",), 231 ftp_server_from=ftp_server_from, 232 ftp_server_to=ftp_server_to, 233 platform="Linux_x86-gcc3", 234 ) 235 236 self.uvc.write(self.tmpfile) 237 self.tmpfile.close() 238 self.assertEqual(open(self.config).read(), open(self.tmpfilename).read()) 239 240 def testReadInvalidKey(self): 241 invalidLine = 'foo="bar"' 242 self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) 243 244 def testReadDuplicateKey(self): 245 invalidLine = 'release="bar" release="blah"' 246 self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) 247 248 def testParseLineBad(self): 249 invalidLine = "abh nthntuehonhuh nhhueont hntueoh nthouo" 250 self.assertRaises(UpdateVerifyError, self.uvc._parseLine, invalidLine) 251 252 def testGetChunk(self): 253 ftp_server_from = "stage.mozilla.org/firefox" 254 ftp_server_to = "stage.mozilla.org/firefox" 255 self.uvc.read(self.config) 256 uvc2 = UpdateVerifyConfig() 257 uvc2.product = "Firefox" 258 uvc2.channel = "betatest" 259 uvc2.aus_server = "https://aus4.mozilla.org" 260 uvc2.to = "/firefox/4.0rc2.tar.bz2" 261 uvc2.to_build_id = "999" 262 uvc2.to_display_version = "99.0 Zeta 9" 263 uvc2.to_app_version = "99.0" 264 uvc2.addRelease( 265 "4.0", 266 build_id="888", 267 platform="Linux_x86-gcc3", 268 locales=["af", "de", "en-US"], 269 patch_types=["partial", "complete"], 270 from_path="/firefox/4.0rc1.tar.bz2", 271 ftp_server_from=ftp_server_from, 272 ftp_server_to=ftp_server_to, 273 mar_channel_IDs="firefox-mozilla-beta", 274 ) 275 uvc2.addRelease( 276 "4.0b12", 277 build_id="777", 278 platform="Linux_x86-gcc3", 279 locales=["de", "ja"], 280 patch_types=["complete"], 281 ftp_server_from=ftp_server_from, 282 ftp_server_to=ftp_server_to, 283 from_path=None, 284 ) 285 chunkedConfig = self.uvc.getChunk(chunks=3, thisChunk=1) 286 self.assertEqual(chunkedConfig, uvc2) 287 288 def testGetChunkWithPathWithSpaces(self): 289 self.uvc.product = "Firefox" 290 self.uvc.channel = "betatest" 291 self.uvc.aus_server = "https://aus4.mozilla.org" 292 self.uvc.ftp_server_from = "stage.mozilla.org/firefox" 293 self.uvc.ftp_server_to = "stage.mozilla.org/firefox" 294 self.uvc.to = "/firefox/Firefox 4.0 Beta 2.exe" 295 self.uvc.to_build_id = "999" 296 self.uvc.to_display_version = "99.0 Zeta 9" 297 self.uvc.to_app_version = "99.0" 298 self.uvc.addRelease( 299 "4.0b1", 300 build_id="222", 301 platform="Linux_x86-gcc3", 302 locales=["en-US", "ja", "zh-TW"], 303 patch_types=["complete"], 304 from_path="/firefox/Firefox 4.0 Beta 1.exe", 305 ) 306 uvc2 = UpdateVerifyConfig() 307 uvc2.product = "Firefox" 308 uvc2.channel = "betatest" 309 uvc2.aus_server = "https://aus4.mozilla.org" 310 uvc2.ftp_server_from = "stage.mozilla.org/firefox" 311 uvc2.ftp_server_to = "stage.mozilla.org/firefox" 312 uvc2.to = "/firefox/Firefox 4.0 Beta 2.exe" 313 uvc2.to_build_id = "999" 314 uvc2.to_display_version = "99.0 Zeta 9" 315 uvc2.to_app_version = "99.0" 316 uvc2.addRelease( 317 "4.0b1", 318 build_id="222", 319 platform="Linux_x86-gcc3", 320 locales=["en-US", "ja"], 321 patch_types=["complete"], 322 from_path="/firefox/Firefox 4.0 Beta 1.exe", 323 ) 324 chunkedConfig = self.uvc.getChunk(chunks=2, thisChunk=1) 325 self.assertEqual(chunkedConfig, uvc2) 326 327 def testAddLocaleToRelease(self): 328 from_path = "/firefox/4.0rc1.tar.bz2" 329 self.uvc.read(self.config) 330 self.uvc.addLocaleToRelease("888", "he", from_path) 331 self.assertEqual( 332 self.uvc.getRelease("888", from_path)["locales"], 333 ["af", "de", "en-US", "he", "ja", "zh-TW"], 334 ) 335 336 def testAddLocaleToReleaseMultipleBuildIDs(self): 337 from_path = None 338 self.uvc.read(self.config) 339 self.uvc.addLocaleToRelease("777", "he", from_path) 340 self.assertEqual( 341 self.uvc.getRelease("777", from_path)["locales"], 342 ["de", "he", "ja", "zh-TW"], 343 ) 344 345 def testAddLocaleToNonexistentRelease(self): 346 self.uvc.read(self.config) 347 self.assertRaises(UpdateVerifyError, self.uvc.addLocaleToRelease, "123", "he") 348 349 def testGetReleaseNonexistenceRelease(self): 350 self.uvc.read(self.config) 351 self.assertEqual(self.uvc.getRelease("123", None), {}) 352 353 def testGetFullReleaseTests(self): 354 ftp_server_from = "stage.mozilla.org/firefox" 355 ftp_server_to = "stage.mozilla.org/firefox" 356 self.uvc.read(self.config) 357 uvc2 = UpdateVerifyConfig() 358 uvc2.product = "Firefox" 359 uvc2.channel = "betatest" 360 uvc2.aus_server = "https://aus4.mozilla.org" 361 uvc2.to = "/firefox/4.0rc2.tar.bz2" 362 uvc2.to_build_id = "999" 363 uvc2.to_display_version = "99.0 Zeta 9" 364 uvc2.to_app_version = "99.0" 365 uvc2.addRelease( 366 "4.0", 367 build_id="888", 368 platform="Linux_x86-gcc3", 369 locales=["af", "de", "en-US", "ja", "zh-TW"], 370 patch_types=["partial", "complete"], 371 from_path="/firefox/4.0rc1.tar.bz2", 372 ftp_server_from=ftp_server_from, 373 ftp_server_to=ftp_server_to, 374 mar_channel_IDs="firefox-mozilla-beta", 375 ) 376 uvc2.addRelease( 377 "4.0b12", 378 build_id="777", 379 platform="Linux_x86-gcc3", 380 locales=["af", "en-US"], 381 patch_types=["complete"], 382 from_path="/firefox/4.0b12.tar.bz2", 383 ftp_server_from=ftp_server_from, 384 ftp_server_to=ftp_server_to, 385 ) 386 self.assertEqual(self.uvc.getFullReleaseTests(), uvc2.releases) 387 388 def testGetQuickReleaseTests(self): 389 ftp_server_from = "stage.mozilla.org/firefox" 390 ftp_server_to = "stage.mozilla.org/firefox" 391 self.uvc.read(self.config) 392 uvc2 = UpdateVerifyConfig() 393 uvc2.product = "Firefox" 394 uvc2.channel = "betatest" 395 uvc2.aus_server = "https://aus4.mozilla.org" 396 uvc2.to = "/firefox/4.0rc2.tar.bz2" 397 uvc2.to_build_id = "999" 398 uvc2.to_display_version = "99.0 Zeta 9" 399 uvc2.to_app_version = "99.0" 400 uvc2.addRelease( 401 "4.0b12", 402 build_id="777", 403 platform="Linux_x86-gcc3", 404 locales=["de", "ja", "zh-TW"], 405 patch_types=["complete"], 406 from_path=None, 407 ftp_server_from=ftp_server_from, 408 ftp_server_to=ftp_server_to, 409 ) 410 uvc2.addRelease( 411 "3.7a1", 412 build_id="666", 413 platform="Linux_x86-gcc3", 414 locales=["en-US"], 415 patch_types=["complete"], 416 from_path=None, 417 ftp_server_from=ftp_server_from, 418 ftp_server_to=ftp_server_to, 419 ) 420 self.assertEqual(self.uvc.getQuickReleaseTests(), uvc2.releases) 421 422 423 if __name__ == "__main__": 424 mozunit.main()