diff options
Diffstat (limited to 'rlp.cpp')
-rw-r--r-- | rlp.cpp | 145 |
1 files changed, 74 insertions, 71 deletions
@@ -22,8 +22,11 @@ #include <fstream> #include <sstream> + +// Make sure boost/asio.hpp is included before windows.h. #include <boost/asio.hpp> #include <boost/test/unit_test.hpp> + #include <libdevcore/Log.h> #include <libdevcore/RLP.h> #include <libdevcore/Common.h> @@ -67,76 +70,76 @@ namespace dev testPath += "/BasicTests"; string s = asString(contents(testPath + "/rlptest.json")); - BOOST_REQUIRE_MESSAGE( s.length() > 0, - "Contents of 'rlptest.json' is empty. Have you cloned the 'tests' repo branch develop?"); + BOOST_REQUIRE_MESSAGE( s.length() > 0, + "Contents of 'rlptest.json' is empty. Have you cloned the 'tests' repo branch develop?"); js::read_string(s, v); - } + } static void checkRLPTestCase(js::mObject& o) - { - BOOST_REQUIRE( o.count("in") > 0 ); - BOOST_REQUIRE( o.count("out") > 0 ); - BOOST_REQUIRE(!o["out"].is_null()); - } + { + BOOST_REQUIRE( o.count("in") > 0 ); + BOOST_REQUIRE( o.count("out") > 0 ); + BOOST_REQUIRE(!o["out"].is_null()); + } static void checkRLPAgainstJson(js::mValue& v, RLP& u) { - if ( v.type() == js::str_type ) - { + if ( v.type() == js::str_type ) + { const std::string& expectedText = v.get_str(); - if ( !expectedText.empty() && expectedText.front() == '#' ) - { - // Deal with bigint instead of a raw string - std::string bigIntStr = expectedText.substr(1,expectedText.length()-1); - std::stringstream bintStream(bigIntStr); - bigint val; - bintStream >> val; - BOOST_CHECK( !u.isList() ); + if ( !expectedText.empty() && expectedText.front() == '#' ) + { + // Deal with bigint instead of a raw string + std::string bigIntStr = expectedText.substr(1,expectedText.length()-1); + std::stringstream bintStream(bigIntStr); + bigint val; + bintStream >> val; + BOOST_CHECK( !u.isList() ); BOOST_CHECK( !u.isNull() ); BOOST_CHECK( u ); // operator bool() - BOOST_CHECK(u == val); - } - else - { - BOOST_CHECK( !u.isList() ); - BOOST_CHECK( !u.isNull() ); - BOOST_CHECK( u.isData() ); - BOOST_CHECK( u ); - BOOST_CHECK( u.size() == expectedText.length() ); - BOOST_CHECK(u == expectedText); + BOOST_CHECK(u == val); } - } - else if ( v.type() == js::int_type ) - { - const int expectedValue = v.get_int(); - BOOST_CHECK( u.isInt() ); - BOOST_CHECK( !u.isList() ); + else + { + BOOST_CHECK( !u.isList() ); + BOOST_CHECK( !u.isNull() ); + BOOST_CHECK( u.isData() ); + BOOST_CHECK( u ); + BOOST_CHECK( u.size() == expectedText.length() ); + BOOST_CHECK(u == expectedText); + } + } + else if ( v.type() == js::int_type ) + { + const int expectedValue = v.get_int(); + BOOST_CHECK( u.isInt() ); + BOOST_CHECK( !u.isList() ); BOOST_CHECK( !u.isNull() ); BOOST_CHECK( u ); // operator bool() - BOOST_CHECK(u == expectedValue); - } - else if ( v.type() == js::array_type ) - { - BOOST_CHECK( u.isList() ); - BOOST_CHECK( !u.isInt() ); - BOOST_CHECK( !u.isData() ); - js::mArray& arr = v.get_array(); - BOOST_CHECK( u.itemCount() == arr.size() ); - unsigned i; - for( i = 0; i < arr.size(); i++ ) - { - RLP item = u[i]; - checkRLPAgainstJson(arr[i], item); - } - } - else - { + BOOST_CHECK(u == expectedValue); + } + else if ( v.type() == js::array_type ) + { + BOOST_CHECK( u.isList() ); + BOOST_CHECK( !u.isInt() ); + BOOST_CHECK( !u.isData() ); + js::mArray& arr = v.get_array(); + BOOST_CHECK( u.itemCount() == arr.size() ); + unsigned i; + for( i = 0; i < arr.size(); i++ ) + { + RLP item = u[i]; + checkRLPAgainstJson(arr[i], item); + } + } + else + { BOOST_ERROR("Invalid Javascript object!"); - } - - } + } + + } } -} +} BOOST_AUTO_TEST_SUITE(BasicTests) @@ -155,30 +158,30 @@ BOOST_AUTO_TEST_CASE(rlp_encoding_test) RLPStream s; dev::test::buildRLP(o["in"], s); - std::string expectedText(o["out"].get_str()); - std::transform(expectedText.begin(), expectedText.end(), expectedText.begin(), ::tolower ); + std::string expectedText(o["out"].get_str()); + std::transform(expectedText.begin(), expectedText.end(), expectedText.begin(), ::tolower ); - const std::string& computedText = toHex(s.out()); + const std::string& computedText = toHex(s.out()); - std::stringstream msg; + std::stringstream msg; msg << "Encoding Failed: expected: " << expectedText << std::endl; - msg << " But Computed: " << computedText; + msg << " But Computed: " << computedText; BOOST_CHECK_MESSAGE( - expectedText == computedText, + expectedText == computedText, msg.str() - ); + ); } } BOOST_AUTO_TEST_CASE(rlp_decoding_test) { - cnote << "Testing RLP decoding..."; - // Uses the same test cases as encoding but in reverse. - // We read into the string of hex values, convert to bytes, - // and then compare the output structure to the json of the - // input object. + cnote << "Testing RLP decoding..."; + // Uses the same test cases as encoding but in reverse. + // We read into the string of hex values, convert to bytes, + // and then compare the output structure to the json of the + // input object. js::mValue v; dev::test::getRLPTestCases(v); for (auto& i: v.get_obj()) @@ -186,11 +189,11 @@ BOOST_AUTO_TEST_CASE(rlp_decoding_test) js::mObject& o = i.second.get_obj(); cnote << i.first; dev::test::checkRLPTestCase(o); - + js::mValue& inputData = o["in"]; - bytes payloadToDecode = fromHex(o["out"].get_str()); + bytes payloadToDecode = fromHex(o["out"].get_str()); - RLP payload(payloadToDecode); + RLP payload(payloadToDecode); dev::test::checkRLPAgainstJson(inputData, payload); |