Global Metrics

path: .metrics.halstead.level
old: 0.027950310559006212
new: 0.02790697674418605

path: .metrics.halstead.length
old: 1716.0
new: 1717.0

path: .metrics.halstead.purity_ratio
old: 0.8866564592401729
new: 0.8861400606034575

path: .metrics.halstead.time
old: 26311.86289677439
new: 26368.076889574422

path: .metrics.halstead.difficulty
old: 35.77777777777778
new: 35.833333333333336

path: .metrics.halstead.N2
old: 644.0
new: 645.0

path: .metrics.halstead.effort
old: 473613.53214193904
new: 474625.3840123396

path: .metrics.halstead.volume
old: 13237.645308315066
new: 13245.359553832732

path: .metrics.halstead.bugs
old: 2.025325420378312
new: 2.028209065872185

path: .metrics.mi.mi_sei
old: -37.1784268920115
new: -37.18279742182496

path: .metrics.mi.mi_visual_studio
old: 5.754276326288608
new: 5.752504735401036

path: .metrics.mi.mi_original
old: 9.83981251795352
new: 9.836783097535772

Spaces Data

Minimal test - lines (77, 115)

path: .spaces[3].metrics.halstead.N2
old: 47.0
new: 48.0

path: .spaces[3].metrics.halstead.effort
old: 11873.386394264757
new: 12213.881286237196

path: .spaces[3].metrics.halstead.length
old: 138.0
new: 139.0

path: .spaces[3].metrics.halstead.volume
old: 757.8757272934952
new: 763.3675803898248

path: .spaces[3].metrics.halstead.purity_ratio
old: 1.4742073375679368
new: 1.4636015293839946

path: .spaces[3].metrics.halstead.bugs
old: 0.17348495299743014
new: 0.1767860022309364

path: .spaces[3].metrics.halstead.time
old: 659.6325774591531
new: 678.5489603465109

path: .spaces[3].metrics.halstead.difficulty
old: 15.666666666666666
new: 16.0

path: .spaces[3].metrics.halstead.level
old: 0.06382978723404256
new: 0.0625

path: .spaces[3].metrics.mi.mi_visual_studio
old: 44.591579139001674
new: 44.569622829374694

path: .spaces[3].metrics.mi.mi_sei
old: 55.54272525963685
new: 55.488558856721085

path: .spaces[3].metrics.mi.mi_original
old: 76.25160032769287
new: 76.21405503823073

Code

async function syncAndDownload(filters, clear = true) {
  const localDB = await CRLiteFiltersClient.client.db;
  if (clear) {
    await localDB.clear();
  }

  for (let filter of filters) {
    const filename = getFilenameForFilter(filter);
    const file = do_get_file(`test_crlite_filters/${filename}`);
    const fileBytes = readFile(file);

    const record = {
      details: {
        name: `${filter.timestamp}-${filter.type}`,
      },
      attachment: {
        hash: getHash(fileBytes),
        size: fileBytes.length,
        filename,
        location: `security-state-workspace/cert-revocations/test_crlite_filters/${filename}`,
        mimetype: "application/octet-stream",
      },
      incremental: filter.type == "diff",
      effectiveTimestamp: new Date(filter.timestamp).getTime(),
      parent: filter.type == "diff" ? filter.parent : undefined,
      id: filter.id,
    };

    await localDB.create(record);
  }
  // This promise will wait for the end of downloading.
  let promise = TestUtils.topicObserved(
    "remote-security-settings:crlite-filters-downloaded"
  );
  // Simulate polling for changes, trigger the download of attachments.
  Services.obs.notifyObservers(null, "remote-settings:changes-poll-end");
  let results = await promise;
  return results[1]; // topicObserved gives back a 2-array
}