// Copyright 2016 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 LOGIN_MANAGER_FAKE_CONTAINER_MANAGER_H_
#define LOGIN_MANAGER_FAKE_CONTAINER_MANAGER_H_

#include <base/callback.h>

#include "login_manager/container_manager_interface.h"

namespace login_manager {

// Fake implementation used for tests.
class FakeContainerManager : public ContainerManagerInterface {
 public:
  explicit FakeContainerManager(pid_t pid);
  ~FakeContainerManager() override = default;

  bool running() const { return running_; }

  bool IsManagedJob(pid_t pid) override;
  void HandleExit(const siginfo_t& status) override;
  void RequestJobExit() override;
  void EnsureJobExit(base::TimeDelta timeout) override;

  bool StartContainer(const ExitCallback& exit_callback) override;
  bool GetRootFsPath(base::FilePath* path_out) const override;
  bool GetContainerPID(pid_t* pid_out) const override;
  void SimulateCrash();

 private:
  // True if the container is running.
  bool running_ = false;

  const pid_t pid_;
  ExitCallback exit_callback_;

  DISALLOW_COPY_AND_ASSIGN(FakeContainerManager);
};

}  // namespace login_manager

#endif  // LOGIN_MANAGER_FAKE_CONTAINER_MANAGER_H_
