]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/beast/test/beast/http/file_body.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / beast / test / beast / http / file_body.cpp
1 //
2 // Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/boostorg/beast
8 //
9
10 // Test that header file is self-contained.
11 #include <boost/beast/http/file_body.hpp>
12
13 #include <boost/beast/core/buffers_prefix.hpp>
14 #include <boost/beast/core/file_stdio.hpp>
15 #include <boost/beast/core/flat_buffer.hpp>
16 #include <boost/beast/http/parser.hpp>
17 #include <boost/beast/http/serializer.hpp>
18 #include <boost/beast/unit_test/suite.hpp>
19 #include <boost/filesystem.hpp>
20
21 namespace boost {
22 namespace beast {
23 namespace http {
24
25 class file_body_test : public beast::unit_test::suite
26 {
27 public:
28 struct lambda
29 {
30 flat_buffer buffer;
31
32 template<class ConstBufferSequence>
33 void
34 operator()(error_code&, ConstBufferSequence const& buffers)
35 {
36 buffer.commit(boost::asio::buffer_copy(
37 buffer.prepare(boost::asio::buffer_size(buffers)),
38 buffers));
39 }
40 };
41
42 template<class File>
43 void
44 doTestFileBody()
45 {
46 error_code ec;
47 string_view const s =
48 "HTTP/1.1 200 OK\r\n"
49 "Server: test\r\n"
50 "Content-Length: 3\r\n"
51 "\r\n"
52 "xyz";
53 auto const temp = boost::filesystem::unique_path();
54 {
55 response_parser<basic_file_body<File>> p;
56 p.eager(true);
57
58 p.get().body().open(
59 temp.string<std::string>().c_str(), file_mode::write, ec);
60 BEAST_EXPECTS(! ec, ec.message());
61
62 p.put(boost::asio::buffer(s.data(), s.size()), ec);
63 BEAST_EXPECTS(! ec, ec.message());
64 }
65 {
66 File f;
67 f.open(temp.string<std::string>().c_str(), file_mode::read, ec);
68 auto size = f.size(ec);
69 BEAST_EXPECTS(! ec, ec.message());
70 BEAST_EXPECT(size == 3);
71 std::string s1;
72 s1.resize(3);
73 f.read(&s1[0], s1.size(), ec);
74 BEAST_EXPECTS(! ec, ec.message());
75 BEAST_EXPECTS(s1 == "xyz", s);
76 }
77 {
78 lambda visit;
79 {
80 response<basic_file_body<File>> res{status::ok, 11};
81 res.set(field::server, "test");
82 res.body().open(temp.string<std::string>().c_str(),
83 file_mode::scan, ec);
84 BEAST_EXPECTS(! ec, ec.message());
85 res.prepare_payload();
86
87 serializer<false, basic_file_body<File>, fields> sr{res};
88 sr.next(ec, visit);
89 BEAST_EXPECTS(! ec, ec.message());
90 auto const b = buffers_front(visit.buffer.data());
91 string_view const s1{
92 reinterpret_cast<char const*>(b.data()),
93 b.size()};
94 BEAST_EXPECTS(s1 == s, s1);
95 }
96 }
97 boost::filesystem::remove(temp, ec);
98 BEAST_EXPECTS(! ec, ec.message());
99 }
100 void
101 run() override
102 {
103 doTestFileBody<file_stdio>();
104 #if BOOST_BEAST_USE_WIN32_FILE
105 doTestFileBody<file_win32>();
106 #endif
107 #if BOOST_BEAST_USE_POSIX_FILE
108 doTestFileBody<file_posix>();
109 #endif
110 }
111 };
112
113 BEAST_DEFINE_TESTSUITE(beast,http,file_body);
114
115 } // http
116 } // beast
117 } // boost