| // Copyright 2017 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 <tuple> |
| |
| #include <brillo/errors/error.h> |
| |
| #include "debugd/src/process_with_id.h" |
| #include "debugd/src/subprocess_tool.h" |
| |
| namespace debugd { |
| namespace { |
| |
| using SubprocessToolTestParam = std::tuple<bool, // sandboxed |
| bool>; // allow_root_mount_ns |
| |
| class SubprocessToolTest |
| : public testing::TestWithParam<SubprocessToolTestParam> { |
| protected: |
| SubprocessTool tool_; |
| }; |
| |
| TEST_P(SubprocessToolTest, CreateProcessAndStop) { |
| bool sandboxed; |
| bool allow_root_mount_ns; |
| std::tie(sandboxed, allow_root_mount_ns) = GetParam(); |
| |
| ProcessWithId* process = tool_.CreateProcess(sandboxed, allow_root_mount_ns); |
| EXPECT_NE(nullptr, process); |
| EXPECT_FALSE(process->id().empty()); |
| |
| std::string handle = process->id(); |
| |
| EXPECT_TRUE(tool_.Stop(handle, nullptr)); |
| // |process| is now destroyed by SubprocessTool::Stop(). |
| |
| brillo::ErrorPtr error; |
| EXPECT_FALSE(tool_.Stop(handle, &error)); |
| EXPECT_EQ(handle, error->GetMessage()); |
| } |
| |
| INSTANTIATE_TEST_CASE_P(SubprocessToolCreateProcess, |
| SubprocessToolTest, |
| testing::Combine(testing::Bool(), testing::Bool())); |
| |
| TEST_F(SubprocessToolTest, StopInvalidProcessHandle) { |
| std::string invalid_handle = "some_invalid_handle"; |
| brillo::ErrorPtr error; |
| EXPECT_FALSE(tool_.Stop(invalid_handle, &error)); |
| EXPECT_EQ(invalid_handle, error->GetMessage()); |
| } |
| |
| } // namespace |
| } // namespace debugd |