diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a701d6e1..d134b7b76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,7 @@ add_executable(server-tests EXCLUDE_FROM_ALL unit_tests/server_tests.cpp ${Serve # Benchmarks add_executable(rtree-bench EXCLUDE_FROM_ALL src/benchmarks/static_rtree.cpp $) +target_include_directories(engine-tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/unit_tests) target_include_directories(util-tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/unit_tests) target_include_directories(rtree-bench PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/unit_tests) diff --git a/unit_tests/engine/base64.cpp b/unit_tests/engine/base64.cpp index 63af7acc2..f52ab9d95 100644 --- a/unit_tests/engine/base64.cpp +++ b/unit_tests/engine/base64.cpp @@ -1,8 +1,13 @@ #include "engine/base64.hpp" +#include "engine/hint.hpp" +#include "mocks/mock_datafacade.hpp" #include #include +#include +#include + // RFC 4648 "The Base16, Base32, and Base64 Data Encodings" BOOST_AUTO_TEST_SUITE(base64) @@ -20,8 +25,50 @@ BOOST_AUTO_TEST_CASE(rfc4648_test_vectors) BOOST_CHECK_EQUAL(encodeBase64("foobar"), "Zm9vYmFy"); } -BOOST_AUTO_TEST_CASE(encoding) {} +BOOST_AUTO_TEST_CASE(rfc4648_test_vectors_roundtrip) +{ + using namespace osrm::engine; -BOOST_AUTO_TEST_CASE(decoding) {} + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("")), ""); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("f")), "f"); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("fo")), "fo"); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("foo")), "foo"); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("foob")), "foob"); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("fooba")), "fooba"); + BOOST_CHECK_EQUAL(decodeBase64(encodeBase64("foobar")), "foobar"); +} + +BOOST_AUTO_TEST_CASE(hint_encoding_decoding_roundtrip) +{ + using namespace osrm::engine; + + osrm::test::MockDataFacade facade; + + Hint hint{{}, {}, facade.GetCheckSum()}; + + const auto base64 = hint.ToBase64(); + + BOOST_CHECK(0 == std::count(begin(base64), end(base64), '+')); + BOOST_CHECK(0 == std::count(begin(base64), end(base64), '/')); + + const auto decoded = Hint::FromBase64(base64); + + BOOST_CHECK_EQUAL(hint, decoded); +} + +BOOST_AUTO_TEST_CASE(hint_encoding_decoding_roundtrip_bytewise) +{ + using namespace osrm::engine; + + osrm::test::MockDataFacade facade; + + Hint hint{{}, {}, facade.GetCheckSum()}; + + const auto decoded = Hint::FromBase64(hint.ToBase64()); + + BOOST_CHECK(std::equal(reinterpret_cast(&hint), + reinterpret_cast(&hint) + sizeof(Hint), + reinterpret_cast(&decoded))); +} BOOST_AUTO_TEST_SUITE_END()