-
Notifications
You must be signed in to change notification settings - Fork 94
Expand file tree
/
Copy pathoutput_transform_main_test.cc
More file actions
75 lines (61 loc) · 2.58 KB
/
Copy pathoutput_transform_main_test.cc
File metadata and controls
75 lines (61 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "nighthawk/common/exception.h"
#include "external/envoy/test/test_common/environment.h"
#include "external/envoy/test/test_common/network_utility.h"
#include "external/envoy/test/test_common/utility.h"
#include "api/client/service.pb.h"
#include "source/client/output_formatter_impl.h"
#include "source/client/output_transform_main.h"
#include "absl/strings/match.h"
#include "gtest/gtest.h"
using namespace testing;
namespace Nighthawk {
namespace Client {
class OutputTransformMainTest : public Test {
public:
std::stringstream stream_;
};
TEST_F(OutputTransformMainTest, BadArgs) {
std::vector<const char*> argv = {"foo", "bar"};
stream_ << "foo bar blah";
EXPECT_THROW(OutputTransformMain(argv.size(), argv.data(), stream_), std::exception);
}
TEST_F(OutputTransformMainTest, BadOutputFormat) {
std::vector<const char*> argv = {"foo", "--output-format", "nonsense"};
EXPECT_THROW(OutputTransformMain(argv.size(), argv.data(), stream_), std::exception);
}
// Correct args, but empty stdin input
TEST_F(OutputTransformMainTest, NoInput) {
std::vector<const char*> argv = {"foo", "--output-format", "human"};
OutputTransformMain main(argv.size(), argv.data(), stream_);
EXPECT_NE(main.run(), 0);
}
// Correct args, but fails to parse as json input
TEST_F(OutputTransformMainTest, BadInput) {
std::vector<const char*> argv = {"foo", "--output-format", "human"};
stream_ << "foo bar blah";
OutputTransformMain main(argv.size(), argv.data(), stream_);
EXPECT_NE(main.run(), 0);
}
// Correct args, correct json, but doesn't validate (misses URI).
TEST_F(OutputTransformMainTest, JsonNotValidating) {
std::vector<const char*> argv = {"foo", "--output-format", "human"};
stream_ << "{invalid_field:1}";
OutputTransformMain main(argv.size(), argv.data(), stream_);
EXPECT_NE(main.run(), 0);
}
TEST_F(OutputTransformMainTest, HappyFlowForAllOutputFormats) {
for (const std::string& output_format : OutputFormatterImpl::getLowerCaseOutputFormats()) {
std::vector<const char*> argv = {"foo", "--output-format", output_format.c_str()};
nighthawk::client::Output output;
if (absl::StrContains(output_format, "fortio")) {
// The fortio output formatter mandates at least a single global result or it throws.
output.add_results()->set_name("global");
}
output.mutable_options()->mutable_uri()->set_value("http://127.0.0.1/");
stream_ << Envoy::MessageUtil::getJsonStringFromMessageOrError(output, true, true);
OutputTransformMain main(argv.size(), argv.data(), stream_);
EXPECT_EQ(main.run(), 0);
}
}
} // namespace Client
} // namespace Nighthawk