// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// based on pam_google_testrunner.cc

#include <base/at_exit.h>
#include <base/command_line.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <glib.h>
#include <glib-object.h>
#include <gtest/gtest.h>

#include "update_engine/subprocess.h"
#include "update_engine/terminator.h"

int main(int argc, char **argv) {
  LOG(INFO) << "started";
  ::g_type_init();
  dbus_threads_init_default();
  base::AtExitManager exit_manager;
  // TODO(garnold) temporarily cause the unittest binary to exit with status
  // code 2 upon catching a SIGTERM. This will help diagnose why the unittest
  // binary is perceived as failing by the buildbot.  We should revert it to use
  // the default exit status of 1.  Corresponding reverts are necessary in
  // terminator_unittest.cc.
  chromeos_update_engine::Terminator::Init(2);
  chromeos_update_engine::Subprocess::Init();
  LOG(INFO) << "parsing command line arguments";
  CommandLine::Init(argc, argv);
  LOG(INFO) << "initializing gtest";
  ::testing::InitGoogleTest(&argc, argv);
  LOG(INFO) << "running unit tests";
  int test_result = RUN_ALL_TESTS();
  LOG(INFO) << "unittest return value: " << test_result;
  return test_result;
}
