Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Yershov <syershov@maps.me>2016-11-21 16:03:24 +0300
committerSergey Yershov <syershov@maps.me>2016-11-21 17:49:42 +0300
commitb49252ca73f0976e4234dada68640c6350c34b81 (patch)
tree61770a65a3bfdf43d80f13bee7d57c51369e4f97 /traffic
parentce474ca724dc6812e3661479f91646c5d81ea512 (diff)
Select correct server path for a traffic file
Diffstat (limited to 'traffic')
-rw-r--r--traffic/traffic_info.cpp33
-rw-r--r--traffic/traffic_info.hpp3
-rw-r--r--traffic/traffic_tests/traffic_info_test.cpp50
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)