summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js')
-rw-r--r--toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js196
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."
+ );
+}