]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/beast/test/beast/http/file_body.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / beast / test / beast / http / file_body.cpp
1 //
2 // Copyright (c) 2016-2019 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/buffer_traits.hpp>
14 #include <boost/beast/core/buffers_prefix.hpp>
15 #include <boost/beast/core/file_stdio.hpp>
16 #include <boost/beast/core/flat_buffer.hpp>
17 #include <boost/beast/http/parser.hpp>
18 #include <boost/beast/http/serializer.hpp>
19 #include <boost/beast/_experimental/unit_test/suite.hpp>
20 #include <boost/filesystem.hpp>
21
22 namespace boost {
23 namespace beast {
24 namespace http {
25
26 class file_body_test : public beast::unit_test::suite
27 {
28 public:
29 struct lambda
30 {
31 flat_buffer buffer;
32
33 template<class ConstBufferSequence>
34 void
35 operator()(error_code&, ConstBufferSequence const& buffers)
36 {
37 buffer.commit(net::buffer_copy(
38 buffer.prepare(buffer_bytes(buffers)),
39 buffers));
40 }
41 };
42
43 template<class File>
44 void
45 doTestFileBody()
46 {
47 error_code ec;
48 string_view const s =
49 "HTTP/1.1 200 OK\r\n"
50 "Server: test\r\n"
51 "Content-Length: 3\r\n"
52 "\r\n"
53 "xyz";
54 auto const temp = boost::filesystem::unique_path();
55 {
56 response_parser<basic_file_body<File>> p;
57 p.eager(true);
58
59 p.get().body().open(
60 temp.string<std::string>().c_str(), file_mode::write, ec);
61 BEAST_EXPECTS(! ec, ec.message());
62
63 p.put(net::buffer(s.data(), s.size()), ec);
64 BEAST_EXPECTS(! ec, ec.message());
65 }
66 {
67 File f;
68 f.open(temp.string<std::string>().c_str(), file_mode::read, ec);
69 auto size = f.size(ec);
70 BEAST_EXPECTS(! ec, ec.message());
71 BEAST_EXPECT(size == 3);
72 std::string s1;
73 s1.resize(3);
74 f.read(&s1[0], s1.size(), ec);
75 BEAST_EXPECTS(! ec, ec.message());
76 BEAST_EXPECTS(s1 == "xyz", s);
77 }
78 {
79 lambda visit;
80 {
81 response<basic_file_body<File>> res{status::ok, 11};
82 res.set(field::server, "test");
83 res.body().open(temp.string<std::string>().c_str(),
84 file_mode::scan, ec);
85 BEAST_EXPECTS(! ec, ec.message());
86 res.prepare_payload();
87
88 serializer<false, basic_file_body<File>, fields> sr{res};
89 sr.next(ec, visit);
90 BEAST_EXPECTS(! ec, ec.message());
91 auto const b = buffers_front(visit.buffer.data());
92 string_view const s1{
93 reinterpret_cast<char const*>(b.data()),
94 b.size()};
95 BEAST_EXPECTS(s1 == s, s1);
96 }
97 }
98 boost::filesystem::remove(temp, ec);
99 BEAST_EXPECTS(! ec, ec.message());
100 }
101 void
102 run() override
103 {
104 doTestFileBody<file_stdio>();
105 #if BOOST_BEAST_USE_WIN32_FILE
106 doTestFileBody<file_win32>();
107 #endif
108 #if BOOST_BEAST_USE_POSIX_FILE
109 doTestFileBody<file_posix>();
110 #endif
111 }
112 };
113
114 BEAST_DEFINE_TESTSUITE(beast,http,file_body);
115
116 } // http
117 } // beast
118 } // boost