blob: daff3c5ab5bc34b318d56059b2fcb77de6108a1c [file] [log] [blame]
#include "aos/common/util/run_command.h"
#include "gtest/gtest.h"
#include "aos/common/util/thread.h"
namespace aos {
namespace util {
namespace testing {
TEST(RunCommandTest, True) {
int result = RunCommand("true");
ASSERT_NE(-1, result);
ASSERT_TRUE(WIFEXITED(result));
EXPECT_EQ(0, WEXITSTATUS(result));
}
TEST(RunCommandTest, False) {
int result = RunCommand("false");
ASSERT_NE(-1, result);
ASSERT_TRUE(WIFEXITED(result));
EXPECT_EQ(1, WEXITSTATUS(result));
}
TEST(RunCommandTest, CommandNotFound) {
int result = RunCommand("ajflkjasdlfa");
ASSERT_NE(-1, result);
ASSERT_TRUE(WIFEXITED(result));
EXPECT_EQ(127, WEXITSTATUS(result));
}
TEST(RunCommandTest, KilledBySignal) {
int result = RunCommand("kill -QUIT $$");
ASSERT_NE(-1, result);
ASSERT_TRUE(WIFSIGNALED(result));
EXPECT_EQ(SIGQUIT, WTERMSIG(result));
}
TEST(RunCommandTest, MultipleThreads) {
int result1, result2;
util::FunctionThread t1([&result1](util::Thread *) {
result1 = RunCommand("true");
});
util::FunctionThread t2([&result2](util::Thread *) {
result2 = RunCommand("true");
});
t1.Start();
t2.Start();
t1.WaitUntilDone();
t2.WaitUntilDone();
ASSERT_NE(-1, result1);
ASSERT_NE(-1, result2);
ASSERT_TRUE(WIFEXITED(result1));
ASSERT_TRUE(WIFEXITED(result2));
EXPECT_EQ(0, WEXITSTATUS(result1));
EXPECT_EQ(0, WEXITSTATUS(result2));
}
} // namespace testing
} // namespace util
} // namespace aos