diff options
author | Håvard Pettersen <havardpe@oath.com> | 2022-03-01 15:19:47 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2022-03-04 11:02:49 +0000 |
commit | ca7738c4efbe2ef6dd462d96b71d1dab084b33bf (patch) | |
tree | 5355e349403f7fef2361d6ee83ac667a5725fe74 /vespalib/src/tests/process | |
parent | a6f422189180fbe72dd43241b11e47c4dd3be565 (diff) |
process code
Diffstat (limited to 'vespalib/src/tests/process')
-rw-r--r-- | vespalib/src/tests/process/CMakeLists.txt | 9 | ||||
-rw-r--r-- | vespalib/src/tests/process/process_test.cpp | 112 |
2 files changed, 121 insertions, 0 deletions
diff --git a/vespalib/src/tests/process/CMakeLists.txt b/vespalib/src/tests/process/CMakeLists.txt new file mode 100644 index 00000000000..4045a8345b2 --- /dev/null +++ b/vespalib/src/tests/process/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vespalib_process_test_app TEST + SOURCES + process_test.cpp + DEPENDS + vespalib + GTest::GTest +) +vespa_add_test(NAME vespalib_process_test_app COMMAND vespalib_process_test_app COST 30) diff --git a/vespalib/src/tests/process/process_test.cpp b/vespalib/src/tests/process/process_test.cpp new file mode 100644 index 00000000000..e1963caad3d --- /dev/null +++ b/vespalib/src/tests/process/process_test.cpp @@ -0,0 +1,112 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/vespalib/process/process.h> +#include <vespa/vespalib/data/slime/slime.h> +#include <vespa/vespalib/data/slime/json_format.h> +#include <vespa/vespalib/data/simple_buffer.h> +#include <vespa/vespalib/gtest/gtest.h> + +using vespalib::Input; +using vespalib::Output; +using vespalib::Process; +using vespalib::SimpleBuffer; +using vespalib::Slime; +using vespalib::slime::JsonFormat; + +//----------------------------------------------------------------------------- + +TEST(ProcessTest, simple_run_ignore_output) { + EXPECT_TRUE(Process::run("echo foo")); +} + +TEST(ProcessTest, simple_run_ignore_output_failure) { + EXPECT_FALSE(Process::run("false")); +} + +//----------------------------------------------------------------------------- + +TEST(ProcessTest, simple_run) { + vespalib::string out; + EXPECT_TRUE(Process::run("echo -n foo", out)); + EXPECT_EQ(out, "foo"); +} + +TEST(ProcessTest, simple_run_failure) { + vespalib::string out; + EXPECT_FALSE(Process::run("echo -n foo; false", out)); + EXPECT_EQ(out, "foo"); +} + +TEST(ProcessTest, simple_run_strip_single_line_trailing_newline) { + vespalib::string out; + EXPECT_TRUE(Process::run("echo foo", out)); + EXPECT_EQ(out, "foo"); +} + +TEST(ProcessTest, simple_run_dont_strip_multi_line_output) { + vespalib::string out; + EXPECT_TRUE(Process::run("perl -e 'print \"foo\\n\\n\"'", out)); + EXPECT_EQ(out, "foo\n\n"); +} + +//----------------------------------------------------------------------------- + +TEST(ProcessTest, proc_failure) { + Process proc("false"); + EXPECT_EQ(proc.obtain().size, 0); + EXPECT_NE(proc.join(), 0); +} + +TEST(ProcessTest, proc_kill) { + { + Process proc("sleep 60"); + (void) proc; + } +} + +//----------------------------------------------------------------------------- + +void write_slime(const Slime &slime, Output &out) { + JsonFormat::encode(slime, out, true); + out.reserve(1).data[0] = '\n'; + out.commit(1); +} + +Slime read_slime(Input &input) { + Slime slime; + EXPECT_TRUE(JsonFormat::decode(input, slime)); + return slime; +} + +vespalib::string to_json(const Slime &slime) { + SimpleBuffer buf; + JsonFormat::encode(slime, buf, true); + return buf.get().make_string(); +} + +Slime from_json(const vespalib::string &json) { + Slime slime; + EXPECT_TRUE(JsonFormat::decode(json, slime)); + return slime; +} + +Slime obj1 = from_json("[1,2,3]"); +Slime obj2 = from_json("{a:1,b:2,c:3}"); +Slime obj3 = from_json("{a:1,b:2,c:3,d:[1,2,3]}"); + +TEST(ProcessTest, read_write_test) { + Process proc("cat"); + for (const Slime &obj: {std::cref(obj1), std::cref(obj2), std::cref(obj3)}) { + write_slime(obj, proc); + fprintf(stderr, "write: %s\n", to_json(obj).c_str()); + auto res = read_slime(proc); + fprintf(stderr, "read: %s\n", to_json(res).c_str()); + EXPECT_EQ(res, obj); + } + proc.close(); + EXPECT_EQ(proc.join(), 0); +} + +//----------------------------------------------------------------------------- + +GTEST_MAIN_RUN_ALL_TESTS() |