// // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/boostorg/beast // // Test that header file is self-contained. #include #include #include #include #include #include #include #include #include namespace boost { namespace beast { namespace http { class dynamic_body_test : public beast::unit_test::suite { net::io_context ioc_; public: template static std::string to_string(message const& m) { std::stringstream ss; ss << m; return ss.str(); } void test_success() { std::string const s = "HTTP/1.1 200 OK\r\n" "Server: test\r\n" "Content-Length: 3\r\n" "\r\n" "xyz"; test::stream ts(ioc_, s); response_parser p; multi_buffer b; read(ts, b, p); auto const& m = p.get(); BEAST_EXPECT(buffers_to_string(m.body().data()) == "xyz"); BEAST_EXPECT(to_string(m) == s); } void test_issue1581() { std::string const s = "HTTP/1.1 200 OK\r\n" "Server: test\r\n" "Content-Length: 132\r\n" "\r\n" "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz" "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz" "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz" "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz"; test::stream ts(ioc_, s); response_parser p; multi_buffer b; p.get().body().max_size(64); error_code ec; read(ts, b, p, ec); BEAST_EXPECT(ec == http::error::buffer_overflow); } void run() override { test_success(); test_issue1581(); } }; BEAST_DEFINE_TESTSUITE(beast,http,dynamic_body); } // http } // beast } // boost