]>
git.proxmox.com Git - ceph.git/blob - ceph/src/Beast/test/websocket/frame.cpp
2 // Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
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)
8 #include <beast/websocket/detail/frame.hpp>
9 #include <beast/websocket/detail/stream_base.hpp>
10 #include <beast/unit_test/suite.hpp>
11 #include <initializer_list>
20 operator==(frame_header
const& lhs
, frame_header
const& rhs
)
25 lhs
.mask
== rhs
.mask
&&
26 lhs
.rsv1
== rhs
.rsv1
&&
27 lhs
.rsv2
== rhs
.rsv2
&&
28 lhs
.rsv3
== rhs
.rsv3
&&
33 class frame_test
: public beast::unit_test::suite
38 BEAST_EXPECT(! is_valid_close_code(0));
39 BEAST_EXPECT(! is_valid_close_code(1));
40 BEAST_EXPECT(! is_valid_close_code(999));
41 BEAST_EXPECT(! is_valid_close_code(1004));
42 BEAST_EXPECT(! is_valid_close_code(1005));
43 BEAST_EXPECT(! is_valid_close_code(1006));
44 BEAST_EXPECT(! is_valid_close_code(1016));
45 BEAST_EXPECT(! is_valid_close_code(2000));
46 BEAST_EXPECT(! is_valid_close_code(2999));
47 BEAST_EXPECT(is_valid_close_code(1000));
48 BEAST_EXPECT(is_valid_close_code(1002));
49 BEAST_EXPECT(is_valid_close_code(3000));
50 BEAST_EXPECT(is_valid_close_code(4000));
51 BEAST_EXPECT(is_valid_close_code(5000));
54 struct test_fh
: frame_header
69 void testFrameHeader()
73 role_type role
= role_type::client
;
76 [&](frame_header
const& fh
)
83 detail::frame_header fh1
;
85 stream
.read_fh1(fh1
, sb
, code
);
86 if(! BEAST_EXPECT(! code
))
88 if(! BEAST_EXPECT(sb
.size() == n
))
90 stream
.read_fh2(fh1
, sb
, code
);
91 if(! BEAST_EXPECT(! code
))
93 if(! BEAST_EXPECT(sb
.size() == 0))
95 BEAST_EXPECT(fh1
== fh
);
102 role
= role_type::server
;
125 role_type role
= role_type::client
;
128 [&](frame_header
const& fh
)
135 detail::frame_header fh1
;
137 stream
.read_fh1(fh1
, sb
, code
);
143 if(! BEAST_EXPECT(sb
.size() == n
))
145 stream
.read_fh2(fh1
, sb
, code
);
146 if(! BEAST_EXPECT(code
))
148 if(! BEAST_EXPECT(sb
.size() == 0))
154 fh
.op
= opcode::close
;
172 fh
.op
= opcode::rsv3
;
174 fh
.op
= opcode::text
;
176 fh
.op
= opcode::ping
;
184 role
= role_type::server
;
190 void bad(std::initializer_list
<std::uint8_t> bs
)
192 using boost::asio::buffer
;
193 using boost::asio::buffer_copy
;
194 static role_type
constexpr role
= role_type::client
;
195 std::vector
<std::uint8_t> v
{bs
};
197 sb
.commit(buffer_copy(sb
.prepare(v
.size()), buffer(v
)));
201 detail::frame_header fh
;
203 stream
.read_fh1(fh
, sb
, code
);
209 if(! BEAST_EXPECT(sb
.size() == n
))
211 stream
.read_fh2(fh
, sb
, code
);
212 if(! BEAST_EXPECT(code
))
214 if(! BEAST_EXPECT(sb
.size() == 0))
218 void testBadFrameHeaders()
222 // can't be created by the library
223 // so we produce them manually.
225 bad({0, 126, 0, 125});
226 bad({0, 127, 0, 0, 0, 0, 0, 0, 255, 255});
233 testBadFrameHeaders();
237 BEAST_DEFINE_TESTSUITE(frame
,websocket
,beast
);