// 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 "run_command.h" #include <vector> #include "compat/string.h" #include "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