// Copyright 2018 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.

#include "init/usermode-helper.h"

#include <gtest/gtest.h>

#include <initializer_list>
#include <vector>

namespace {
// Convenience function.
bool ValidateProgramArgs(std::initializer_list<const char*> argv) {
  std::vector<const char*> vargv(argv);
  return usermode_helper::ValidateProgramArgs(argv.size(), vargv.data());
}
}  // namespace

TEST(ValidateProgramArgs, UnknownPrograms) {
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/crash_reporter "}));
  EXPECT_FALSE(ValidateProgramArgs({"crash_reporter"}));
  EXPECT_FALSE(ValidateProgramArgs({"/bin/crash_reporter"}));
}

TEST(ValidateProgramArgs, GoodCrashReporter) {
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/crash_reporter", "--user=foo"}));
  EXPECT_TRUE(ValidateProgramArgs(
      {"/sbin/crash_reporter", "--early", "--log_to_stderr", "--user=foo"}));
  EXPECT_TRUE(ValidateProgramArgs(
      {"/sbin/crash_reporter", "--user=foo", "--core2md_failure"}));
  EXPECT_TRUE(ValidateProgramArgs(
      {"/sbin/crash_reporter", "--user=foo", "--directory_failure"}));
  EXPECT_TRUE(ValidateProgramArgs(
      {"/sbin/crash_reporter", "--user=foo", "--crash_test"}));
}

TEST(ValidateProgramArgs, BadCrashReporter) {
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/crash_reporter"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/crash_reporter", "--init"}));
  EXPECT_FALSE(ValidateProgramArgs(
      {"/sbin/crash_reporter", "--user=foo", "--filter_in=blah"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/crash_reporter", "--user=foo",
                                    "--filter_in=blah", "--core2md_failure"}));
}

TEST(ValidateProgramArgs, GoodModprobe) {
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/modprobe", "-q", "--", "mod"}));
}

TEST(ValidateProgramArgs, BadModprobe) {
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "mod"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "-q"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "-q", "mod"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "-q", "--"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "--"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "--", "mod"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "-a", "mod1", "mod2"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/modprobe", "-r", "mod"}));
}

TEST(ValidateProgramArgs, GoodPoweroff) {
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/poweroff"}));
}

TEST(ValidateProgramArgs, BadPoweroff) {
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/poweroff", "-f"}));
}

TEST(ValidateProgramArgs, GoodReboot) {
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/reboot"}));
}

TEST(ValidateProgramArgs, BadReboot) {
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/reboot", "-f"}));
}

TEST(ValidateProgramArgs, GoodRequestKey) {
  EXPECT_TRUE(
      ValidateProgramArgs({"/sbin/request-key", "<op>", "<key>", "<uid>",
                           "<gid>", "<keyring>", "<keyring>", "<keyring>"}));
}

TEST(ValidateProgramArgs, RequestKey) {
  EXPECT_FALSE(
      ValidateProgramArgs({"/sbin/request-key", "<op>", "<key>", "<uid>",
                           "<gid>", "<keyring>", "<keyring>", "--option"}));
  EXPECT_FALSE(
      ValidateProgramArgs({"/sbin/request-key", "<op>", "<key>", "<uid>",
                           "<gid>", "<keyring>", "<keyring>"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/request-key", "<op>", "<key>",
                                    "<uid>", "<gid>", "<keyring>", "<keyring>",
                                    "<keyring>", "toomany"}));
}

TEST(ValidateProgramArgs, BridgeStp) {
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/bridge-stp", "br-lan", "start"}));
  EXPECT_TRUE(ValidateProgramArgs({"/sbin/bridge-stp", "br-lan", "stop"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/bridge-stp", "br-lan"}));
  EXPECT_FALSE(
      ValidateProgramArgs({"/sbin/bridge-stp", "br-lan", "start", "toomany"}));
  EXPECT_FALSE(ValidateProgramArgs({"/sbin/bridge-stp", "start", "br-lan"}));
}
