diff options
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js')
-rw-r--r-- | toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js b/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js new file mode 100644 index 000000000..d162d9b17 --- /dev/null +++ b/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js @@ -0,0 +1,156 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +var tmpScope = {}; +Cu.import("resource://gre/modules/TelemetryStopwatch.jsm", tmpScope); +var TelemetryStopwatch = tmpScope.TelemetryStopwatch; + +const HIST_NAME = "TELEMETRY_SEND_SUCCESS"; +const HIST_NAME2 = "RANGE_CHECKSUM_ERRORS"; +const KEYED_HIST = { id: "TELEMETRY_INVALID_PING_TYPE_SUBMITTED", key: "TEST" }; + +var refObj = {}, refObj2 = {}; + +var originalCount1, originalCount2; + +function run_test() { + let histogram = Telemetry.getHistogramById(HIST_NAME); + let snapshot = histogram.snapshot(); + originalCount1 = snapshot.counts.reduce((a, b) => a += b); + + histogram = Telemetry.getHistogramById(HIST_NAME2); + snapshot = histogram.snapshot(); + originalCount2 = snapshot.counts.reduce((a, b) => a += b); + + histogram = Telemetry.getKeyedHistogramById(KEYED_HIST.id); + snapshot = histogram.snapshot(KEYED_HIST.key); + originalCount3 = snapshot.counts.reduce((a, b) => a += b); + + do_check_false(TelemetryStopwatch.start(3)); + do_check_false(TelemetryStopwatch.start({})); + do_check_false(TelemetryStopwatch.start("", 3)); + do_check_false(TelemetryStopwatch.start("", "")); + do_check_false(TelemetryStopwatch.start({}, {})); + + do_check_true(TelemetryStopwatch.start("mark1")); + do_check_true(TelemetryStopwatch.start("mark2")); + + do_check_true(TelemetryStopwatch.start("mark1", refObj)); + do_check_true(TelemetryStopwatch.start("mark2", refObj)); + + // Same timer can't be re-started before being stopped + do_check_false(TelemetryStopwatch.start("mark1")); + do_check_false(TelemetryStopwatch.start("mark1", refObj)); + + // Can't stop a timer that was accidentaly started twice + do_check_false(TelemetryStopwatch.finish("mark1")); + do_check_false(TelemetryStopwatch.finish("mark1", refObj)); + + do_check_true(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM")); + do_check_false(TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM")); + + do_check_true(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM", refObj)); + do_check_false(TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM", refObj)); + + do_check_true(TelemetryStopwatch.start(HIST_NAME)); + do_check_true(TelemetryStopwatch.start(HIST_NAME2)); + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); + do_check_true(TelemetryStopwatch.start(HIST_NAME2, refObj)); + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj2)); + do_check_true(TelemetryStopwatch.start(HIST_NAME2, refObj2)); + + do_check_true(TelemetryStopwatch.finish(HIST_NAME)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME2)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME2, refObj)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj2)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME2, refObj2)); + + // Verify that TS.finish deleted the timers + do_check_false(TelemetryStopwatch.finish(HIST_NAME)); + do_check_false(TelemetryStopwatch.finish(HIST_NAME, refObj)); + + // Verify that they can be used again + do_check_true(TelemetryStopwatch.start(HIST_NAME)); + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME)); + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj)); + + do_check_false(TelemetryStopwatch.finish("unknown-mark")); // Unknown marker + do_check_false(TelemetryStopwatch.finish("unknown-mark", {})); // Unknown object + do_check_false(TelemetryStopwatch.finish(HIST_NAME, {})); // Known mark on unknown object + + // Test cancel + do_check_true(TelemetryStopwatch.start(HIST_NAME)); + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); + do_check_true(TelemetryStopwatch.cancel(HIST_NAME)); + do_check_true(TelemetryStopwatch.cancel(HIST_NAME, refObj)); + + // Verify that can not cancel twice + do_check_false(TelemetryStopwatch.cancel(HIST_NAME)); + do_check_false(TelemetryStopwatch.cancel(HIST_NAME, refObj)); + + // Verify that cancel removes the timers + do_check_false(TelemetryStopwatch.finish(HIST_NAME)); + do_check_false(TelemetryStopwatch.finish(HIST_NAME, refObj)); + + // Verify that keyed stopwatch reject invalid keys. + for (let key of [3, {}, ""]) { + do_check_false(TelemetryStopwatch.startKeyed(KEYED_HIST.id, key)); + } + + // Verify that keyed histograms can be started. + do_check_true(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1")); + do_check_true(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY2")); + do_check_true(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1", refObj)); + do_check_true(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY2", refObj)); + + // Restarting keyed histograms should fail. + do_check_false(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1")); + do_check_false(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1", refObj)); + + // Finishing a stopwatch of a non existing histogram should return false. + do_check_false(TelemetryStopwatch.finishKeyed("HISTOGRAM", "KEY2")); + do_check_false(TelemetryStopwatch.finishKeyed("HISTOGRAM", "KEY2", refObj)); + + // Starting & finishing a keyed stopwatch for an existing histogram should work. + do_check_true(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + do_check_true(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, KEYED_HIST.key)); + // Verify that TS.finish deleted the timers + do_check_false(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + // Verify that they can be used again + do_check_true(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + do_check_true(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + do_check_false(TelemetryStopwatch.finishKeyed("unknown-mark", "unknown-key")); + do_check_false(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, "unknown-key")); + + // Verify that keyed histograms can only be canceled through "keyed" API. + do_check_true(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + do_check_false(TelemetryStopwatch.cancel(KEYED_HIST.id, KEYED_HIST.key)); + do_check_true(TelemetryStopwatch.cancelKeyed(KEYED_HIST.id, KEYED_HIST.key)); + do_check_false(TelemetryStopwatch.cancelKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + finishTest(); +} + +function finishTest() { + let histogram = Telemetry.getHistogramById(HIST_NAME); + let snapshot = histogram.snapshot(); + let newCount = snapshot.counts.reduce((a, b) => a += b); + + do_check_eq(newCount - originalCount1, 5, "The correct number of histograms were added for histogram 1."); + + histogram = Telemetry.getHistogramById(HIST_NAME2); + snapshot = histogram.snapshot(); + newCount = snapshot.counts.reduce((a, b) => a += b); + + do_check_eq(newCount - originalCount2, 3, "The correct number of histograms were added for histogram 2."); + + histogram = Telemetry.getKeyedHistogramById(KEYED_HIST.id); + snapshot = histogram.snapshot(KEYED_HIST.key); + newCount = snapshot.counts.reduce((a, b) => a += b); + + do_check_eq(newCount - originalCount3, 2, "The correct number of histograms were added for histogram 3."); +} |