From 0ddeb29c3570e7888e48745ebf9f03000b38023d Mon Sep 17 00:00:00 2001 From: Edward Hennis Date: Fri, 30 Sep 2016 20:37:22 -0400 Subject: [PATCH] Add regression test for multi-buffer JSON message parsing (RIPD-1306) --- src/test/app/Regression_test.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/app/Regression_test.cpp b/src/test/app/Regression_test.cpp index 89d4dbba86..1df46477bc 100644 --- a/src/test/app/Regression_test.cpp +++ b/src/test/app/Regression_test.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -199,12 +200,33 @@ struct Regression_test : public beast::unit_test::suite } } + void testJsonInvalid() + { + using namespace jtx; + using boost::asio::buffer; + testcase("jsonInvalid"); + + std::string const request = R"json({"command":"path_find","id":19,"subcommand":"create","source_account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination_account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination_amount":"1000000","source_currencies":[{"currency":"0000000000000000000000000000000000000000"},{"currency":"0000000000000000000000005553440000000000"},{"currency":"0000000000000000000000004254430000000000"},{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"0000000000000000000000004254430000000000"},{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"0000000000000000000000004254430000000000"},{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"0000000000000000000000004555520000000000"},{"currency":"0000000000000000000000004554480000000000"},{"currency":"0000000000000000000000004A50590000000000"},{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"000000000000000000000000434E590000000000"},{"currency":"0000000000000000000000004742490000000000"},{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"0000000000000000000000004341440000000000"}]})json"; + + + Json::Value jvRequest; + Json::Reader jrReader; + + + std::vector buffers; + buffers.emplace_back(buffer(request, 1024)); + buffers.emplace_back(buffer(request.data() + 1024, request.length() - 1024)); + BEAST_EXPECT(jrReader.parse(jvRequest, buffers) && + jvRequest && jvRequest.isObject()); + } + void run() override { testOffer1(); testLowBalanceDestroy(); testSecp256r1key(); testFeeEscalationAutofill(); + testJsonInvalid(); } };