1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2012 The Android Open Source Project
3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License");
5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License.
6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at
7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//      http://www.apache.org/licenses/LICENSE-2.0
9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software
11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS,
12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and
14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License.
15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
1649fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.com
1749fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.com// based on pam_google_testrunner.cc
1849fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.com
192e71f90d6af955a5359853132085931f1e0479e0Alex Deymo#include <xz.h>
202e71f90d6af955a5359853132085931f1e0479e0Alex Deymo
219c0baf82049efd95230a8389769e1b3e5d001209Darin Petkov#include <base/at_exit.h>
229c0baf82049efd95230a8389769e1b3e5d001209Darin Petkov#include <base/command_line.h>
233f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/test_helpers.h>
2449fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.com#include <gtest/gtest.h>
259c0baf82049efd95230a8389769e1b3e5d001209Darin Petkov
2639910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/terminator.h"
275ee71ba372ddef9bc2b5e12f55f0b449d320282cAlex Deymo#include "update_engine/payload_generator/xz.h"
28c98a7edf648aad88b3f66df3b5a7d43d6a6d7fa9adlr@google.com
2949fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.comint main(int argc, char **argv) {
30fc35929eda5c40615ecd21f6c4ac30cf49e34e3eGilad Arnold  LOG(INFO) << "started";
315c0a8afa879886800d82b195e3164e5a580a2cc7Darin Petkov  base::AtExitManager exit_manager;
322e71f90d6af955a5359853132085931f1e0479e0Alex Deymo  // xz-embedded requires to initialize its CRC-32 table once on startup.
332e71f90d6af955a5359853132085931f1e0479e0Alex Deymo  xz_crc32_init();
345ee71ba372ddef9bc2b5e12f55f0b449d320282cAlex Deymo  // The LZMA SDK-based Xz compressor used in the payload generation requires
355ee71ba372ddef9bc2b5e12f55f0b449d320282cAlex Deymo  // this one-time initialization.
365ee71ba372ddef9bc2b5e12f55f0b449d320282cAlex Deymo  chromeos_update_engine::XzCompressInit();
370b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  // TODO(garnold) temporarily cause the unittest binary to exit with status
380b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  // code 2 upon catching a SIGTERM. This will help diagnose why the unittest
390b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  // binary is perceived as failing by the buildbot.  We should revert it to use
400b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  // the default exit status of 1.  Corresponding reverts are necessary in
410b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  // terminator_unittest.cc.
420b4a6ffb20e83aea7e5616be07bebb2f09ac85daGilad Arnold  chromeos_update_engine::Terminator::Init(2);
43fc35929eda5c40615ecd21f6c4ac30cf49e34e3eGilad Arnold  LOG(INFO) << "parsing command line arguments";
44b96ecdaafd27009a18e198f166d2b2f64a55d251Alex Vakulenko  base::CommandLine::Init(argc, argv);
45fc35929eda5c40615ecd21f6c4ac30cf49e34e3eGilad Arnold  LOG(INFO) << "initializing gtest";
460bb234147ea8f0247b733375fcf1685eaf329aacAlex Deymo  SetUpTests(&argc, argv, true);
47fc35929eda5c40615ecd21f6c4ac30cf49e34e3eGilad Arnold  LOG(INFO) << "running unit tests";
48faac2a5b491605d400d89cbe2054474c7aba6452Gilad Arnold  int test_result = RUN_ALL_TESTS();
49faac2a5b491605d400d89cbe2054474c7aba6452Gilad Arnold  LOG(INFO) << "unittest return value: " << test_result;
50faac2a5b491605d400d89cbe2054474c7aba6452Gilad Arnold  return test_result;
5149fdf1889b965be25f929eeebc5b60cd40b9043rspangler@google.com}
52