From 34cc00dc3cb33cfbae06cb0ea4f9d885f136e67d Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Sat, 17 Oct 2020 22:10:32 +0100 Subject: [PATCH] Undo libosrm API break by overloading method response types Removes the breaking libosrm API change by replacing the use of variant response type with method overloading. This has the added benefit of being explicit about the supported response types for each libosrm API method. --- CHANGELOG.md | 2 + example/example.cpp | 9 ++- include/engine/plugins/match.hpp | 2 +- include/engine/plugins/tile.hpp | 2 +- include/engine/plugins/trip.hpp | 2 +- include/engine/plugins/viaroute.hpp | 2 +- include/osrm/osrm.hpp | 18 ++++-- src/benchmarks/match.cpp | 6 +- src/nodejs/node_osrm.cpp | 40 +++++++----- src/osrm/osrm.cpp | 90 +++++++++++++++++++++----- src/server/service/match_service.cpp | 4 +- src/server/service/nearest_service.cpp | 4 +- src/server/service/route_service.cpp | 4 +- src/server/service/table_service.cpp | 4 +- src/server/service/tile_service.cpp | 3 +- src/server/service/trip_service.cpp | 4 +- unit_tests/library/limits.cpp | 30 ++++----- unit_tests/library/match.cpp | 35 +++++----- unit_tests/library/nearest.cpp | 46 ++++++------- unit_tests/library/route.cpp | 73 +++++++++------------ unit_tests/library/table.cpp | 68 +++++++++---------- unit_tests/library/tile.cpp | 28 ++++---- unit_tests/library/trip.cpp | 72 +++++++++------------ 23 files changed, 286 insertions(+), 262 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e53921e..0e8007da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ # Unreleased + - API: + - FIXED: Undo libosrm API break by overloading method response types [#5860](https://github.com/Project-OSRM/osrm-backend/pull/5860) # 5.23.0 - Changes from 5.22.0 diff --git a/example/example.cpp b/example/example.cpp index 108fc622e..6cd6eac82 100644 --- a/example/example.cpp +++ b/example/example.cpp @@ -52,15 +52,14 @@ int main(int argc, const char *argv[]) params.coordinates.push_back({util::FloatLongitude{7.419505}, util::FloatLatitude{43.736825}}); // Response is in JSON format - engine::api::ResultT result = json::Object(); + json::Object result; // Execute routing request, this does the heavy lifting const auto status = osrm.Route(params, result); - auto &json_result = result.get(); if (status == Status::Ok) { - auto &routes = json_result.values["routes"].get(); + auto &routes = result.values["routes"].get(); // Let's just use the first route auto &route = routes.values.at(0).get(); @@ -80,8 +79,8 @@ int main(int argc, const char *argv[]) } else if (status == Status::Error) { - const auto code = json_result.values["code"].get().value; - const auto message = json_result.values["message"].get().value; + const auto code = result.values["code"].get().value; + const auto message = result.values["message"].get().value; std::cout << "Code: " << code << "\n"; std::cout << "Message: " << code << "\n"; diff --git a/include/engine/plugins/match.hpp b/include/engine/plugins/match.hpp index 3717aa718..92a4fe3c1 100644 --- a/include/engine/plugins/match.hpp +++ b/include/engine/plugins/match.hpp @@ -32,7 +32,7 @@ class MatchPlugin : public BasePlugin Status HandleRequest(const RoutingAlgorithmsInterface &algorithms, const api::MatchParameters ¶meters, - osrm::engine::api::ResultT &json_result) const; + osrm::engine::api::ResultT &result) const; private: const int max_locations_map_matching; diff --git a/include/engine/plugins/tile.hpp b/include/engine/plugins/tile.hpp index 90d598d78..bc637c433 100644 --- a/include/engine/plugins/tile.hpp +++ b/include/engine/plugins/tile.hpp @@ -28,7 +28,7 @@ class TilePlugin final : public BasePlugin public: Status HandleRequest(const RoutingAlgorithmsInterface &algorithms, const api::TileParameters ¶meters, - osrm::engine::api::ResultT &pbf_buffer) const; + osrm::engine::api::ResultT &result) const; }; } } diff --git a/include/engine/plugins/trip.hpp b/include/engine/plugins/trip.hpp index ee45729f8..28d8dfa50 100644 --- a/include/engine/plugins/trip.hpp +++ b/include/engine/plugins/trip.hpp @@ -40,7 +40,7 @@ class TripPlugin final : public BasePlugin Status HandleRequest(const RoutingAlgorithmsInterface &algorithms, const api::TripParameters ¶meters, - osrm::engine::api::ResultT &json_result) const; + osrm::engine::api::ResultT &result) const; }; } } diff --git a/include/engine/plugins/viaroute.hpp b/include/engine/plugins/viaroute.hpp index 70642d6d1..84339d572 100644 --- a/include/engine/plugins/viaroute.hpp +++ b/include/engine/plugins/viaroute.hpp @@ -33,7 +33,7 @@ class ViaRoutePlugin final : public BasePlugin Status HandleRequest(const RoutingAlgorithmsInterface &algorithms, const api::RouteParameters &route_parameters, - osrm::engine::api::ResultT &json_result) const; + osrm::engine::api::ResultT &result) const; }; } } diff --git a/include/osrm/osrm.hpp b/include/osrm/osrm.hpp index 74c73f7dd..66199eb15 100644 --- a/include/osrm/osrm.hpp +++ b/include/osrm/osrm.hpp @@ -84,7 +84,8 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, RouteParameters and json::Object */ - Status Route(const RouteParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Route(const RouteParameters ¶meters, json::Object &result) const; + Status Route(const RouteParameters ¶meters, flatbuffers::FlatBufferBuilder &result) const; /** * Distance tables for coordinates. @@ -93,7 +94,8 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, TableParameters and json::Object */ - Status Table(const TableParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Table(const TableParameters ¶meters, json::Object &result) const; + Status Table(const TableParameters ¶meters, flatbuffers::FlatBufferBuilder &result) const; /** * Nearest street segment for coordinate. @@ -102,7 +104,9 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, NearestParameters and json::Object */ - Status Nearest(const NearestParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Nearest(const NearestParameters ¶meters, json::Object &result) const; + Status Nearest(const NearestParameters ¶meters, + flatbuffers::FlatBufferBuilder &result) const; /** * Trip: shortest round trip between coordinates. @@ -111,7 +115,8 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, TripParameters and json::Object */ - Status Trip(const TripParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Trip(const TripParameters ¶meters, json::Object &result) const; + Status Trip(const TripParameters ¶meters, flatbuffers::FlatBufferBuilder &result) const; /** * Match: snaps noisy coordinate traces to the road network @@ -120,7 +125,8 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, MatchParameters and json::Object */ - Status Match(const MatchParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Match(const MatchParameters ¶meters, json::Object &result) const; + Status Match(const MatchParameters ¶meters, flatbuffers::FlatBufferBuilder &result) const; /** * Tile: vector tiles with internal graph representation @@ -129,7 +135,7 @@ class OSRM final * \return Status indicating success for the query or failure * \see Status, TileParameters and json::Object */ - Status Tile(const TileParameters ¶meters, osrm::engine::api::ResultT &result) const; + Status Tile(const TileParameters ¶meters, std::string &result) const; private: std::unique_ptr engine_; diff --git a/src/benchmarks/match.cpp b/src/benchmarks/match.cpp index 7c1b3608b..788ab2f0b 100644 --- a/src/benchmarks/match.cpp +++ b/src/benchmarks/match.cpp @@ -214,11 +214,9 @@ int main(int argc, const char *argv[]) try auto NUM = 100; for (int i = 0; i < NUM; ++i) { - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); - auto &json_result = result.get(); - if (rc != Status::Ok || - json_result.values.at("matchings").get().values.size() != 1) + if (rc != Status::Ok || result.values.at("matchings").get().values.size() != 1) { return EXIT_FAILURE; } diff --git a/src/nodejs/node_osrm.cpp b/src/nodejs/node_osrm.cpp index c5ca5c9c1..ca771a49e 100644 --- a/src/nodejs/node_osrm.cpp +++ b/src/nodejs/node_osrm.cpp @@ -151,20 +151,18 @@ inline void async(const Nan::FunctionCallbackInfo &info, void Execute() override try { - osrm::engine::api::ResultT r; - r = osrm::util::json::Object(); + osrm::json::Object r; const auto status = ((*osrm).*(service))(*params, r); - auto json_result = r.get(); - ParseResult(status, json_result); + ParseResult(status, r); if (pluginParams.renderJSONToBuffer) { std::ostringstream buf; - osrm::util::json::render(buf, json_result); + osrm::util::json::render(buf, r); result = buf.str(); } else { - result = json_result; + result = r; } } catch (const std::exception &e) @@ -232,10 +230,8 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, void Execute() override try { - result = std::string(); const auto status = ((*osrm).*(service))(*params, result); - auto str_result = result.get(); - ParseResult(status, str_result); + ParseResult(status, result); } catch (const std::exception &e) { @@ -247,8 +243,7 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, Nan::HandleScope scope; const constexpr auto argc = 2u; - auto str_result = result.get(); - v8::Local argv[argc] = {Nan::Null(), render(str_result)}; + v8::Local argv[argc] = {Nan::Null(), render(result)}; callback->Call(argc, argv); } @@ -259,7 +254,7 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, const ParamPtr params; const PluginParameters pluginParams; - osrm::engine::api::ResultT result; + std::string result; }; auto *callback = new Nan::Callback{info[info.Length() - 1].As()}; @@ -304,7 +299,9 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, // clang-format on NAN_METHOD(Engine::route) // { - async(info, &argumentsToRouteParameter, &osrm::OSRM::Route, true); + osrm::engine::Status (osrm::OSRM::*route_fn)(const osrm::RouteParameters &, + osrm::json::Object &) const = &osrm::OSRM::Route; + async(info, &argumentsToRouteParameter, route_fn, true); } // clang-format off @@ -344,7 +341,10 @@ NAN_METHOD(Engine::route) // // clang-format on NAN_METHOD(Engine::nearest) // { - async(info, &argumentsToNearestParameter, &osrm::OSRM::Nearest, false); + + osrm::engine::Status (osrm::OSRM::*nearest_fn)( + const osrm::NearestParameters &, osrm::json::Object &) const = &osrm::OSRM::Nearest; + async(info, &argumentsToNearestParameter, nearest_fn, false); } // clang-format off @@ -396,7 +396,9 @@ NAN_METHOD(Engine::nearest) // // clang-format on NAN_METHOD(Engine::table) // { - async(info, &argumentsToTableParameter, &osrm::OSRM::Table, true); + osrm::engine::Status (osrm::OSRM::*table_fn)(const osrm::TableParameters &, + osrm::json::Object &) const = &osrm::OSRM::Table; + async(info, &argumentsToTableParameter, table_fn, true); } // clang-format off @@ -481,7 +483,9 @@ NAN_METHOD(Engine::tile) // clang-format on NAN_METHOD(Engine::match) // { - async(info, &argumentsToMatchParameter, &osrm::OSRM::Match, true); + osrm::engine::Status (osrm::OSRM::*match_fn)(const osrm::MatchParameters &, + osrm::json::Object &) const = &osrm::OSRM::Match; + async(info, &argumentsToMatchParameter, match_fn, true); } // clang-format off @@ -551,7 +555,9 @@ NAN_METHOD(Engine::match) // // clang-format on NAN_METHOD(Engine::trip) // { - async(info, &argumentsToTripParameter, &osrm::OSRM::Trip, true); + osrm::engine::Status (osrm::OSRM::*trip_fn)(const osrm::TripParameters &, osrm::json::Object &) + const = &osrm::OSRM::Trip; + async(info, &argumentsToTripParameter, trip_fn, true); } /** diff --git a/src/osrm/osrm.cpp b/src/osrm/osrm.cpp index 8658e264f..1994b7082 100644 --- a/src/osrm/osrm.cpp +++ b/src/osrm/osrm.cpp @@ -56,40 +56,96 @@ OSRM &OSRM::operator=(OSRM &&) noexcept = default; // Forward to implementation -engine::Status OSRM::Route(const engine::api::RouteParameters ¶ms, - osrm::engine::api::ResultT &result) const +Status OSRM::Route(const engine::api::RouteParameters ¶ms, json::Object &json_result) const { - return engine_->Route(params, result); + osrm::engine::api::ResultT result = json::Object(); + auto status = engine_->Route(params, result); + json_result = std::move(result.get()); + return status; } -engine::Status OSRM::Table(const engine::api::TableParameters ¶ms, - osrm::engine::api::ResultT &result) const +Status OSRM::Route(const RouteParameters ¶ms, flatbuffers::FlatBufferBuilder &fb_result) const { - return engine_->Table(params, result); + osrm::engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + auto status = engine_->Route(params, result); + fb_result = std::move(result.get()); + return status; } -engine::Status OSRM::Nearest(const engine::api::NearestParameters ¶ms, - osrm::engine::api::ResultT &result) const +Status OSRM::Table(const engine::api::TableParameters ¶ms, json::Object &json_result) const { - return engine_->Nearest(params, result); + osrm::engine::api::ResultT result = json::Object(); + auto status = engine_->Table(params, result); + json_result = std::move(result.get()); + return status; +} + +Status OSRM::Table(const TableParameters ¶meters, + flatbuffers::FlatBufferBuilder &fb_result) const +{ + osrm::engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + auto status = engine_->Table(parameters, result); + fb_result = std::move(result.get()); + return status; +} + +Status OSRM::Nearest(const engine::api::NearestParameters ¶ms, json::Object &json_result) const +{ + osrm::engine::api::ResultT result = json::Object(); + auto status = engine_->Nearest(params, result); + json_result = std::move(result.get()); + return status; +} + +Status OSRM::Nearest(const NearestParameters ¶meters, + flatbuffers::FlatBufferBuilder &fb_result) const +{ + osrm::engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + auto status = engine_->Nearest(parameters, result); + fb_result = std::move(result.get()); + return status; +} + +Status OSRM::Trip(const engine::api::TripParameters ¶ms, json::Object &json_result) const +{ + osrm::engine::api::ResultT result = json::Object(); + auto status = engine_->Trip(params, result); + json_result = std::move(result.get()); + return status; } engine::Status OSRM::Trip(const engine::api::TripParameters ¶ms, - osrm::engine::api::ResultT &result) const + flatbuffers::FlatBufferBuilder &fb_result) const { - return engine_->Trip(params, result); + osrm::engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + auto status = engine_->Trip(params, result); + fb_result = std::move(result.get()); + return status; } -engine::Status OSRM::Match(const engine::api::MatchParameters ¶ms, - osrm::engine::api::ResultT &result) const +Status OSRM::Match(const engine::api::MatchParameters ¶ms, json::Object &json_result) const { - return engine_->Match(params, result); + osrm::engine::api::ResultT result = json::Object(); + auto status = engine_->Match(params, result); + json_result = std::move(result.get()); + return status; } -engine::Status OSRM::Tile(const engine::api::TileParameters ¶ms, - osrm::engine::api::ResultT &result) const +Status OSRM::Match(const MatchParameters ¶meters, + flatbuffers::FlatBufferBuilder &fb_result) const { - return engine_->Tile(params, result); + osrm::engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + auto status = engine_->Match(parameters, result); + fb_result = std::move(result.get()); + return status; +} + +Status OSRM::Tile(const engine::api::TileParameters ¶ms, std::string &str_result) const +{ + osrm::engine::api::ResultT result = std::string(); + auto status = engine_->Tile(params, result); + str_result = std::move(result.get()); + return status; } } // ns osrm diff --git a/src/server/service/match_service.cpp b/src/server/service/match_service.cpp index aca391bf4..d697df8df 100644 --- a/src/server/service/match_service.cpp +++ b/src/server/service/match_service.cpp @@ -74,9 +74,11 @@ engine::Status MatchService::RunQuery(std::size_t prefix_length, if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { result = flatbuffers::FlatBufferBuilder(); + auto &fb_result = result.get(); + return BaseService::routing_machine.Match(*parameters, fb_result); } } - return BaseService::routing_machine.Match(*parameters, result); + return BaseService::routing_machine.Match(*parameters, json_result); } } } diff --git a/src/server/service/nearest_service.cpp b/src/server/service/nearest_service.cpp index ca9811719..d23462f5c 100644 --- a/src/server/service/nearest_service.cpp +++ b/src/server/service/nearest_service.cpp @@ -68,9 +68,11 @@ engine::Status NearestService::RunQuery(std::size_t prefix_length, if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { result = flatbuffers::FlatBufferBuilder(); + auto &fb_result = result.get(); + return BaseService::routing_machine.Nearest(*parameters, fb_result); } } - return BaseService::routing_machine.Nearest(*parameters, result); + return BaseService::routing_machine.Nearest(*parameters, json_result); } } } diff --git a/src/server/service/route_service.cpp b/src/server/service/route_service.cpp index 9459e7bbf..b897cf1dc 100644 --- a/src/server/service/route_service.cpp +++ b/src/server/service/route_service.cpp @@ -72,9 +72,11 @@ engine::Status RouteService::RunQuery(std::size_t prefix_length, if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { result = flatbuffers::FlatBufferBuilder(); + auto &fb_result = result.get(); + return BaseService::routing_machine.Route(*parameters, fb_result); } } - return BaseService::routing_machine.Route(*parameters, result); + return BaseService::routing_machine.Route(*parameters, json_result); } } } diff --git a/src/server/service/table_service.cpp b/src/server/service/table_service.cpp index b2c1f6548..8b388dccc 100644 --- a/src/server/service/table_service.cpp +++ b/src/server/service/table_service.cpp @@ -103,9 +103,11 @@ engine::Status TableService::RunQuery(std::size_t prefix_length, if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { result = flatbuffers::FlatBufferBuilder(); + auto &fb_result = result.get(); + return BaseService::routing_machine.Table(*parameters, fb_result); } } - return BaseService::routing_machine.Table(*parameters, result); + return BaseService::routing_machine.Table(*parameters, json_result); } } } diff --git a/src/server/service/tile_service.cpp b/src/server/service/tile_service.cpp index bdf7996d7..e832cd550 100644 --- a/src/server/service/tile_service.cpp +++ b/src/server/service/tile_service.cpp @@ -45,7 +45,8 @@ engine::Status TileService::RunQuery(std::size_t prefix_length, BOOST_ASSERT(parameters->IsValid()); result = std::string(); - return BaseService::routing_machine.Tile(*parameters, result); + auto &str_result = result.get(); + return BaseService::routing_machine.Tile(*parameters, str_result); } } } diff --git a/src/server/service/trip_service.cpp b/src/server/service/trip_service.cpp index 20af63c12..64afa23da 100644 --- a/src/server/service/trip_service.cpp +++ b/src/server/service/trip_service.cpp @@ -76,9 +76,11 @@ engine::Status TripService::RunQuery(std::size_t prefix_length, if (parameters->format == engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { result = flatbuffers::FlatBufferBuilder(); + auto &fb_result = result.get(); + return BaseService::routing_machine.Trip(*parameters, fb_result); } } - return BaseService::routing_machine.Trip(*parameters, result); + return BaseService::routing_machine.Trip(*parameters, json_result); } } } diff --git a/unit_tests/library/limits.cpp b/unit_tests/library/limits.cpp index ea6182a7d..ecb5724c3 100644 --- a/unit_tests/library/limits.cpp +++ b/unit_tests/library/limits.cpp @@ -38,15 +38,14 @@ BOOST_AUTO_TEST_CASE(test_trip_limits) params.coordinates.emplace_back(getZeroCoordinate()); params.coordinates.emplace_back(getZeroCoordinate()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } @@ -66,15 +65,14 @@ BOOST_AUTO_TEST_CASE(test_route_limits) params.coordinates.emplace_back(getZeroCoordinate()); params.coordinates.emplace_back(getZeroCoordinate()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } @@ -94,15 +92,14 @@ BOOST_AUTO_TEST_CASE(test_table_limits) params.coordinates.emplace_back(getZeroCoordinate()); params.coordinates.emplace_back(getZeroCoordinate()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } @@ -122,15 +119,14 @@ BOOST_AUTO_TEST_CASE(test_match_coordinate_limits) params.coordinates.emplace_back(getZeroCoordinate()); params.coordinates.emplace_back(getZeroCoordinate()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } @@ -155,15 +151,14 @@ BOOST_AUTO_TEST_CASE(test_match_radiuses_limits) params.radiuses.emplace_back(3.0); params.radiuses.emplace_back(2.0); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } @@ -182,15 +177,14 @@ BOOST_AUTO_TEST_CASE(test_nearest_limits) params.coordinates.emplace_back(getZeroCoordinate()); params.number_of_results = 10000; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_CHECK(rc == Status::Error); // Make sure we're not accidentally hitting a guard code path before - auto &json_result = result.get(); - const auto code = json_result.values["code"].get().value; + const auto code = result.values["code"].get().value; BOOST_CHECK(code == "TooBig"); // per the New-Server API spec } diff --git a/unit_tests/library/match.cpp b/unit_tests/library/match.cpp index 7505a2adf..007d08adc 100644 --- a/unit_tests/library/match.cpp +++ b/unit_tests/library/match.cpp @@ -25,19 +25,18 @@ BOOST_AUTO_TEST_CASE(test_match) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &tracepoints = json_result.values.at("tracepoints").get().values; + const auto &tracepoints = result.values.at("tracepoints").get().values; BOOST_CHECK_EQUAL(tracepoints.size(), params.coordinates.size()); - const auto &matchings = json_result.values.at("matchings").get().values; + const auto &matchings = result.values.at("matchings").get().values; const auto &number_of_matchings = matchings.size(); for (const auto &waypoint : tracepoints) { @@ -76,16 +75,15 @@ BOOST_AUTO_TEST_CASE(test_match_skip_waypoints) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - BOOST_CHECK(json_result.values.find("tracepoints") == json_result.values.end()); + BOOST_CHECK(result.values.find("tracepoints") == result.values.end()); } BOOST_AUTO_TEST_CASE(test_match_split) @@ -98,19 +96,18 @@ BOOST_AUTO_TEST_CASE(test_match_split) params.coordinates = get_split_trace_locations(); params.timestamps = {1, 2, 1700, 1800}; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Match(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &tracepoints = json_result.values.at("tracepoints").get().values; + const auto &tracepoints = result.values.at("tracepoints").get().values; BOOST_CHECK_EQUAL(tracepoints.size(), params.coordinates.size()); - const auto &matchings = json_result.values.at("matchings").get().values; + const auto &matchings = result.values.at("matchings").get().values; const auto &number_of_matchings = matchings.size(); BOOST_CHECK_EQUAL(number_of_matchings, 2); std::size_t current_matchings_index = 0, expected_waypoint_index = 0; @@ -152,13 +149,12 @@ BOOST_AUTO_TEST_CASE(test_match_fb_serialization) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Match(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); @@ -194,13 +190,12 @@ BOOST_AUTO_TEST_CASE(test_match_fb_serialization_skip_waypoints) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Match(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); diff --git a/unit_tests/library/nearest.cpp b/unit_tests/library/nearest.cpp index 39d134f99..7a1e03b53 100644 --- a/unit_tests/library/nearest.cpp +++ b/unit_tests/library/nearest.cpp @@ -23,15 +23,14 @@ BOOST_AUTO_TEST_CASE(test_nearest_response) NearestParameters params; params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK(!waypoints.empty()); // the dataset has at least one nearest coordinate for (const auto &waypoint : waypoints) @@ -52,15 +51,14 @@ BOOST_AUTO_TEST_CASE(test_nearest_response_skip_waypoints) params.skip_waypoints = true; params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - BOOST_CHECK(json_result.values.find("waypoints") == json_result.values.end()); + BOOST_CHECK(result.values.find("waypoints") == result.values.end()); } BOOST_AUTO_TEST_CASE(test_nearest_response_no_coordinates) @@ -71,12 +69,11 @@ BOOST_AUTO_TEST_CASE(test_nearest_response_no_coordinates) NearestParameters params; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Error); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "InvalidOptions"); } @@ -90,12 +87,11 @@ BOOST_AUTO_TEST_CASE(test_nearest_response_multiple_coordinates) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Error); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "InvalidOptions"); } @@ -111,15 +107,14 @@ BOOST_AUTO_TEST_CASE(test_nearest_response_for_location_in_small_component) params.coordinates.push_back(locations.at(0)); params.number_of_results = 3; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK(!waypoints.empty()); for (const auto &waypoint : waypoints) @@ -147,12 +142,11 @@ BOOST_AUTO_TEST_CASE(test_nearest_fb_serialization) NearestParameters params; params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->waypoints() != nullptr); @@ -177,12 +171,11 @@ BOOST_AUTO_TEST_CASE(test_nearest_fb_serialization_skip_waypoints) params.skip_waypoints = true; params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->waypoints() == nullptr); @@ -196,12 +189,11 @@ BOOST_AUTO_TEST_CASE(test_nearest_fb_error) NearestParameters params; - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Nearest(params, result); BOOST_REQUIRE(rc == Status::Error); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(fb->error()); BOOST_CHECK_EQUAL(fb->code()->code()->str(), "InvalidOptions"); } diff --git a/unit_tests/library/route.cpp b/unit_tests/library/route.cpp index 3a5979fdb..bb03eaefe 100644 --- a/unit_tests/library/route.cpp +++ b/unit_tests/library/route.cpp @@ -28,13 +28,12 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_fixture) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); // unset snapping dependent hint - for (auto &itr : json_result.values["waypoints"].get().values) + for (auto &itr : result.values["waypoints"].get().values) { // Hint values aren't stable, so blank it out itr.get().values["hint"] = ""; @@ -113,7 +112,7 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_fixture) }}}}}}}}}}}}}}}}}; - CHECK_EQUAL_JSON(reference, json_result); + CHECK_EQUAL_JSON(reference, result); } BOOST_AUTO_TEST_CASE(test_route_same_coordinates) @@ -128,15 +127,14 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK(waypoints.size() == params.coordinates.size()); for (const auto &waypoint : waypoints) @@ -157,7 +155,7 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates) BOOST_CHECK(!hint.empty()); } - const auto &routes = json_result.values.at("routes").get().values; + const auto &routes = result.values.at("routes").get().values; BOOST_REQUIRE_GT(routes.size(), 0); for (const auto &route : routes) @@ -282,17 +280,16 @@ BOOST_AUTO_TEST_CASE(test_route_same_coordinates_no_waypoints) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - BOOST_CHECK(json_result.values.find("waypoints") == json_result.values.end()); + BOOST_CHECK(result.values.find("waypoints") == result.values.end()); - const auto &routes = json_result.values.at("routes").get().values; + const auto &routes = result.values.at("routes").get().values; BOOST_REQUIRE_GT(routes.size(), 0); for (const auto &route : routes) @@ -329,15 +326,14 @@ BOOST_AUTO_TEST_CASE(test_route_response_for_locations_in_small_component) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); for (const auto &waypoint : waypoints) @@ -365,15 +361,14 @@ BOOST_AUTO_TEST_CASE(test_route_response_for_locations_in_big_component) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); for (const auto &waypoint : waypoints) @@ -403,15 +398,14 @@ BOOST_AUTO_TEST_CASE(test_route_response_for_locations_across_components) params.coordinates.push_back(small_component.at(1)); params.coordinates.push_back(big_component.at(1)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); for (const auto &waypoint : waypoints) @@ -438,12 +432,11 @@ BOOST_AUTO_TEST_CASE(test_route_user_disables_generating_hints) params.coordinates.push_back(get_dummy_location()); params.generate_hints = false; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - for (auto waypoint : json_result.values["waypoints"].get().values) + for (auto waypoint : result.values["waypoints"].get().values) BOOST_CHECK_EQUAL(waypoint.get().values.count("hint"), 0); } @@ -460,12 +453,11 @@ BOOST_AUTO_TEST_CASE(speed_annotation_matches_duration_and_distance) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto &routes = json_result.values["routes"].get().values; + const auto &routes = result.values["routes"].get().values; const auto &legs = routes[0].get().values.at("legs").get().values; const auto &annotation = legs[0].get().values.at("annotation").get(); @@ -501,15 +493,14 @@ BOOST_AUTO_TEST_CASE(test_manual_setting_of_annotations_property) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - auto annotations = json_result.values["routes"] + auto annotations = result.values["routes"] .get() .values[0] .get() @@ -535,12 +526,11 @@ BOOST_AUTO_TEST_CASE(test_route_serialize_fb) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->waypoints() != nullptr); @@ -634,12 +624,11 @@ BOOST_AUTO_TEST_CASE(test_route_serialize_fb_skip_waypoints) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Route(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->waypoints() == nullptr); diff --git a/unit_tests/library/table.cpp b/unit_tests/library/table.cpp index 26fbdec78..3ec159f91 100644 --- a/unit_tests/library/table.cpp +++ b/unit_tests/library/table.cpp @@ -28,18 +28,17 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix) params.destinations.push_back(2); params.annotations = TableParameters::AnnotationsType::All; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); // check that returned durations error is expected size and proportions // this test expects a 1x1 matrix - const auto &durations_array = json_result.values.at("durations").get().values; + const auto &durations_array = result.values.at("durations").get().values; BOOST_CHECK_EQUAL(durations_array.size(), params.sources.size()); for (unsigned int i = 0; i < durations_array.size(); i++) { @@ -50,7 +49,7 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix) // check that returned distances error is expected size and proportions // this test expects a 1x1 matrix - const auto &distances_array = json_result.values.at("distances").get().values; + const auto &distances_array = result.values.at("distances").get().values; BOOST_CHECK_EQUAL(distances_array.size(), params.sources.size()); for (unsigned int i = 0; i < distances_array.size(); i++) { @@ -60,15 +59,14 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix) } // check destinations array of waypoint objects - const auto &destinations_array = - json_result.values.at("destinations").get().values; + const auto &destinations_array = result.values.at("destinations").get().values; BOOST_CHECK_EQUAL(destinations_array.size(), params.destinations.size()); for (const auto &destination : destinations_array) { BOOST_CHECK(waypoint_check(destination)); } // check sources array of waypoint objects - const auto &sources_array = json_result.values.at("sources").get().values; + const auto &sources_array = result.values.at("sources").get().values; BOOST_CHECK_EQUAL(sources_array.size(), params.sources.size()); for (const auto &source : sources_array) { @@ -91,18 +89,17 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix_no_waypo params.destinations.push_back(2); params.annotations = TableParameters::AnnotationsType::All; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); // check that returned durations error is expected size and proportions // this test expects a 1x1 matrix - const auto &durations_array = json_result.values.at("durations").get().values; + const auto &durations_array = result.values.at("durations").get().values; BOOST_CHECK_EQUAL(durations_array.size(), params.sources.size()); for (unsigned int i = 0; i < durations_array.size(); i++) { @@ -113,7 +110,7 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix_no_waypo // check that returned distances error is expected size and proportions // this test expects a 1x1 matrix - const auto &distances_array = json_result.values.at("distances").get().values; + const auto &distances_array = result.values.at("distances").get().values; BOOST_CHECK_EQUAL(distances_array.size(), params.sources.size()); for (unsigned int i = 0; i < distances_array.size(); i++) { @@ -123,8 +120,8 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_one_dest_matrix_no_waypo } // waypoint arrays should be missing - BOOST_CHECK(json_result.values.find("destinations") == json_result.values.end()); - BOOST_CHECK(json_result.values.find("sources") == json_result.values.end()); + BOOST_CHECK(result.values.find("destinations") == result.values.end()); + BOOST_CHECK(result.values.find("sources") == result.values.end()); } BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_matrix) @@ -138,18 +135,17 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_matrix) params.coordinates.push_back(get_dummy_location()); params.coordinates.push_back(get_dummy_location()); params.sources.push_back(0); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); // check that returned durations error is expected size and proportions // this test expects a 1x3 matrix - const auto &durations_array = json_result.values.at("durations").get().values; + const auto &durations_array = result.values.at("durations").get().values; BOOST_CHECK_EQUAL(durations_array.size(), params.sources.size()); for (unsigned int i = 0; i < durations_array.size(); i++) { @@ -159,15 +155,14 @@ BOOST_AUTO_TEST_CASE(test_table_three_coords_one_source_matrix) params.sources.size() * params.coordinates.size()); } // check destinations array of waypoint objects - const auto &destinations_array = - json_result.values.at("destinations").get().values; + const auto &destinations_array = result.values.at("destinations").get().values; BOOST_CHECK_EQUAL(destinations_array.size(), params.coordinates.size()); for (const auto &destination : destinations_array) { BOOST_CHECK(waypoint_check(destination)); } // check sources array of waypoint objects - const auto &sources_array = json_result.values.at("sources").get().values; + const auto &sources_array = result.values.at("sources").get().values; BOOST_CHECK_EQUAL(sources_array.size(), params.sources.size()); for (const auto &source : sources_array) { @@ -187,18 +182,17 @@ BOOST_AUTO_TEST_CASE(test_table_three_coordinates_matrix) params.coordinates.push_back(get_dummy_location()); params.annotations = TableParameters::AnnotationsType::Duration; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); // check that returned durations error is expected size and proportions // this test expects a 3x3 matrix - const auto &durations_array = json_result.values.at("durations").get().values; + const auto &durations_array = result.values.at("durations").get().values; BOOST_CHECK_EQUAL(durations_array.size(), params.coordinates.size()); for (unsigned int i = 0; i < durations_array.size(); i++) { @@ -206,13 +200,12 @@ BOOST_AUTO_TEST_CASE(test_table_three_coordinates_matrix) BOOST_CHECK_EQUAL(durations_matrix[i].get().value, 0); BOOST_CHECK_EQUAL(durations_matrix.size(), params.coordinates.size()); } - const auto &destinations_array = - json_result.values.at("destinations").get().values; + const auto &destinations_array = result.values.at("destinations").get().values; for (const auto &destination : destinations_array) { BOOST_CHECK(waypoint_check(destination)); } - const auto &sources_array = json_result.values.at("sources").get().values; + const auto &sources_array = result.values.at("sources").get().values; BOOST_CHECK_EQUAL(sources_array.size(), params.coordinates.size()); for (const auto &source : sources_array) { @@ -234,15 +227,14 @@ BOOST_AUTO_TEST_CASE(test_table_no_segment_for_some_coordinates) params.radiuses.push_back(boost::make_optional(0.)); params.radiuses.push_back(boost::none); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Table(params, result); - auto &json_result = result.get(); BOOST_CHECK(rc == Status::Error); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "NoSegment"); - const auto message = json_result.values.at("message").get().value; + const auto message = result.values.at("message").get().value; BOOST_CHECK_EQUAL(message, "Could not find a matching segment for coordinate 0"); } @@ -260,14 +252,13 @@ BOOST_AUTO_TEST_CASE(test_table_serialiaze_fb) params.destinations.push_back(2); params.annotations = TableParameters::AnnotationsType::All; - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Table(params, result); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->table() != nullptr); @@ -314,14 +305,13 @@ BOOST_AUTO_TEST_CASE(test_table_serialiaze_fb_no_waypoints) params.destinations.push_back(2); params.annotations = TableParameters::AnnotationsType::All; - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Table(params, result); BOOST_CHECK(rc == Status::Ok || rc == Status::Error); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); BOOST_CHECK(fb->table() != nullptr); diff --git a/unit_tests/library/tile.cpp b/unit_tests/library/tile.cpp index 9fcff9904..0172c5067 100644 --- a/unit_tests/library/tile.cpp +++ b/unit_tests/library/tile.cpp @@ -160,15 +160,14 @@ void validate_tile(const osrm::OSRM &osrm) // This tile should contain most of monaco TileParameters params{17059, 11948, 15}; - engine::api::ResultT result = std::string(); + std::string result; const auto rc = osrm.Tile(params, result); BOOST_CHECK(rc == Status::Ok); - auto &str_result = result.get(); - BOOST_CHECK(str_result.size() > 114000); + BOOST_CHECK(result.size() > 114000); - vtzero::vector_tile tile{str_result}; + vtzero::vector_tile tile{result}; validate_feature_layer(tile.next_layer()); validate_turn_layer(tile.next_layer()); @@ -207,14 +206,13 @@ void test_tile_turns(const osrm::OSRM &osrm) // Small tile where we can test all the values TileParameters params{272953, 191177, 19}; - engine::api::ResultT result = std::string(); + std::string result; const auto rc = osrm.Tile(params, result); BOOST_CHECK(rc == Status::Ok); - auto &str_result = result.get(); - BOOST_CHECK_GT(str_result.size(), 128); + BOOST_CHECK_GT(result.size(), 128); - vtzero::vector_tile tile{str_result}; + vtzero::vector_tile tile{result}; tile.next_layer(); auto layer = tile.next_layer(); @@ -349,14 +347,13 @@ void test_tile_speeds(const osrm::OSRM &osrm) // TileParameters params{272953, 191177, 19}; TileParameters params{136477, 95580, 18}; - engine::api::ResultT result = std::string(); + std::string result; const auto rc = osrm.Tile(params, result); BOOST_CHECK(rc == Status::Ok); - auto &str_result = result.get(); - BOOST_CHECK_GT(str_result.size(), 128); + BOOST_CHECK_GT(result.size(), 128); - vtzero::vector_tile tile{str_result}; + vtzero::vector_tile tile{result}; auto layer = tile.next_layer(); BOOST_CHECK_EQUAL(to_string(layer.name()), "speeds"); @@ -430,14 +427,13 @@ void test_tile_nodes(const osrm::OSRM &osrm) // Small tile where we can test all the values TileParameters params{272953, 191177, 19}; - engine::api::ResultT result = std::string(); + std::string result; const auto rc = osrm.Tile(params, result); BOOST_CHECK(rc == Status::Ok); - auto &str_result = result.get(); - BOOST_CHECK_GT(str_result.size(), 128); + BOOST_CHECK_GT(result.size(), 128); - vtzero::vector_tile tile{str_result}; + vtzero::vector_tile tile{result}; tile.next_layer(); tile.next_layer(); diff --git a/unit_tests/library/trip.cpp b/unit_tests/library/trip.cpp index 043d5a1be..6f6ed13fa 100644 --- a/unit_tests/library/trip.cpp +++ b/unit_tests/library/trip.cpp @@ -26,18 +26,17 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_for_locations_in_small_component) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); - const auto &trips = json_result.values.at("trips").get().values; + const auto &trips = result.values.at("trips").get().values; BOOST_CHECK_EQUAL(trips.size(), 1); for (const auto &waypoint : waypoints) @@ -70,15 +69,14 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_for_locations_in_small_component_sk params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - BOOST_CHECK(json_result.values.find("waypoints") == json_result.values.end()); + BOOST_CHECK(result.values.find("waypoints") == result.values.end()); } BOOST_AUTO_TEST_CASE(test_roundtrip_response_for_locations_in_big_component) @@ -93,18 +91,17 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_for_locations_in_big_component) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); - const auto &trips = json_result.values.at("trips").get().values; + const auto &trips = result.values.at("trips").get().values; BOOST_CHECK_EQUAL(trips.size(), 1); for (const auto &waypoint : waypoints) @@ -138,18 +135,17 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_for_locations_across_components) params.coordinates.push_back(small.at(1)); params.coordinates.push_back(big.at(1)); - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); - const auto &trips = json_result.values.at("trips").get().values; + const auto &trips = result.values.at("trips").get().values; BOOST_CHECK_EQUAL(trips.size(), 1); // ^ First snapping, then SCC decomposition (see plugins/trip.cpp). Therefore only a single // trip. @@ -187,18 +183,17 @@ BOOST_AUTO_TEST_CASE(test_tfse_1) params.destination = TripParameters::DestinationType::Last; params.roundtrip = false; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); - const auto &trips = json_result.values.at("trips").get().values; + const auto &trips = result.values.at("trips").get().values; BOOST_CHECK_EQUAL(trips.size(), 1); for (const auto &waypoint : waypoints) @@ -234,18 +229,17 @@ BOOST_AUTO_TEST_CASE(test_tfse_2) params.destination = TripParameters::DestinationType::Last; params.roundtrip = false; - engine::api::ResultT result = json::Object(); + json::Object result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &json_result = result.get(); - const auto code = json_result.values.at("code").get().value; + const auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); - const auto &waypoints = json_result.values.at("waypoints").get().values; + const auto &waypoints = result.values.at("waypoints").get().values; BOOST_CHECK_EQUAL(waypoints.size(), params.coordinates.size()); - const auto &trips = json_result.values.at("trips").get().values; + const auto &trips = result.values.at("trips").get().values; BOOST_CHECK_EQUAL(trips.size(), 1); for (const auto &waypoint : waypoints) @@ -275,22 +269,20 @@ void ResetParams(const Locations &locations, osrm::TripParameters ¶ms) void CheckNotImplemented(const osrm::OSRM &osrm, osrm::TripParameters ¶ms) { using namespace osrm; - engine::api::ResultT result = json::Object(); + json::Object result; auto rc = osrm.Trip(params, result); BOOST_REQUIRE(rc == osrm::Status::Error); - auto &json_result = result.get(); - auto code = json_result.values.at("code").get().value; + auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "NotImplemented"); } void CheckOk(const osrm::OSRM &osrm, osrm::TripParameters ¶ms) { using namespace osrm; - engine::api::ResultT result = json::Object(); + json::Object result; auto rc = osrm.Trip(params, result); BOOST_REQUIRE(rc == osrm::Status::Ok); - auto &json_result = result.get(); - auto code = json_result.values.at("code").get().value; + auto code = result.values.at("code").get().value; BOOST_CHECK_EQUAL(code, "Ok"); } @@ -458,12 +450,11 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_fb_serialization) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error()); @@ -502,12 +493,11 @@ BOOST_AUTO_TEST_CASE(test_roundtrip_response_fb_serialization_skip_waypoints) params.coordinates.push_back(locations.at(1)); params.coordinates.push_back(locations.at(2)); - engine::api::ResultT result = flatbuffers::FlatBufferBuilder(); + flatbuffers::FlatBufferBuilder result; const auto rc = osrm.Trip(params, result); BOOST_CHECK(rc == Status::Ok); - auto &fb_result = result.get(); - auto fb = engine::api::fbresult::GetFBResult(fb_result.GetBufferPointer()); + auto fb = engine::api::fbresult::GetFBResult(result.GetBufferPointer()); BOOST_CHECK(!fb->error());