diff options
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js')
-rw-r--r-- | toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js | 196 |
1 files changed, 196 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 0000000000..d9e5e08625 --- /dev/null +++ b/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js @@ -0,0 +1,196 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +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, originalCount3; + +function run_test() { + let histogram = Telemetry.getHistogramById(HIST_NAME); + let snapshot = histogram.snapshot(); + originalCount1 = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + histogram = Telemetry.getHistogramById(HIST_NAME2); + snapshot = histogram.snapshot(); + originalCount2 = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + histogram = Telemetry.getKeyedHistogramById(KEYED_HIST.id); + snapshot = histogram.snapshot()[KEYED_HIST.key] || { values: [] }; + originalCount3 = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + Assert.ok(TelemetryStopwatch.start("mark1")); + Assert.ok(TelemetryStopwatch.start("mark2")); + + Assert.ok(TelemetryStopwatch.start("mark1", refObj)); + Assert.ok(TelemetryStopwatch.start("mark2", refObj)); + + // Same timer can't be re-started before being stopped + Assert.ok(!TelemetryStopwatch.start("mark1")); + Assert.ok(!TelemetryStopwatch.start("mark1", refObj)); + + // Can't stop a timer that was accidentaly started twice + Assert.ok(!TelemetryStopwatch.finish("mark1")); + Assert.ok(!TelemetryStopwatch.finish("mark1", refObj)); + + Assert.ok(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM")); + Assert.ok(!TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM")); + + Assert.ok(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM", refObj)); + Assert.ok(!TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM", refObj)); + + Assert.ok(!TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2, refObj)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj2)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2, refObj2)); + + Assert.ok(TelemetryStopwatch.start(HIST_NAME)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME2)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME2, refObj)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME, refObj2)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME2, refObj2)); + + Assert.ok(TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME2)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME2, refObj)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME, refObj2)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME2, refObj2)); + + Assert.ok(TelemetryStopwatch.finish(HIST_NAME)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME2)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME2, refObj)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME, refObj2)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME2, refObj2)); + + Assert.ok(!TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2, refObj)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj2)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME2, refObj2)); + + // Verify that TS.finish deleted the timers + Assert.ok(!TelemetryStopwatch.finish(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.finish(HIST_NAME, refObj)); + + // Verify that they can be used again + Assert.ok(TelemetryStopwatch.start(HIST_NAME)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME)); + Assert.ok(TelemetryStopwatch.finish(HIST_NAME, refObj)); + + Assert.ok(!TelemetryStopwatch.finish("unknown-mark")); // Unknown marker + Assert.ok(!TelemetryStopwatch.finish("unknown-mark", {})); // Unknown object + Assert.ok(!TelemetryStopwatch.finish(HIST_NAME, {})); // Known mark on unknown object + + // Test cancel + Assert.ok(!TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME)); + Assert.ok(TelemetryStopwatch.start(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(TelemetryStopwatch.cancel(HIST_NAME)); + Assert.ok(TelemetryStopwatch.cancel(HIST_NAME, refObj)); + + // Verify that can not cancel twice + Assert.ok(!TelemetryStopwatch.cancel(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.cancel(HIST_NAME, refObj)); + + // Verify that cancel removes the timers + Assert.ok(!TelemetryStopwatch.running(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.running(HIST_NAME, refObj)); + Assert.ok(!TelemetryStopwatch.finish(HIST_NAME)); + Assert.ok(!TelemetryStopwatch.finish(HIST_NAME, refObj)); + + // Verify that keyed histograms can be started. + Assert.ok(!TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY1")); + Assert.ok(!TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY2")); + Assert.ok(!TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY1", refObj)); + Assert.ok(!TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY2", refObj)); + + Assert.ok(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1")); + Assert.ok(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY2")); + Assert.ok(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1", refObj)); + Assert.ok(TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY2", refObj)); + + Assert.ok(TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY1")); + Assert.ok(TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY2")); + Assert.ok(TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY1", refObj)); + Assert.ok(TelemetryStopwatch.runningKeyed("HISTOGRAM", "KEY2", refObj)); + + // Restarting keyed histograms should fail. + Assert.ok(!TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1")); + Assert.ok(!TelemetryStopwatch.startKeyed("HISTOGRAM", "KEY1", refObj)); + + // Finishing a stopwatch of a non existing histogram should return false. + Assert.ok(!TelemetryStopwatch.finishKeyed("HISTOGRAM", "KEY2")); + Assert.ok(!TelemetryStopwatch.finishKeyed("HISTOGRAM", "KEY2", refObj)); + + // Starting & finishing a keyed stopwatch for an existing histogram should work. + Assert.ok(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + Assert.ok(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, KEYED_HIST.key)); + // Verify that TS.finish deleted the timers + Assert.ok(!TelemetryStopwatch.runningKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + // Verify that they can be used again + Assert.ok(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + Assert.ok(TelemetryStopwatch.finishKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + Assert.ok(!TelemetryStopwatch.finishKeyed("unknown-mark", "unknown-key")); + Assert.ok(!TelemetryStopwatch.finishKeyed(KEYED_HIST.id, "unknown-key")); + + // Verify that keyed histograms can only be canceled through "keyed" API. + Assert.ok(TelemetryStopwatch.startKeyed(KEYED_HIST.id, KEYED_HIST.key)); + Assert.throws( + () => TelemetryStopwatch.cancel(KEYED_HIST.id, KEYED_HIST.key), + /is not an object/ + ); + Assert.ok(TelemetryStopwatch.cancelKeyed(KEYED_HIST.id, KEYED_HIST.key)); + Assert.ok(!TelemetryStopwatch.cancelKeyed(KEYED_HIST.id, KEYED_HIST.key)); + + finishTest(); +} + +function finishTest() { + let histogram = Telemetry.getHistogramById(HIST_NAME); + let snapshot = histogram.snapshot(); + let newCount = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + Assert.equal( + newCount - originalCount1, + 5, + "The correct number of histograms were added for histogram 1." + ); + + histogram = Telemetry.getHistogramById(HIST_NAME2); + snapshot = histogram.snapshot(); + newCount = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + Assert.equal( + 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 = Object.values(snapshot.values).reduce((a, b) => (a += b), 0); + + Assert.equal( + newCount - originalCount3, + 2, + "The correct number of histograms were added for histogram 3." + ); +} |