forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const { TelemetryTestUtils } = ChromeUtils.importESModule(
 | |
|   "resource://testing-common/TelemetryTestUtils.sys.mjs"
 | |
| );
 | |
| 
 | |
| /**
 | |
|  * Note that these tests only ensure that the pin is properly added to the
 | |
|  * update URL and to the telemetry. They do not test that the update applied
 | |
|  * will be of the correct version. This is because we are not attempting to have
 | |
|  * Firefox check if the update provided is valid given the pin, we are leaving
 | |
|  * it to the update server (Balrog) to find and serve the correct version.
 | |
|  */
 | |
| 
 | |
| async function test_update_pin(pinString, pinIsValid = true) {
 | |
|   await setupPolicyEngineWithJson({
 | |
|     policies: {
 | |
|       AppUpdateURL: "https://www.example.com/update.xml",
 | |
|       AppUpdatePin: pinString,
 | |
|     },
 | |
|   });
 | |
|   Services.telemetry.clearScalars();
 | |
| 
 | |
|   equal(
 | |
|     Services.policies.status,
 | |
|     Ci.nsIEnterprisePolicies.ACTIVE,
 | |
|     "Engine is active"
 | |
|   );
 | |
| 
 | |
|   let policies = Services.policies.getActivePolicies();
 | |
|   equal(
 | |
|     "AppUpdatePin" in policies,
 | |
|     pinIsValid,
 | |
|     "AppUpdatePin policy should only be active if the pin was valid."
 | |
|   );
 | |
| 
 | |
|   let checker = Cc["@mozilla.org/updates/update-checker;1"].getService(
 | |
|     Ci.nsIUpdateChecker
 | |
|   );
 | |
|   let updateURL = await checker.getUpdateURL(checker.BACKGROUND_CHECK);
 | |
| 
 | |
|   let expected = pinIsValid
 | |
|     ? `https://www.example.com/update.xml?pin=${pinString}`
 | |
|     : "https://www.example.com/update.xml";
 | |
| 
 | |
|   equal(updateURL, expected, "App Update URL should match expected URL.");
 | |
| 
 | |
|   let scalars = TelemetryTestUtils.getProcessScalars("parent", false, true);
 | |
|   if (pinIsValid) {
 | |
|     TelemetryTestUtils.assertScalar(
 | |
|       scalars,
 | |
|       "update.version_pin",
 | |
|       pinString,
 | |
|       "Update pin telemetry should be set"
 | |
|     );
 | |
|   } else {
 | |
|     TelemetryTestUtils.assertScalarUnset(scalars, "update.version_pin");
 | |
|   }
 | |
| }
 | |
| 
 | |
| add_task(async function test_app_update_pin() {
 | |
|   await test_update_pin("102.");
 | |
|   await test_update_pin("102.0.");
 | |
|   await test_update_pin("102.1.");
 | |
|   await test_update_pin("102.1.1", false);
 | |
|   await test_update_pin("102.1.1.", false);
 | |
|   await test_update_pin("102", false);
 | |
|   await test_update_pin("foobar", false);
 | |
|   await test_update_pin("-102.1.", false);
 | |
|   await test_update_pin("102.-1.", false);
 | |
|   await test_update_pin("102a.1.", false);
 | |
|   await test_update_pin("102.1a.", false);
 | |
|   await test_update_pin("0102.1.", false);
 | |
|   // Should not accept version numbers that will never be in Balrog's pinning
 | |
|   // table (i.e. versions before 102.0).
 | |
|   await test_update_pin("101.1.", false);
 | |
| });
 | 
