diff options
author | Sergey Yershov <syershov@maps.me> | 2016-11-21 16:03:24 +0300 |
---|---|---|
committer | Sergey Yershov <syershov@maps.me> | 2016-11-21 17:49:42 +0300 |
commit | b49252ca73f0976e4234dada68640c6350c34b81 (patch) | |
tree | 61770a65a3bfdf43d80f13bee7d57c51369e4f97 /traffic | |
parent | ce474ca724dc6812e3661479f91646c5d81ea512 (diff) |
Select correct server path for a traffic file
Diffstat (limited to 'traffic')
-rw-r--r-- | traffic/traffic_info.cpp | 33 | ||||
-rw-r--r-- | traffic/traffic_info.hpp | 3 | ||||
-rw-r--r-- | traffic/traffic_tests/traffic_info_test.cpp | 50 |
3 files changed, 75 insertions, 11 deletions
diff --git a/traffic/traffic_info.cpp b/traffic/traffic_info.cpp index a77dd9297a..ff62864e68 100644 --- a/traffic/traffic_info.cpp +++ b/traffic/traffic_info.cpp @@ -14,24 +14,41 @@ #include "std/algorithm.hpp" #include "std/string.hpp" +#include "defines.hpp" + #include "private.h" namespace traffic { namespace { - bool ReadRemoteFile(string const & url, vector<uint8_t> & result) { platform::HttpClient request(url); if (!request.RunHttpRequest() || request.ErrorCode() != 200) + { + LOG(LINFO, ("Traffic request", url, "failed. HTTP Error:", request.ErrorCode())); return false; + } string const & response = request.ServerResponse(); result.resize(response.size()); for (size_t i = 0; i < response.size(); ++i) result[i] = static_cast<uint8_t>(response[i]); return true; } + +string MakeRemoteURL(string const & name, uint64_t version) +{ + if (string(TRAFFIC_DATA_BASE_URL).empty()) + return {}; + + stringstream ss; + ss << TRAFFIC_DATA_BASE_URL; + if (version != 0) + ss << version << "/"; + ss << name << TRAFFIC_FILE_EXTENSION; + return ss.str(); +} } // namespace // TrafficInfo::RoadSegmentId ----------------------------------------------------------------- @@ -45,12 +62,17 @@ TrafficInfo::RoadSegmentId::RoadSegmentId(uint32_t fid, uint16_t idx, uint8_t di // TrafficInfo -------------------------------------------------------------------------------- TrafficInfo::TrafficInfo(MwmSet::MwmId const & mwmId) : m_mwmId(mwmId) {} -bool TrafficInfo::ReceiveTrafficData(string const & fileName) +bool TrafficInfo::ReceiveTrafficData() { - if (strlen(TRAFFIC_DATA_BASE_URL) == 0) + auto const & info = m_mwmId.GetInfo(); + if (!info) + return false; + + string const url = MakeRemoteURL(info->GetCountryName(), info->GetVersion()); + + if (url.empty()) return false; - string const url = string(TRAFFIC_DATA_BASE_URL) + string(fileName); vector<uint8_t> contents; if (!ReadRemoteFile(url, contents)) return false; @@ -62,7 +84,8 @@ bool TrafficInfo::ReceiveTrafficData(string const & fileName) } catch (Reader::Exception const & e) { - LOG(LINFO, ("Could not read traffic data received from server.")); + LOG(LINFO, ("Could not read traffic data received from server. MWM:", info->GetCountryName(), + "Version:", info->GetVersion())); return false; } m_coloring.swap(coloring); diff --git a/traffic/traffic_info.hpp b/traffic/traffic_info.hpp index 1db69d7493..b1b5a419c3 100644 --- a/traffic/traffic_info.hpp +++ b/traffic/traffic_info.hpp @@ -59,10 +59,9 @@ public: TrafficInfo(MwmSet::MwmId const & mwmId); // Fetches the latest traffic data from the server and updates the coloring. - // todo(@m, @syershov) Currently a hardcoded path is used. // Construct the url by passing an MwmId. // *NOTE* This method must not be called on the UI thread. - bool ReceiveTrafficData(string const & fileName); + bool ReceiveTrafficData(); // Returns the latest known speed group by a feature segment's id. SpeedGroup GetSpeedGroup(RoadSegmentId const & id) const; diff --git a/traffic/traffic_tests/traffic_info_test.cpp b/traffic/traffic_tests/traffic_info_test.cpp index 3c9af855ea..84d1bcf0cd 100644 --- a/traffic/traffic_tests/traffic_info_test.cpp +++ b/traffic/traffic_tests/traffic_info_test.cpp @@ -3,12 +3,19 @@ #include "traffic/speed_groups.hpp" #include "traffic/traffic_info.hpp" +#include "platform/local_country_file.hpp" +#include "platform/platform_tests_support/writable_dir_changer.hpp" + +#include "indexer/mwm_set.hpp" + #include "std/algorithm.hpp" namespace traffic { namespace { +string const & kMapTestDir = "traffic-test"; + SpeedGroup GetSpeedGroup(TrafficInfo::Coloring const & coloring, TrafficInfo::RoadSegmentId const & fid) { @@ -17,14 +24,49 @@ SpeedGroup GetSpeedGroup(TrafficInfo::Coloring const & coloring, return SpeedGroup::Unknown; return it->second; } + +class TestMwmSet : public MwmSet +{ +protected: + // MwmSet overrides: + unique_ptr<MwmInfo> CreateInfo(platform::LocalCountryFile const & localFile) const override + { + unique_ptr<MwmInfo> info(new MwmInfo()); + info->m_version.SetFormat(version::Format::lastFormat); + return info; + } + + unique_ptr<MwmValueBase> CreateValue(MwmInfo &) const override + { + return make_unique<MwmValueBase>(); + } +}; } // namespace UNIT_TEST(TrafficInfo_RemoteFile) { - string const kTestFileName = "traffic_data"; - - TrafficInfo r; - TEST(r.ReceiveTrafficData(kTestFileName), ()); + WritableDirChanger writableDirChanger(kMapTestDir); + { + TestMwmSet mwmSet; + auto const & r = + mwmSet.Register(platform::LocalCountryFile::MakeForTesting("traffic_data_test")); + TrafficInfo trafficInfo(r.first); + TEST(trafficInfo.ReceiveTrafficData(), ()); + } + { + TestMwmSet mwmSet; + auto const & r = + mwmSet.Register(platform::LocalCountryFile::MakeForTesting("traffic_data_test2")); + TrafficInfo trafficInfo(r.first); + TEST(!trafficInfo.ReceiveTrafficData(), ()); + } + { + TestMwmSet mwmSet; + auto const & r = + mwmSet.Register(platform::LocalCountryFile::MakeForTesting("traffic_data_test", 101010)); + TrafficInfo trafficInfo(r.first); + TEST(trafficInfo.ReceiveTrafficData(), ()); + } } UNIT_TEST(TrafficInfo_Serialization) |