AU: Function to trigger crash reporter.

This CL introduces a new utility function that fork()s and has the
child call abort(), thus triggering the crash reporter. The actual
work is done in a main loop callback to ensure that the stack trace is
the same for all calls to this function.

TEST=unittest (minimal), tested on device - saw crash reporter pick up the crash.
BUG=10739

Review URL: http://codereview.chromium.org/6114002

Change-Id: If3c3c43644173f2307b8498d40881c3b38b938e5
diff --git a/utils_unittest.cc b/utils_unittest.cc
index d8bc866..185ab9a 100644
--- a/utils_unittest.cc
+++ b/utils_unittest.cc
@@ -255,4 +255,22 @@
   EXPECT_EQ(10 * 1024 * 1024 / 4096, block_count);
 }
 
+namespace {
+gboolean  TerminateScheduleCrashReporterUploadTest(void* arg) {
+  GMainLoop* loop = reinterpret_cast<GMainLoop*>(arg);
+  g_main_loop_quit(loop);
+  return FALSE;  // Don't call this callback again
+}
+}  // namespace {}
+
+TEST(UtilsTest, ScheduleCrashReporterUploadTest) {
+  // Not much to test. At least this tests for memory leaks, crashes,
+  // log errors.
+  GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
+  utils::ScheduleCrashReporterUpload();
+  g_timeout_add_seconds(1, &TerminateScheduleCrashReporterUploadTest, loop);
+  g_main_loop_run(loop);
+  g_main_loop_unref(loop);
+}
+
 }  // namespace chromeos_update_engine