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

#ifndef DEBUGD_SRC_MOCK_PROCESS_WITH_ID_H_
#define DEBUGD_SRC_MOCK_PROCESS_WITH_ID_H_

#include <stdint.h>

#include <string>
#include <vector>

#include <gmock/gmock.h>

#include "debugd/src/process_with_id.h"

namespace debugd {
class MockProcessWithId : public ProcessWithId {
 public:
  MOCK_METHOD(bool, Init, (), (override));
  MOCK_METHOD(bool, Init, (const std::vector<std::string>&), (override));
  MOCK_METHOD(void, DisableSandbox, (), (override));
  MOCK_METHOD(void,
              SandboxAs,
              (const std::string&, const std::string&),
              (override));
  MOCK_METHOD(void, InheritUsergroups, (), (override));
  MOCK_METHOD(void, SetCapabilities, (uint64_t), (override));
  MOCK_METHOD(void,
              SetSeccompFilterPolicyFile,
              (const std::string&),
              (override));
  MOCK_METHOD(void, AllowAccessRootMountNamespace, (), (override));
  MOCK_METHOD(bool, KillProcessGroup, (), (override));
  MOCK_METHOD(void, AddArg, (const std::string&), (override));
  MOCK_METHOD(void, RedirectInput, (const std::string&), (override));
  MOCK_METHOD(void, RedirectOutput, (const std::string&), (override));
  MOCK_METHOD(void, RedirectUsingPipe, (int, bool), (override));
  MOCK_METHOD(void, BindFd, (int, int), (override));
  MOCK_METHOD(void, SetUid, (uid_t), (override));
  MOCK_METHOD(void, SetGid, (gid_t), (override));
  MOCK_METHOD(void, ApplySyscallFilter, (const std::string&), (override));
  MOCK_METHOD(void, EnterNewPidNamespace, (), (override));
  MOCK_METHOD(void, SetInheritParentSignalMask, (bool), (override));
  MOCK_METHOD(void, SetPreExecCallback, (const PreExecCallback&), (override));
  MOCK_METHOD(void, SetSearchPath, (bool), (override));
  MOCK_METHOD(int, GetPipe, (int), (override));
  MOCK_METHOD(bool, Start, (), (override));
  MOCK_METHOD(int, Wait, (), (override));
  MOCK_METHOD(int, Run, (), (override));
  MOCK_METHOD(pid_t, pid, (), (override));
  MOCK_METHOD(bool, Kill, (int signal, int), (override));
  MOCK_METHOD(void, Reset, (pid_t), (override));
  MOCK_METHOD(bool, ResetPidByFile, (const std::string&), (override));
  MOCK_METHOD(pid_t, Release, (), (override));
  MOCK_METHOD(void, SetCloseUnusedFileDescriptors, (bool), (override));
};
}  // namespace debugd
#endif  // DEBUGD_SRC_MOCK_PROCESS_WITH_ID_H_
