test_BackupService_takeMeasurements.js (6669B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 add_setup(() => { 7 // FOG needs to be initialized in order for data to flow. 8 Services.fog.initializeFOG(); 9 Services.telemetry.clearScalars(); 10 }); 11 12 /** 13 * Tests that calling `BackupService.takeMeasurements` will call the measure 14 * method of all registered BackupResource classes. 15 */ 16 add_task(async function test_takeMeasurements() { 17 let sandbox = sinon.createSandbox(); 18 sandbox.stub(FakeBackupResource1.prototype, "measure").resolves(); 19 sandbox 20 .stub(FakeBackupResource2.prototype, "measure") 21 .rejects(new Error("Some failure to measure")); 22 23 let bs = new BackupService({ FakeBackupResource1, FakeBackupResource2 }); 24 await bs.takeMeasurements(); 25 26 for (let backupResourceClass of [FakeBackupResource1, FakeBackupResource2]) { 27 Assert.ok( 28 backupResourceClass.prototype.measure.calledOnce, 29 "Measure was called" 30 ); 31 Assert.ok( 32 backupResourceClass.prototype.measure.calledWith(PathUtils.profileDir), 33 "Measure was called with the profile directory argument" 34 ); 35 } 36 37 sandbox.restore(); 38 }); 39 40 /** 41 * Tests that we can measure the disk space available in the profile directory. 42 */ 43 add_task(async function test_profDDiskSpace() { 44 Services.telemetry.clearScalars(); 45 46 let bs = new BackupService(); 47 await bs.takeMeasurements(); 48 let measurement = Glean.browserBackup.profDDiskSpace.testGetValue(); 49 TelemetryTestUtils.assertScalar( 50 TelemetryTestUtils.getProcessScalars("parent", false, true), 51 "browser.backup.prof_d_disk_space", 52 measurement 53 ); 54 55 Assert.greater( 56 measurement, 57 0, 58 "Should have collected a measurement for the profile directory storage " + 59 "device" 60 ); 61 }); 62 63 /** 64 * Tests that we record a scalar if the BackupService is configured to 65 * initialize on launch. 66 */ 67 add_task(async function test_BackupService_enabled_state() { 68 Services.telemetry.clearScalars(); 69 70 let bs = new BackupService(); 71 await bs.takeMeasurements(); 72 Assert.ok( 73 Glean.browserBackup.enabled.testGetValue(), 74 "Should have set the enabled scalar." 75 ); 76 TelemetryTestUtils.assertScalar( 77 TelemetryTestUtils.getProcessScalars("parent", false, true), 78 "browser.backup.enabled", 79 true, 80 "Should have set the enabled scalar in legacy Telemetry." 81 ); 82 }); 83 84 /** 85 * Tests that we record a scalar if the BackupService is configured to 86 * initialize on launch. 87 */ 88 add_task(async function test_BackupService_scheduler_enabled_state() { 89 Services.telemetry.clearScalars(); 90 const SCHEDULED_BACKUPS_ENABLED_PREF_NAME = 91 "browser.backup.scheduled.enabled"; 92 Services.prefs.setBoolPref(SCHEDULED_BACKUPS_ENABLED_PREF_NAME, false); 93 94 let bs = new BackupService(); 95 await bs.takeMeasurements(); 96 Assert.ok( 97 !Glean.browserBackup.schedulerEnabled.testGetValue(), 98 "Scalar for scheduled backups should be false" 99 ); 100 TelemetryTestUtils.assertScalar( 101 TelemetryTestUtils.getProcessScalars("parent", false, true), 102 "browser.backup.scheduler_enabled", 103 false, 104 "Scalar for scheduled backups should be false in legacy Telemetry." 105 ); 106 107 Services.telemetry.clearScalars(); 108 Services.prefs.setBoolPref(SCHEDULED_BACKUPS_ENABLED_PREF_NAME, true); 109 await bs.takeMeasurements(); 110 Assert.ok( 111 Glean.browserBackup.schedulerEnabled.testGetValue(), 112 "Scalar for scheduled backups should be true" 113 ); 114 TelemetryTestUtils.assertScalar( 115 TelemetryTestUtils.getProcessScalars("parent", false, true), 116 "browser.backup.scheduler_enabled", 117 true, 118 "Scalar for scheduled backups should be true in legacy Telemetry." 119 ); 120 121 // Now reset the scheduling state to the default to not interfere with 122 // other tests. 123 Services.prefs.clearUserPref(SCHEDULED_BACKUPS_ENABLED_PREF_NAME); 124 }); 125 126 /** 127 * Tests that we record a scalar if the BackupService is configured to 128 * encrypt backups. 129 */ 130 add_task(async function test_BackupService_pswd_encrypted_state() { 131 Services.telemetry.clearScalars(); 132 133 let bs = new BackupService(); 134 await bs.takeMeasurements(); 135 Assert.ok( 136 !Glean.browserBackup.pswdEncrypted.testGetValue(), 137 "Scalar for encrypted backups should be false" 138 ); 139 TelemetryTestUtils.assertScalar( 140 TelemetryTestUtils.getProcessScalars("parent", false, true), 141 "browser.backup.pswd_encrypted", 142 false, 143 "Scalar for encrypted backups should be false in legacy Telemetry." 144 ); 145 146 Services.telemetry.clearScalars(); 147 const tempDir = await IOUtils.createUniqueDirectory( 148 PathUtils.tempDir, 149 "BackupService-takeMeasurements-test" 150 ); 151 await bs.enableEncryption("some-fake-password", tempDir); 152 153 await bs.takeMeasurements(); 154 Assert.ok( 155 Glean.browserBackup.pswdEncrypted.testGetValue(), 156 "Scalar for encrypted backups should be true" 157 ); 158 TelemetryTestUtils.assertScalar( 159 TelemetryTestUtils.getProcessScalars("parent", false, true), 160 "browser.backup.pswd_encrypted", 161 true, 162 "Scalar for encrypted backups should be true in legacy Telemetry." 163 ); 164 165 await maybeRemovePath(tempDir); 166 }); 167 168 /** 169 * Tests that we record a scalar that tells us if backups are configured to 170 * be written to the default location, or somewhere else entirely. 171 */ 172 add_task(async function test_BackupService_location_on_device() { 173 Services.telemetry.clearScalars(); 174 const DEFAULT_LOCATION = 1; 175 const NON_DEFAULT_LOCATION = 2; 176 177 let bs = new BackupService(); 178 bs.setParentDirPath(PathUtils.tempDir); 179 180 await bs.takeMeasurements(); 181 Assert.equal( 182 Glean.browserBackup.locationOnDevice.testGetValue(), 183 NON_DEFAULT_LOCATION, 184 "Scalar for location on device should indicate the non-default " + 185 "location" 186 ); 187 TelemetryTestUtils.assertScalar( 188 TelemetryTestUtils.getProcessScalars("parent", false, true), 189 "browser.backup.location_on_device", 190 NON_DEFAULT_LOCATION, 191 "Scalar for location on device should indicate the non-default " + 192 "location in legacy Telemetry." 193 ); 194 195 Services.telemetry.clearScalars(); 196 // The default will be either the test machine's OneDrive folder, if present, 197 // or else the Docs folder. 198 bs.setParentDirPath(BackupService.DEFAULT_PARENT_DIR_PATH); 199 200 await bs.takeMeasurements(); 201 Assert.equal( 202 Glean.browserBackup.locationOnDevice.testGetValue(), 203 DEFAULT_LOCATION, 204 "Scalar for location on device should indicate the default location" 205 ); 206 TelemetryTestUtils.assertScalar( 207 TelemetryTestUtils.getProcessScalars("parent", false, true), 208 "browser.backup.location_on_device", 209 DEFAULT_LOCATION, 210 "Scalar for location on device should indicate the default " + 211 "location in legacy Telemetry." 212 ); 213 });