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:
authorДобрый Ээх <bukharaev@gmail.com>2016-10-14 11:36:10 +0300
committerДобрый Ээх <bukharaev@gmail.com>2016-10-19 15:51:02 +0300
commit5666583532d208c05d6194d1cb28a5b61ad9d75c (patch)
treef224f8c27a03b8104b558f7055921fccc95e64ff /platform
parenta65d86ebcf216bd0480c7f576d0eff60df44a160 (diff)
Pull request #4498 review fixes
Diffstat (limited to 'platform')
-rw-r--r--platform/platform.pro1
-rw-r--r--platform/platform_tests_support/platform_tests_support.pro2
-rw-r--r--platform/platform_tests_support/test_socket.cpp67
-rw-r--r--platform/platform_tests_support/test_socket.hpp44
-rw-r--r--platform/socket.cpp122
-rw-r--r--platform/socket.hpp17
6 files changed, 113 insertions, 140 deletions
diff --git a/platform/platform.pro b/platform/platform.pro
index c6fb2fd10e..d05cc1f1e4 100644
--- a/platform/platform.pro
+++ b/platform/platform.pro
@@ -105,4 +105,3 @@ SOURCES += \
preferred_languages.cpp \
servers_list.cpp \
settings.cpp \
- socket.cpp \
diff --git a/platform/platform_tests_support/platform_tests_support.pro b/platform/platform_tests_support/platform_tests_support.pro
index f5456cad2c..8408a7bdbc 100644
--- a/platform/platform_tests_support/platform_tests_support.pro
+++ b/platform/platform_tests_support/platform_tests_support.pro
@@ -10,10 +10,12 @@ SOURCES += \
scoped_dir.cpp \
scoped_file.cpp \
scoped_mwm.cpp \
+ test_socket.cpp \
writable_dir_changer.cpp \
HEADERS += \
scoped_dir.hpp \
scoped_file.hpp \
scoped_mwm.hpp \
+ test_socket.hpp \
writable_dir_changer.hpp \
diff --git a/platform/platform_tests_support/test_socket.cpp b/platform/platform_tests_support/test_socket.cpp
new file mode 100644
index 0000000000..3924da379c
--- /dev/null
+++ b/platform/platform_tests_support/test_socket.cpp
@@ -0,0 +1,67 @@
+#include "test_socket.hpp"
+
+#include "base/assert.hpp"
+
+#include "std/algorithm.hpp"
+#include "std/chrono.hpp"
+
+namespace platform
+{
+namespace tests_support
+{
+TestSocket::~TestSocket() { m_isConnected = false; }
+
+bool TestSocket::Open(string const & host, uint16_t port)
+{
+ if (m_isConnected)
+ return false;
+
+ m_isConnected = true;
+ return true;
+}
+
+void TestSocket::Close() { m_isConnected = false; }
+
+bool TestSocket::Read(uint8_t * data, uint32_t count)
+{
+ if (!m_isConnected)
+ return false;
+
+ lock_guard<mutex> lg(m_inputMutex);
+
+ if (m_input.size() < count)
+ return false;
+
+ copy(m_input.begin(), m_input.end(), data);
+ m_input.erase(m_input.begin(), m_input.begin() + count);
+ return true;
+}
+
+bool TestSocket::Write(uint8_t const * data, uint32_t count)
+{
+ if (!m_isConnected)
+ return false;
+
+ {
+ lock_guard<mutex> lg(m_outputMutex);
+ m_output.insert(m_output.end(), data, data + count);
+ }
+ m_outputCondition.notify_one();
+ return true;
+}
+
+void TestSocket::SetTimeout(uint32_t milliseconds) { m_timeoutMs = milliseconds; }
+
+size_t TestSocket::ReadServer(vector<uint8_t> & destination)
+{
+ unique_lock<mutex> lock(m_outputMutex);
+ m_outputCondition.wait_for(lock, milliseconds(m_timeoutMs),
+ [this]() { return !m_output.empty(); });
+
+ size_t const outputSize = m_output.size();
+ destination.insert(destination.end(), m_output.begin(), m_output.end());
+ m_output.clear();
+ return outputSize;
+}
+} // namespace tests_support
+} // namespace platform
diff --git a/platform/platform_tests_support/test_socket.hpp b/platform/platform_tests_support/test_socket.hpp
new file mode 100644
index 0000000000..8d19071121
--- /dev/null
+++ b/platform/platform_tests_support/test_socket.hpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "platform/socket.hpp"
+
+#include "std/atomic.hpp"
+#include "std/condition_variable.hpp"
+#include "std/cstdint.hpp"
+#include "std/deque.hpp"
+#include "std/mutex.hpp"
+#include "std/vector.hpp"
+
+namespace platform
+{
+namespace tests_support
+{
+class TestSocket final : public Socket
+{
+public:
+ // Socket overrides:
+ ~TestSocket();
+ bool Open(string const & host, uint16_t port) override;
+ void Close() override;
+ bool Read(uint8_t * data, uint32_t count) override;
+ bool Write(uint8_t const * data, uint32_t count) override;
+ void SetTimeout(uint32_t milliseconds) override;
+
+ // Simulates server reading.
+ // Waits for some data or timeout.
+ // Returns size of read data.
+ size_t ReadServer(vector<uint8_t> & destination);
+
+private:
+ atomic<bool> m_isConnected = {false};
+ atomic<uint32_t> m_timeoutMs = {100};
+
+ deque<uint8_t> m_input;
+ mutex m_inputMutex;
+
+ vector<uint8_t> m_output;
+ mutex m_outputMutex;
+ condition_variable m_outputCondition;
+};
+} // namespace tests_support
+} // namespace platform
diff --git a/platform/socket.cpp b/platform/socket.cpp
deleted file mode 100644
index 59eb1985a8..0000000000
--- a/platform/socket.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#include "socket.hpp"
-
-#include "base/assert.hpp"
-
-#include "std/algorithm.hpp"
-#include "std/deque.hpp"
-#include "std/mutex.hpp"
-
-namespace
-{
-class MockSocket final : public platform::Socket
-{
-public:
- // Socket overrides
- bool Open(string const & host, uint16_t port) override { return false; }
- void Close() override {}
- bool Read(uint8_t * data, uint32_t count) override { return false; }
- bool Write(uint8_t const * data, uint32_t count) override { return false; }
- void SetTimeout(uint32_t milliseconds) override {}
-};
-
-class TestSocketImpl final : public platform::TestSocket
-{
-public:
- // Socket overrides
- ~TestSocketImpl();
- bool Open(string const & host, uint16_t port) override;
- void Close() override;
- bool Read(uint8_t * data, uint32_t count) override;
- bool Write(uint8_t const * data, uint32_t count) override;
- void SetTimeout(uint32_t milliseconds) override;
-
- // TestSocket overrides
- bool HasInput() const override;
- bool HasOutput() const override;
- void WriteServer(uint8_t const * data, uint32_t count) override;
- size_t ReadServer(vector<uint8_t> & destination) override;
-
-private:
- bool m_isConnected = false;
-
- deque<uint8_t> m_input;
- mutable mutex m_inputMutex;
-
- vector<uint8_t> m_output;
- mutable mutex m_outputMutex;
-};
-
-TestSocketImpl::~TestSocketImpl() { m_isConnected = false; }
-
-bool TestSocketImpl::Open(string const & host, uint16_t port)
-{
- m_isConnected = true;
- return true;
-}
-
-void TestSocketImpl::Close() { m_isConnected = false; }
-bool TestSocketImpl::Read(uint8_t * data, uint32_t count)
-{
- if (!m_isConnected)
- return false;
-
- lock_guard<mutex> lg(m_inputMutex);
-
- if (m_input.size() < count)
- return false;
-
- copy(m_input.begin(), m_input.end(), data);
- m_input.erase(m_input.begin(), m_input.begin() + count);
- return true;
-}
-
-bool TestSocketImpl::Write(uint8_t const * data, uint32_t count)
-{
- if (!m_isConnected)
- return false;
-
- lock_guard<mutex> lg(m_outputMutex);
- m_output.insert(m_output.end(), data, data + count);
- return true;
-}
-
-void TestSocketImpl::SetTimeout(uint32_t milliseconds) {}
-bool TestSocketImpl::HasInput() const
-{
- lock_guard<mutex> lg(m_inputMutex);
- return !m_input.empty();
-}
-
-bool TestSocketImpl::HasOutput() const
-{
- lock_guard<mutex> lg(m_outputMutex);
- return !m_output.empty();
-}
-
-void TestSocketImpl::WriteServer(uint8_t const * data, uint32_t count)
-{
- ASSERT(m_isConnected, ());
-
- lock_guard<mutex> lg(m_inputMutex);
- m_input.insert(m_input.end(), data, data + count);
-}
-
-size_t TestSocketImpl::ReadServer(vector<uint8_t> & destination)
-{
- lock_guard<mutex> lg(m_outputMutex);
-
- size_t const outputSize = m_output.size();
- if (outputSize == 0)
- return 0;
-
- destination.insert(destination.end(), m_output.begin(), m_output.end());
- m_output.clear();
- return outputSize;
-}
-} // namespace
-
-namespace platform
-{
-unique_ptr<Socket> createMockSocket() { return make_unique<MockSocket>(); }
-unique_ptr<TestSocket> createTestSocket() { return make_unique<TestSocketImpl>(); }
-} // namespace platform
diff --git a/platform/socket.hpp b/platform/socket.hpp
index 41a0d7711e..43083630ee 100644
--- a/platform/socket.hpp
+++ b/platform/socket.hpp
@@ -2,7 +2,6 @@
#include "std/string.hpp"
#include "std/unique_ptr.hpp"
-#include "std/vector.hpp"
namespace platform
{
@@ -26,21 +25,5 @@ public:
virtual void SetTimeout(uint32_t milliseconds) = 0;
};
-class TestSocket : public Socket
-{
-public:
- virtual bool HasInput() const = 0;
- virtual bool HasOutput() const = 0;
-
- // Simulate server writing
- virtual void WriteServer(uint8_t const * data, uint32_t count) = 0;
-
- // Simulate server reading
- // returns size of read data
- virtual size_t ReadServer(vector<uint8_t> & destination) = 0;
-};
-
unique_ptr<Socket> createSocket();
-unique_ptr<Socket> createMockSocket();
-unique_ptr<TestSocket> createTestSocket();
} // namespace platform