tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });