update_engine: Fake chromeos-setgoodkernel command for testing.

This patch fakes the chromeos-setgoodkernel command when running
unittests so the command doesn't attempt to run it. It also makes
Subprocess log the error message when there's a failure running
an async process.

BUG=chromium:401866
TEST=cros_workon_make update_engine --test

Change-Id: Ieca3216c57f6f9bc2f71a53e520575ae1fc19c0e
Reviewed-on: https://chromium-review.googlesource.com/212260
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
diff --git a/subprocess.cc b/subprocess.cc
index fb34267..aab71b5 100644
--- a/subprocess.cc
+++ b/subprocess.cc
@@ -148,6 +148,7 @@
   record->callback = callback;
   record->callback_data = p;
   gint stdout_fd = -1;
+  GError* error = nullptr;
   bool success = g_spawn_async_with_pipes(
       NULL,  // working directory
       argv.get(),
@@ -159,10 +160,10 @@
       NULL,
       &stdout_fd,
       NULL,
-      NULL);
+      &error);
   FreeArgv(argv.get());
   if (!success) {
-    LOG(ERROR) << "g_spawn_async failed";
+    LOG(ERROR) << "g_spawn_async failed: " << utils::GetAndFreeGError(&error);
     return 0;
   }
   record->tag =