diff --git a/include/nighthawk/common/request.h b/include/nighthawk/common/request.h index d123b8736..1a5f16134 100644 --- a/include/nighthawk/common/request.h +++ b/include/nighthawk/common/request.h @@ -20,6 +20,7 @@ class Request { * @return HeaderMapPtr shared pointer to a request header specification. */ virtual HeaderMapPtr header() const PURE; + virtual const std::string& body() const PURE; // TODO(oschaaf): expectations }; diff --git a/source/common/request_impl.h b/source/common/request_impl.h index 930175dc5..9cc2742f3 100644 --- a/source/common/request_impl.h +++ b/source/common/request_impl.h @@ -1,5 +1,8 @@ #pragma once +#include +#include + #include "envoy/http/header_map.h" #include "nighthawk/common/request.h" @@ -8,11 +11,15 @@ namespace Nighthawk { class RequestImpl : public Request { public: - RequestImpl(HeaderMapPtr header) : header_(std::move(header)) {} + RequestImpl(HeaderMapPtr header, std::string json_body = "") + : header_(std::move(header)), json_body_(json_body) {} + HeaderMapPtr header() const override { return header_; } + const std::string& body() const override { return json_body_; } private: HeaderMapPtr header_; + std::string json_body_; }; } // namespace Nighthawk diff --git a/source/request_source/request_options_list_plugin_impl.cc b/source/request_source/request_options_list_plugin_impl.cc index 59c1a96a6..6e7539fc4 100644 --- a/source/request_source/request_options_list_plugin_impl.cc +++ b/source/request_source/request_options_list_plugin_impl.cc @@ -1,5 +1,7 @@ #include "source/request_source/request_options_list_plugin_impl.h" +#include + #include "external/envoy/source/common/protobuf/message_validator_impl.h" #include "external/envoy/source/common/protobuf/protobuf.h" #include "external/envoy/source/common/protobuf/utility.h" @@ -109,7 +111,7 @@ RequestGenerator OptionsListRequestSource::get() { auto lower_case_key = Envoy::Http::LowerCaseString(std::string(option_header.header().key())); header->setCopy(lower_case_key, std::string(option_header.header().value())); } - return std::make_unique(std::move(header)); + return std::make_unique(std::move(header), request_option.json_body()); }; return request_generator; } diff --git a/test/request_source/request_source_plugin_test.cc b/test/request_source/request_source_plugin_test.cc index 4416f88a2..5f9957063 100644 --- a/test/request_source/request_source_plugin_test.cc +++ b/test/request_source/request_source_plugin_test.cc @@ -1,6 +1,20 @@ +#include +#include +#include + +#include "envoy/api/api.h" #include "envoy/common/exception.h" +#include "envoy/http/header_map.h" + +#include "nighthawk/common/exception.h" +#include "nighthawk/common/request.h" +#include "nighthawk/common/request_source.h" +#include "nighthawk/request_source/request_source_plugin_config_factory.h" #include "external/envoy/source/common/config/utility.h" +#include "external/envoy/source/common/http/header_map_impl.h" +#include "external/envoy/source/common/protobuf/message_validator_impl.h" +#include "external/envoy/source/common/protobuf/protobuf.h" #include "external/envoy/test/mocks/api/mocks.h" #include "external/envoy/test/mocks/stats/mocks.h" #include "external/envoy/test/test_common/file_system_for_test.h" @@ -171,6 +185,10 @@ TEST_F(FileBasedRequestSourcePluginTest, Nighthawk::HeaderMapPtr header2 = request2->header(); EXPECT_EQ(header1->getPathValue(), "/a"); EXPECT_EQ(header2->getPathValue(), "/b"); + std::string body1 = request1->body(); + std::string body2 = request2->body(); + EXPECT_EQ(body1, R"({"message": "hello1"})"); + EXPECT_EQ(body2, R"({"message": "hello2"})"); EXPECT_EQ(request3, nullptr); } @@ -353,6 +371,10 @@ TEST_F(InLineRequestSourcePluginTest, Nighthawk::HeaderMapPtr header2 = request2->header(); EXPECT_EQ(header1->getPathValue(), "/a"); EXPECT_EQ(header2->getPathValue(), "/b"); + std::string body1 = request1->body(); + std::string body2 = request2->body(); + EXPECT_EQ(body1, R"({"message": "hello1"})"); + EXPECT_EQ(body2, R"({"message": "hello2"})"); EXPECT_EQ(request3, nullptr); } diff --git a/test/request_source/test_data/test-config-ab.yaml b/test/request_source/test_data/test-config-ab.yaml index b78bcba64..e03fdd318 100644 --- a/test/request_source/test_data/test-config-ab.yaml +++ b/test/request_source/test_data/test-config-ab.yaml @@ -1,11 +1,13 @@ options: - request_method: 1 - request_body_size: 10 + request_body_size: 23 + json_body: '{"message": "hello1"}' request_headers: - { header: { key: ":path", value: "/a" } } - { header: { key: "x-nighthawk-test-server-config", value: "{response_body_size:13}" } } - request_method: 1 - request_body_size: 10 + request_body_size: 23 + json_body: '{"message": "hello2"}' request_headers: - { header: { key: ":path", value: "/b" } } - { header: { key: "x-nighthawk-test-server-config", value: "{response_body_size:17}" } } \ No newline at end of file