Bug 888373 - Tests for startup/shutdown crash detection API. r=yoric, r=gps
☠☠ backed out by 5dc0d8f19d26 ☠ ☠
authorMichael Brennan <brennan.brisad@gmail.com>
Tue, 20 Aug 2013 22:46:38 +0200
changeset 173957 4117364f58fb0d10c8f46b9f2bcbb718ac209e02
parent 173956 cb99aff2574efc2c3f938f341ad6174ddf8cb7ee
child 173958 90fb9ca640e43eb3983c5bb99083d95bfd764637
push id445
push userffxbld
push dateMon, 10 Mar 2014 22:05:19 +0000
treeherdermozilla-release@dc38b741b04e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersyoric, gps
bugs888373
milestone28.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 888373 - Tests for startup/shutdown crash detection API. r=yoric, r=gps
toolkit/components/crashmonitor/moz.build
toolkit/components/crashmonitor/test/unit/head.js
toolkit/components/crashmonitor/test/unit/test_init.js
toolkit/components/crashmonitor/test/unit/test_invalid_file.js
toolkit/components/crashmonitor/test/unit/test_missing_file.js
toolkit/components/crashmonitor/test/unit/test_register.js
toolkit/components/crashmonitor/test/unit/test_valid_file.js
toolkit/components/crashmonitor/test/unit/xpcshell.ini
--- a/toolkit/components/crashmonitor/moz.build
+++ b/toolkit/components/crashmonitor/moz.build
@@ -1,14 +1,16 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
+
 EXTRA_JS_MODULES = [
     'CrashMonitor.jsm',
 ]
 
 XPIDL_MODULE = 'crashmonitor'
 
 EXTRA_COMPONENTS += [
     'crashmonitor.manifest',
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/head.js
@@ -0,0 +1,22 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "OS",
+                                  "resource://gre/modules/osfile.jsm");
+
+let sessionCheckpointsPath;
+
+/**
+ * Start the tasks of the different tests
+ */
+function run_test()
+{
+  do_get_profile();
+  sessionCheckpointsPath = OS.Path.join(OS.Constants.Path.profileDir,
+                                        "sessionCheckpoints.json");
+  Components.utils.import("resource://gre/modules/CrashMonitor.jsm");
+  run_next_test();
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/test_init.js
@@ -0,0 +1,17 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test that calling |init| twice throws an error
+ */
+add_task(function test_init() {
+  CrashMonitor.init();
+  try {
+    CrashMonitor.init();
+    do_check_true(false);
+  } catch (ex) {
+    do_check_true(true);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/test_invalid_file.js
@@ -0,0 +1,30 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test with sessionCheckpoints.json containing invalid data
+ */
+add_task(function test_invalid_file() {
+  // Write bogus data to checkpoint file
+  let data = "1234";
+  yield OS.File.writeAtomic(sessionCheckpointsPath, data,
+                            {tmpPath: sessionCheckpointsPath + ".tmp"});
+
+  // An invalid file will cause |init| to throw an exception
+  try {
+    let status = yield CrashMonitor.init();
+    do_check_true(false);
+  } catch (ex) {
+    do_check_true(true);
+  }
+
+  // and |previousCheckpoints| will be rejected
+  try {
+    let checkpoints = yield CrashMonitor.previousCheckpoints;
+    do_check_true(false);
+  } catch (ex) {
+    do_check_true(true);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/test_missing_file.js
@@ -0,0 +1,13 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test with non-existing sessionCheckpoints.json
+ */
+add_task(function test_missing_file() {
+  CrashMonitor.init();
+  let checkpoints = yield CrashMonitor.previousCheckpoints;
+  do_check_eq(checkpoints, null);
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/test_register.js
@@ -0,0 +1,24 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test that CrashMonitor.jsm is correctly loaded from XPCOM component
+ */
+add_task(function test_register() {
+  let cm = Components.classes["@mozilla.org/toolkit/crashmonitor;1"]
+                             .createInstance(Components.interfaces.nsIObserver);
+
+  // Send "profile-after-change" to trigger the initialization
+  cm.observe(null, "profile-after-change", null);
+
+  // If CrashMonitor was initialized properly a new call to |init|
+  // should fail
+  try {
+    CrashMonitor.init();
+    do_check_true(false);
+  } catch (ex) {
+    do_check_true(true);
+  }
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/test_valid_file.js
@@ -0,0 +1,20 @@
+/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test with sessionCheckpoints.json containing valid data
+ */
+add_task(function test_valid_file() {
+  // Write valid data to checkpoint file
+  let data = JSON.stringify({"final-ui-startup": true});
+  yield OS.File.writeAtomic(sessionCheckpointsPath, data,
+                            {tmpPath: sessionCheckpointsPath + ".tmp"});
+
+  CrashMonitor.init();
+  let checkpoints = yield CrashMonitor.previousCheckpoints;
+
+  do_check_true(checkpoints["final-ui-startup"]);
+  do_check_eq(Object.keys(checkpoints).length, 1);
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/crashmonitor/test/unit/xpcshell.ini
@@ -0,0 +1,9 @@
+[DEFAULT]
+head = head.js
+tail =
+
+[test_init.js]
+[test_valid_file.js]
+[test_invalid_file.js]
+[test_missing_file.js]
+[test_register.js]