// Copyright 2022 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 <gtest/gtest.h>

#include "debugd/src/perf_tool.h"

namespace debugd {

TEST(PerfToolTest, GoodQuipperOptions) {
  PerfSubcommand subcommand;
  brillo::ErrorPtr error;

  EXPECT_TRUE(ValidateQuipperArguments(
      {"--duration", "2", "--", "record", "-a"}, subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_RECORD);
  EXPECT_TRUE(ValidateQuipperArguments({"--duration", "1", "--", "stat"},
                                       subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_STAT);
  EXPECT_TRUE(ValidateQuipperArguments(
      {"--duration", "2", "--", "mem", "-e", "some"}, subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_MEM);
  EXPECT_TRUE(ValidateQuipperArguments(
      {"--duration", "1", "--run_inject", "--inject_args", "-b;-f", "--",
       "record", "-e", "event"},
      subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_RECORD);
}

TEST(PerfToolTest, BlockedQuipperOptions) {
  PerfSubcommand subcommand;
  brillo::ErrorPtr error;

  EXPECT_FALSE(ValidateQuipperArguments(
      {"--duration", "2", "--output_file", "/perf.pb", "--", "record"},
      subcommand, &error));
  EXPECT_FALSE(ValidateQuipperArguments(
      {"--duration", "2", "--perf_path", "/bad/perf", "--", "stat"}, subcommand,
      &error));
}

TEST(PerfToolTest, MalformedQuipperOptions) {
  PerfSubcommand subcommand;
  brillo::ErrorPtr error;

  EXPECT_FALSE(ValidateQuipperArguments({"--duration", "--", "record"},
                                        subcommand, &error));
}

TEST(PerfToolTest, UnsupportedPerfSubcommand) {
  PerfSubcommand subcommand;
  brillo::ErrorPtr error;

  EXPECT_FALSE(ValidateQuipperArguments({"--duration", "2", "--", "list"},
                                        subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_UNSUPPORTED);
  EXPECT_FALSE(ValidateQuipperArguments(
      {"--duration", "2", "--", "inject", "-b"}, subcommand, &error));
  EXPECT_EQ(subcommand, PERF_COMMAND_UNSUPPORTED);
}

}  // namespace debugd
