mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-25 21:45:52 +00:00
Various fixes, warnings:
* Fix sig_wait
* Fix websocket strict aliasing warning
* Fix invokable strict aliasing
* Silence fread warning in examples
* Silence integer conversion warnings
* Build parser-bench as test
* Disable unused variable warning for asio:
Caused by static variables declared in <boost/asio/error.hpp>
No known workaround.
This commit is contained in:
@@ -33,6 +33,80 @@ class basic_parser_test : public beast::detail::unit_test::suite
|
||||
std::mt19937 rng_;
|
||||
|
||||
public:
|
||||
struct cb_req_checker
|
||||
{
|
||||
bool method = false;
|
||||
bool uri = false;
|
||||
bool request = false;
|
||||
};
|
||||
|
||||
struct cb_res_checker
|
||||
{
|
||||
bool reason = false;
|
||||
bool response = false;
|
||||
};
|
||||
|
||||
template<bool isRequest>
|
||||
struct cb_checker
|
||||
: public basic_parser<isRequest, cb_checker<isRequest>>
|
||||
, std::conditional<isRequest,
|
||||
cb_req_checker, cb_res_checker>::type
|
||||
|
||||
{
|
||||
bool field = false;
|
||||
bool value = false;
|
||||
bool headers = false;
|
||||
bool body = false;
|
||||
bool complete = false;
|
||||
|
||||
private:
|
||||
friend class basic_parser<isRequest, cb_checker<isRequest>>;
|
||||
|
||||
void on_method(boost::string_ref const&, error_code&)
|
||||
{
|
||||
this->method = true;
|
||||
}
|
||||
void on_uri(boost::string_ref const&, error_code&)
|
||||
{
|
||||
this->uri = true;
|
||||
}
|
||||
void on_reason(boost::string_ref const&, error_code&)
|
||||
{
|
||||
this->reason = true;
|
||||
}
|
||||
void on_request(error_code&)
|
||||
{
|
||||
this->request = true;
|
||||
}
|
||||
void on_response(error_code&)
|
||||
{
|
||||
this->response = true;
|
||||
}
|
||||
void on_field(boost::string_ref const&, error_code&)
|
||||
{
|
||||
field = true;
|
||||
}
|
||||
void on_value(boost::string_ref const&, error_code&)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
int on_headers(error_code&)
|
||||
{
|
||||
headers = true;
|
||||
return 0;
|
||||
}
|
||||
void on_body(boost::string_ref const&, error_code&)
|
||||
{
|
||||
body = true;
|
||||
}
|
||||
void on_complete(error_code&)
|
||||
{
|
||||
complete = true;
|
||||
}
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
static
|
||||
std::string
|
||||
escaped_string(boost::string_ref const& s)
|
||||
@@ -106,6 +180,54 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
testCallbacks()
|
||||
{
|
||||
{
|
||||
cb_checker<true> p;
|
||||
error_code ec;
|
||||
std::string const s =
|
||||
"GET / HTTP/1.1\r\n"
|
||||
"User-Agent: test\r\n"
|
||||
"Content-Length: 1\r\n"
|
||||
"\r\n"
|
||||
"*";
|
||||
p.write(s.data(), s.size(), ec);
|
||||
if( expect(! ec))
|
||||
{
|
||||
expect(p.method);
|
||||
expect(p.uri);
|
||||
expect(p.request);
|
||||
expect(p.field);
|
||||
expect(p.value);
|
||||
expect(p.headers);
|
||||
expect(p.body);
|
||||
expect(p.complete);
|
||||
}
|
||||
}
|
||||
{
|
||||
cb_checker<false> p;
|
||||
error_code ec;
|
||||
std::string const s =
|
||||
"HTTP/1.1 200 OK\r\n"
|
||||
"Server: test\r\n"
|
||||
"Content-Length: 1\r\n"
|
||||
"\r\n"
|
||||
"*";
|
||||
p.write(s.data(), s.size(), ec);
|
||||
if( expect(! ec))
|
||||
{
|
||||
expect(p.reason);
|
||||
expect(p.response);
|
||||
expect(p.field);
|
||||
expect(p.value);
|
||||
expect(p.headers);
|
||||
expect(p.body);
|
||||
expect(p.complete);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Parse the entire input buffer as a valid message,
|
||||
// then parse in two pieces of all possible lengths.
|
||||
//
|
||||
@@ -497,6 +619,7 @@ public:
|
||||
|
||||
void run() override
|
||||
{
|
||||
testCallbacks();
|
||||
testVersion();
|
||||
testFlags();
|
||||
testUpgrade();
|
||||
|
||||
Reference in New Issue
Block a user