| // Copyright 2015 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 "chromiumos-wide-profiling/run_command.h" |
| |
| #include <vector> |
| |
| #include "chromiumos-wide-profiling/compat/string.h" |
| #include "chromiumos-wide-profiling/compat/test.h" |
| |
| namespace quipper { |
| |
| TEST(RunCommandTest, StoresStdout) { |
| std::vector<char> output; |
| EXPECT_EQ(0, RunCommand({"/bin/sh", "-c", "echo 'Hello, world!'"}, &output)); |
| string output_str(output.begin(), output.end()); |
| EXPECT_EQ("Hello, world!\n", output_str); |
| } |
| |
| TEST(RunCommandTest, RunsFromPath) { |
| std::vector<char> output; |
| EXPECT_EQ(0, RunCommand({"sh", "-c", "echo 'Hello, world!'"}, &output)); |
| string output_str(output.begin(), output.end()); |
| EXPECT_EQ("Hello, world!\n", output_str); |
| } |
| |
| TEST(RunCommandTest, LargeStdout) { |
| std::vector<char> output; |
| EXPECT_EQ(0, RunCommand({"dd", "if=/dev/zero", "bs=5", "count=4096"}, |
| &output)); |
| EXPECT_EQ(5 * 4096, output.size()); |
| EXPECT_EQ('\0', output[0]); |
| EXPECT_EQ('\0', output[1]); |
| EXPECT_EQ('\0', *output.rbegin()); |
| } |
| |
| TEST(RunCommandTest, StdoutToDevnull) { |
| EXPECT_EQ(0, RunCommand({"/bin/sh", "-c", "echo 'Hello, world!'"}, nullptr)); |
| } |
| |
| TEST(RunCommandTest, StderrIsNotStored) { |
| std::vector<char> output; |
| EXPECT_EQ(0, RunCommand({"/bin/sh", "-c", "echo 'Hello, void!' >&2"}, |
| &output)); |
| EXPECT_EQ(0, output.size()); |
| } |
| |
| TEST(RunCommandTest, NoSuchExecutable) { |
| std::vector<char> output; |
| int ret = RunCommand({"/doesnt-exist/not-bin/true"}, &output); |
| int save_errno = errno; |
| EXPECT_EQ(-1, ret); |
| EXPECT_EQ(ENOENT, save_errno); |
| } |
| |
| } // namespace quipper |