summaryrefslogtreecommitdiff
path: root/src/components/protocol_handler/test/protocol_handler_tm_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/protocol_handler/test/protocol_handler_tm_test.cc')
-rw-r--r--src/components/protocol_handler/test/protocol_handler_tm_test.cc1472
1 files changed, 1015 insertions, 457 deletions
diff --git a/src/components/protocol_handler/test/protocol_handler_tm_test.cc b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
index 4ef070c52f..1a7be866d9 100644
--- a/src/components/protocol_handler/test/protocol_handler_tm_test.cc
+++ b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2016, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,50 +29,112 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <gtest/gtest.h>
+#include "gtest/gtest.h"
#include <string>
+#include "protocol_handler/protocol_handler.h"
#include "protocol_handler/protocol_handler_impl.h"
#include "protocol/common.h"
-#include "control_message_matcher.h"
-#include "protocol_handler_mock.h"
-#include "protocol_observer_mock.h"
-
+#include "protocol_handler/control_message_matcher.h"
+#include "protocol_handler/mock_protocol_handler.h"
+#include "protocol_handler/protocol_observer_mock.h"
+#include "protocol_handler/mock_protocol_handler_settings.h"
+#include "protocol_handler/mock_session_observer.h"
+#include "connection_handler/mock_connection_handler.h"
+#include "security_manager/mock_security_manager.h"
+#include "security_manager/mock_ssl_context.h"
+#include "transport_manager/mock_transport_manager.h"
+#include "utils/make_shared.h"
namespace test {
namespace components {
namespace protocol_handler_test {
-// id passed as NULL for new session establishing
-#define NEW_SESSION_ID 0u
-#define SESSION_START_REJECT 0u
-
-using namespace ::protocol_handler;
-using namespace ::transport_manager;
+// Id passed as NULL for new session establishing
+#define NEW_SESSION_ID 0u
+#define SESSION_START_REJECT 0u
+// Protocol Handler Entities
+using protocol_handler::ProtocolHandlerImpl;
+using protocol_handler::ServiceType;
+using protocol_handler::RawMessage;
+using protocol_handler::RawMessagePtr;
+using protocol_handler::PROTECTION_ON;
+using protocol_handler::PROTECTION_OFF;
+using protocol_handler::PROTOCOL_VERSION_1;
+using protocol_handler::PROTOCOL_VERSION_2;
+using protocol_handler::PROTOCOL_VERSION_3;
+using protocol_handler::PROTOCOL_VERSION_MAX;
+using protocol_handler::FRAME_TYPE_CONTROL;
+using protocol_handler::FRAME_TYPE_SINGLE;
+using protocol_handler::FRAME_TYPE_FIRST;
+using protocol_handler::FRAME_TYPE_CONSECUTIVE;
+using protocol_handler::FRAME_TYPE_MAX_VALUE;
+using protocol_handler::MAXIMUM_FRAME_DATA_V2_SIZE;
+using protocol_handler::FRAME_DATA_START_SERVICE;
+using protocol_handler::FRAME_DATA_START_SERVICE_ACK;
+using protocol_handler::FRAME_DATA_END_SERVICE_NACK;
+using protocol_handler::FRAME_DATA_END_SERVICE_ACK;
+using protocol_handler::FRAME_DATA_END_SERVICE;
+using protocol_handler::FRAME_DATA_HEART_BEAT;
+using protocol_handler::FRAME_DATA_HEART_BEAT_ACK;
+using protocol_handler::FRAME_DATA_SINGLE;
+using protocol_handler::FRAME_DATA_FIRST;
+using protocol_handler::FRAME_DATA_LAST_CONSECUTIVE;
+using protocol_handler::kRpc;
+using protocol_handler::kControl;
+using protocol_handler::kAudio;
+using protocol_handler::kMobileNav;
+using protocol_handler::kBulk;
+using protocol_handler::kInvalidServiceType;
// For TM states
-using ::transport_manager::TransportManagerListener;
+using transport_manager::TransportManagerListener;
+using transport_manager::E_SUCCESS;
+using transport_manager::DeviceInfo;
+// For CH entities
+using connection_handler::DeviceHandle;
+// Google Testing Framework Entities
using ::testing::Return;
+using ::testing::ReturnRefOfCopy;
using ::testing::ReturnNull;
using ::testing::AnyOf;
-using ::testing::Ge;
-using ::testing::Le;
+using ::testing::DoAll;
using ::testing::_;
using ::testing::Invoke;
+using ::testing::SetArgReferee;
+using ::testing::SetArgPointee;
+
+typedef std::vector<uint8_t> UCharDataVector;
class ProtocolHandlerImplTest : public ::testing::Test {
protected:
- void InitProtocolHandlerImpl(
- const size_t period_msec, const size_t max_messages,
- bool malformed_message_filtering = false,
- const size_t malformd_period_msec = 0u,
- const size_t malformd_max_messages = 0u) {
+ void InitProtocolHandlerImpl(const size_t period_msec,
+ const size_t max_messages,
+ bool malformed_message_filtering = false,
+ const size_t malformd_period_msec = 0u,
+ const size_t malformd_max_messages = 0u,
+ const int32_t multiframe_waiting_timeout = 0,
+ const size_t maximum_payload_size = 0u) {
+ ON_CALL(protocol_handler_settings_mock, maximum_payload_size())
+ .WillByDefault(Return(maximum_payload_size));
+ ON_CALL(protocol_handler_settings_mock, message_frequency_time())
+ .WillByDefault(Return(period_msec));
+ ON_CALL(protocol_handler_settings_mock, message_frequency_count())
+ .WillByDefault(Return(max_messages));
+ ON_CALL(protocol_handler_settings_mock, malformed_message_filtering())
+ .WillByDefault(Return(malformed_message_filtering));
+ ON_CALL(protocol_handler_settings_mock, malformed_frequency_time())
+ .WillByDefault(Return(malformd_period_msec));
+ ON_CALL(protocol_handler_settings_mock, malformed_frequency_count())
+ .WillByDefault(Return(malformd_max_messages));
+ ON_CALL(protocol_handler_settings_mock, multiframe_waiting_timeout())
+ .WillByDefault(Return(multiframe_waiting_timeout));
protocol_handler_impl.reset(
- new ProtocolHandlerImpl(&transport_manager_mock,
- period_msec, max_messages,
- malformed_message_filtering,
- malformd_period_msec, malformd_max_messages));
- protocol_handler_impl->set_session_observer(&session_observer_mock);
+ new ProtocolHandlerImpl(protocol_handler_settings_mock,
+ session_observer_mock,
+ connection_handler_mock,
+ transport_manager_mock));
tm_listener = protocol_handler_impl.get();
}
+
void SetUp() OVERRIDE {
InitProtocolHandlerImpl(0u, 0u);
connection_id = 0xAu;
@@ -81,15 +143,16 @@ class ProtocolHandlerImplTest : public ::testing::Test {
message_id = 0xABCDEFu;
some_data.resize(256, 0xAB);
- // expect ConnectionHandler support methods call (conversion, check heartbeat)
- EXPECT_CALL(session_observer_mock,
- KeyFromPair(connection_id, _)).
- //return some connection_key
- WillRepeatedly(Return(connection_key));
- EXPECT_CALL(session_observer_mock,
- IsHeartBeatSupported(connection_id, _)).
- //return false to avoid call KeepConnectionAlive
- WillRepeatedly(Return(false));
+ // Expect ConnectionHandler support methods call (conversion, check
+ // heartbeat)
+ EXPECT_CALL(session_observer_mock, KeyFromPair(connection_id, _))
+ .
+ // Return some connection_key
+ WillRepeatedly(Return(connection_key));
+ EXPECT_CALL(session_observer_mock, IsHeartBeatSupported(connection_id, _))
+ .
+ // Return false to avoid call KeepConnectionAlive
+ WillRepeatedly(Return(false));
}
void TearDown() OVERRIDE {
@@ -99,10 +162,11 @@ class ProtocolHandlerImplTest : public ::testing::Test {
// Emulate connection establish
void AddConnection() {
- tm_listener->OnConnectionEstablished(
- DeviceInfo(DeviceHandle(1u), std::string("mac"), std::string("name"),
- std::string("BTMAC")),
- connection_id);
+ tm_listener->OnConnectionEstablished(DeviceInfo(DeviceHandle(1u),
+ std::string("mac"),
+ std::string("name"),
+ std::string("BTMAC")),
+ connection_id);
}
void AddSession() {
AddConnection();
@@ -111,23 +175,29 @@ class ProtocolHandlerImplTest : public ::testing::Test {
// For enabled protection callback shall use protection ON
const bool callback_protection_flag = PROTECTION_ON;
#else
- // For disabled protection callback shall ignore protection income flad and use protection OFF
+ // For disabled protection callback shall ignore protection income flad and
+ // use protection OFF
const bool callback_protection_flag = PROTECTION_OFF;
#endif // ENABLE_SECURITY
- // expect ConnectionHandler check
+ // Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service,
- callback_protection_flag, _)).
- //return sessions start success
- WillOnce(Return(session_id));
-
- // expect send Ack with PROTECTION_OFF (on no Security Manager)
+ OnSessionStartedCallback(connection_id,
+ NEW_SESSION_ID,
+ start_service,
+ callback_protection_flag,
+ _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
+
+ // Expect send Ack with PROTECTION_OFF (on no Security Manager)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK,
+ PROTECTION_OFF)))
.WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
#ifdef ENABLE_SECURITY
@@ -136,54 +206,91 @@ class ProtocolHandlerImplTest : public ::testing::Test {
protocol_handler_impl->set_security_manager(&security_manager_mock);
}
#endif // ENABLE_SECURITY
- void SendTMMessage(uint8_t connection_id, uint8_t version, bool protection,
- uint8_t frameType, uint8_t serviceType, uint8_t frameData,
- uint8_t sessionId, uint32_t dataSize, uint32_t messageID,
- const uint8_t *data = 0) {
+ void SendTMMessage(uint8_t connection_id,
+ uint8_t version,
+ bool protection,
+ uint8_t frameType,
+ uint8_t serviceType,
+ uint8_t frameData,
+ uint8_t sessionId,
+ uint32_t dataSize,
+ uint32_t messageID,
+ const uint8_t* data = 0) {
// Create packet
- const ProtocolPacket packet(connection_id, version, protection, frameType,
- serviceType, frameData, sessionId, dataSize,
- messageID, data);
- // Emulate resive packet from transoprt manager
+ const ProtocolPacket packet(connection_id,
+ version,
+ protection,
+ frameType,
+ serviceType,
+ frameData,
+ sessionId,
+ dataSize,
+ messageID,
+ data);
+ // Emulate receive packet from transoprt manager
tm_listener->OnTMMessageReceived(packet.serializePacket());
}
- void SendControlMessage(bool protection, uint8_t service_type,
- uint8_t sessionId, uint32_t frame_data,
- uint32_t dataSize = 0u, const uint8_t *data = NULL) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, protection,
- FRAME_TYPE_CONTROL, service_type, frame_data, sessionId,
- dataSize, message_id, data);
+
+ void SetProtocolVersion2() {
+ // Set protocol version 2
+ ON_CALL(protocol_handler_settings_mock, max_supported_protocol_version())
+ .WillByDefault(Return(PROTOCOL_VERSION_2));
+ }
+
+ void SendControlMessage(bool protection,
+ uint8_t service_type,
+ uint8_t sessionId,
+ uint32_t frame_data,
+ uint32_t dataSize = 0u,
+ const uint8_t* data = NULL) {
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ protection,
+ FRAME_TYPE_CONTROL,
+ service_type,
+ frame_data,
+ sessionId,
+ dataSize,
+ message_id,
+ data);
}
+ testing::NiceMock<MockProtocolHandlerSettings> protocol_handler_settings_mock;
::utils::SharedPtr<ProtocolHandlerImpl> protocol_handler_impl;
TransportManagerListener* tm_listener;
// Uniq connection
::transport_manager::ConnectionUID connection_id;
- // id of established session
+ // Id of established session
uint8_t session_id;
- // uniq id as connection_id and session_id in one
+ // Uniq id as connection_id and session_id in one
uint32_t connection_key;
uint32_t message_id;
- std::vector<uint8_t> some_data;
+ UCharDataVector some_data;
// Strict mocks (same as all methods EXPECT_CALL().Times(0))
- testing::StrictMock<protocol_handler_test::TransportManagerMock> transport_manager_mock;
- testing::StrictMock<protocol_handler_test::SessionObserverMock> session_observer_mock;
+ testing::NiceMock<connection_handler_test::MockConnectionHandler>
+ connection_handler_mock;
+ testing::StrictMock<transport_manager_test::MockTransportManager>
+ transport_manager_mock;
+ testing::StrictMock<protocol_handler_test::MockSessionObserver>
+ session_observer_mock;
#ifdef ENABLE_SECURITY
- testing::NiceMock<protocol_handler_test::SecurityManagerMock> security_manager_mock;
- testing::NiceMock<protocol_handler_test::SSLContextMock> ssl_context_mock;
+ testing::NiceMock<security_manager_test::MockSecurityManager>
+ security_manager_mock;
+ testing::NiceMock<security_manager_test::MockSSLContext> ssl_context_mock;
#endif // ENABLE_SECURITY
};
#ifdef ENABLE_SECURITY
class OnHandshakeDoneFunctor {
-public:
+ public:
OnHandshakeDoneFunctor(const uint32_t connection_key,
security_manager::SSLContext::HandshakeResult error)
- : connection_key(connection_key), result(error) {}
- void operator()(security_manager::SecurityManagerListener * listener) const {
+ : connection_key(connection_key), result(error) {}
+ void operator()(security_manager::SecurityManagerListener* listener) const {
listener->OnHandshakeDone(connection_key, result);
}
-private:
+
+ private:
const uint32_t connection_key;
const security_manager::SSLContext::HandshakeResult result;
};
@@ -199,48 +306,63 @@ TEST_F(ProtocolHandlerImplTest, RecieveEmptyRawMessage) {
* ProtocolHandler shall disconnect on no connection
*/
TEST_F(ProtocolHandlerImplTest, RecieveOnUnknownConnection) {
- EXPECT_CALL(transport_manager_mock, DisconnectForce(connection_id)).
- WillOnce(Return(E_SUCCESS));
+ EXPECT_CALL(transport_manager_mock, DisconnectForce(connection_id))
+ .WillOnce(Return(E_SUCCESS));
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF,
- FRAME_TYPE_CONTROL, kRpc, FRAME_DATA_START_SERVICE,
- NEW_SESSION_ID, 0, message_id);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_CONTROL,
+ kRpc,
+ FRAME_DATA_START_SERVICE,
+ NEW_SESSION_ID,
+ 0,
+ message_id);
}
/*
* ProtocolHandler shall send NAck on session_observer rejection
* Check protection flag OFF for all services from kControl to kBulk
*/
-TEST_F(ProtocolHandlerImplTest, StartSession_Unprotected_SessionObserverReject) {
+TEST_F(ProtocolHandlerImplTest,
+ StartSession_Unprotected_SessionObserverReject) {
const int call_times = 5;
AddConnection();
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(
- connection_id, NEW_SESSION_ID, AnyOf(kControl, kRpc, kAudio,
- kMobileNav, kBulk), PROTECTION_OFF, _)).Times(call_times).
- //return sessions start rejection
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(connection_id,
+ NEW_SESSION_ID,
+ AnyOf(kControl, kRpc, kAudio, kMobileNav, kBulk),
+ PROTECTION_OFF,
+ _))
+ .Times(call_times)
+ .
+ // Return sessions start rejection
WillRepeatedly(Return(SESSION_START_REJECT));
- // expect send NAck
+ // Expect send NAck
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK, PROTECTION_OFF)))
- .Times(call_times).WillRepeatedly(Return(E_SUCCESS));
-
- SendControlMessage(PROTECTION_OFF, kControl, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_OFF, kRpc, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_OFF, kAudio, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_OFF, kMobileNav, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_OFF, kBulk, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK,
+ PROTECTION_OFF)))
+ .Times(call_times)
+ .WillRepeatedly(Return(E_SUCCESS));
+
+ SendControlMessage(
+ PROTECTION_OFF, kControl, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, kRpc, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, kAudio, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, kMobileNav, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, kBulk, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
* ProtocolHandler shall send NAck on session_observer rejection
* Emulate getting PROTECTION_ON and check protection flag OFF in NAck
- * For ENABLE_SECURITY=OFF session_observer shall be called with protection flag OFF
+ * For ENABLE_SECURITY=OFF session_observer shall be called with protection flag
+ * OFF
*/
TEST_F(ProtocolHandlerImplTest, StartSession_Protected_SessionObserverReject) {
const int call_times = 5;
@@ -249,65 +371,80 @@ TEST_F(ProtocolHandlerImplTest, StartSession_Protected_SessionObserverReject) {
// For enabled protection callback shall use protection ON
const bool callback_protection_flag = PROTECTION_ON;
#else
- // For disabled protection callback shall ignore protection income flad and use protection OFF
+ // For disabled protection callback shall ignore protection income flag and
+ // use protection OFF
const bool callback_protection_flag = PROTECTION_OFF;
#endif // ENABLE_SECURITY
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(
- connection_id, NEW_SESSION_ID, AnyOf(kControl, kRpc, kAudio,
- kMobileNav, kBulk), callback_protection_flag, _)).Times(
- call_times).
- //return sessions start rejection
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(connection_id,
+ NEW_SESSION_ID,
+ AnyOf(kControl, kRpc, kAudio, kMobileNav, kBulk),
+ callback_protection_flag,
+ _))
+ .Times(call_times)
+ .
+ // Return sessions start rejection
WillRepeatedly(Return(SESSION_START_REJECT));
- // expect send NAck with encryption OFF
+ // Expect send NAck with encryption OFF
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK, PROTECTION_OFF)))
- .Times(call_times).WillRepeatedly(Return(E_SUCCESS));
-
- SendControlMessage(PROTECTION_ON, kControl, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_ON, kRpc, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_ON, kAudio, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_ON, kMobileNav, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
- SendControlMessage(PROTECTION_ON, kBulk, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_NACK,
+ PROTECTION_OFF)))
+ .Times(call_times)
+ .WillRepeatedly(Return(E_SUCCESS));
+
+ SendControlMessage(
+ PROTECTION_ON, kControl, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, kRpc, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, kAudio, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, kMobileNav, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, kBulk, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
* ProtocolHandler shall send Ack on session_observer accept
* Check protection flag OFF
*/
-TEST_F(ProtocolHandlerImplTest, StartSession_Unprotected_SessionObserverAccept) {
+TEST_F(ProtocolHandlerImplTest,
+ StartSession_Unprotected_SessionObserverAccept) {
AddConnection();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _))
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _))
.
- //return sessions start success
- WillOnce(Return(session_id));
+ // Return sessions start success
+ WillOnce(Return(session_id));
- // expect send Ack
+ SetProtocolVersion2();
+ // Expect send Ack
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
.WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_OFF, start_service, NEW_SESSION_ID,
- FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
* ProtocolHandler shall send Ack on session_observer accept
* Emulate getting PROTECTION_ON and check protection flag OFF in Ack
- * For ENABLE_SECURITY=OFF session_observer shall be called with protection flag OFF
+ * For ENABLE_SECURITY=OFF session_observer shall be called with protection flag
+ * OFF
*/
TEST_F(ProtocolHandlerImplTest, StartSession_Protected_SessionObserverAccept) {
+ SetProtocolVersion2();
AddSession();
}
-// TODO(EZamakhov): add test for get_hash_id/set_hash_id from protocol_handler_impl.cc
+// TODO(EZamakhov): add test for get_hash_id/set_hash_id from
+// protocol_handler_impl.cc
/*
* ProtocolHandler shall send NAck on session_observer rejection
*/
@@ -315,19 +452,22 @@ TEST_F(ProtocolHandlerImplTest, EndSession_SessionObserverReject) {
AddSession();
const ServiceType service = kRpc;
- // expect ConnectionHandler check
+ // Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
- OnSessionEndedCallback(connection_id, session_id, _, service)).
- // reject session start
- WillOnce(Return(SESSION_START_REJECT));
+ OnSessionEndedCallback(connection_id, session_id, _, service))
+ .
+ // reject session start
+ WillOnce(Return(SESSION_START_REJECT));
- // expect send NAck
+ SetProtocolVersion2();
+ // Expect send NAck
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_END_SERVICE_NACK, PROTECTION_OFF)))
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_END_SERVICE_NACK, PROTECTION_OFF)))
.WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_OFF, service, session_id,
- FRAME_DATA_END_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, service, session_id, FRAME_DATA_END_SERVICE);
}
/*
* ProtocolHandler shall send NAck on wrong hash code
@@ -336,19 +476,22 @@ TEST_F(ProtocolHandlerImplTest, EndSession_Success) {
AddSession();
const ServiceType service = kRpc;
- // expect ConnectionHandler check
+ // Expect ConnectionHandler check
EXPECT_CALL(session_observer_mock,
- OnSessionEndedCallback(connection_id, session_id, _, service)).
- // return sessions start success
- WillOnce(Return(connection_key));
+ OnSessionEndedCallback(connection_id, session_id, _, service))
+ .
+ // return sessions start success
+ WillOnce(Return(connection_key));
- // expect send Ack
+ SetProtocolVersion2();
+ // Expect send Ack
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_END_SERVICE_ACK, PROTECTION_OFF)))
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_END_SERVICE_ACK, PROTECTION_OFF)))
.WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_OFF, service, session_id,
- FRAME_DATA_END_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, service, session_id, FRAME_DATA_END_SERVICE);
}
#ifdef ENABLE_SECURITY
@@ -361,40 +504,59 @@ TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtocoloV1) {
// Add security manager
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
- // expect send Ack with PROTECTION_OFF (on no Security Manager)
+ SetProtocolVersion2();
+ // Expect send Ack with PROTECTION_OFF (on no Security Manager)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ .WillOnce(Return(E_SUCCESS));
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_ON, FRAME_TYPE_CONTROL,
- start_service, FRAME_DATA_START_SERVICE, NEW_SESSION_ID, 0, message_id);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_ON,
+ FRAME_TYPE_CONTROL,
+ start_service,
+ FRAME_DATA_START_SERVICE,
+ NEW_SESSION_ID,
+ 0,
+ message_id);
}
/*
- * ProtocolHandler shall not call Security logics on start session with PROTECTION_OFF
+ * ProtocolHandler shall not call Security logics on start session with
+ * PROTECTION_OFF
*/
TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionUnprotected) {
AddConnection();
// Add security manager
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_OFF, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
- // expect send Ack with PROTECTION_OFF (on no Security Manager)
+ SetProtocolVersion2();
+ // Expect send Ack with PROTECTION_OFF (on no Security Manager)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_OFF, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_OFF, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
* ProtocolHandler shall send Ack with PROTECTION_OFF on fail SLL creation
@@ -403,430 +565,547 @@ TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtected_Fail) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
- // expect start protection for unprotected session
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return fail protection
- WillOnce(ReturnNull());
+ SetProtocolVersion2();
+ // Expect start protection for unprotected session
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return fail protection
+ WillOnce(ReturnNull());
- // expect send Ack with PROTECTION_OFF (on fail SLL creation)
+ // Expect send Ack with PROTECTION_OFF (on fail SLL creation)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
- * ProtocolHandler shall send Ack with PROTECTION_ON on already established and initialized SLLContext
+ * ProtocolHandler shall send Ack with PROTECTION_ON on already established and
+ * initialized SLLContext
*/
-TEST_F(ProtocolHandlerImplTest,SecurityEnable_StartSessionProtected_SSLInitialized) {
+TEST_F(ProtocolHandlerImplTest,
+ SecurityEnable_StartSessionProtected_SSLInitialized) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
+ SetProtocolVersion2();
// call new SSLContext creation
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return new SSLContext
- WillOnce(Return(&ssl_context_mock));
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return new SSLContext
+ WillOnce(Return(&ssl_context_mock));
- // initilization check
- EXPECT_CALL(ssl_context_mock,
- IsInitCompleted()).
- //emulate SSL is initilized
- WillOnce(Return(true));
+ // Initilization check
+ EXPECT_CALL(ssl_context_mock, IsInitCompleted())
+ .
+ // emulate SSL is initilized
+ WillOnce(Return(true));
// Expect service protection enable
EXPECT_CALL(session_observer_mock,
- SetProtectionFlag(connection_key, start_service));
+ SetProtectionFlag(connection_key, start_service));
- // expect send Ack with PROTECTION_ON (on SSL is initilized)
+ // Expect send Ack with PROTECTION_ON (on SSL is initilized)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
* ProtocolHandler shall send Ack with PROTECTION_OFF on session handshhake fail
*/
-TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtected_HandshakeFail) {
+TEST_F(ProtocolHandlerImplTest,
+ SecurityEnable_StartSessionProtected_HandshakeFail) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
+
+ std::vector<int> services;
+ // TODO(AKutsan) : APPLINK-21398 use named constants instead of magic numbers
+ services.push_back(0x0A);
+ services.push_back(0x0B);
+ ON_CALL(protocol_handler_settings_mock, force_protected_service())
+ .WillByDefault(ReturnRefOfCopy(services));
// call new SSLContext creation
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return new SSLContext
- WillOnce(Return(&ssl_context_mock));
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return new SSLContext
+ WillOnce(Return(&ssl_context_mock));
- // initilization check
- EXPECT_CALL(ssl_context_mock,
- IsInitCompleted()).
- //emulate SSL is not initilized
- WillOnce(Return(false));
+ // Initilization check
+ EXPECT_CALL(ssl_context_mock, IsInitCompleted())
+ .
+ // emulate SSL is not initilized
+ WillOnce(Return(false));
// Pending handshake check
- EXPECT_CALL(ssl_context_mock,
- IsHandshakePending()).
- //emulate is pending
- WillOnce(Return(true));
-
- // expect add listener for handshake result
- EXPECT_CALL(security_manager_mock,
- AddListener(_))
- // emulate handshake fail
- .WillOnce(Invoke(OnHandshakeDoneFunctor(
- connection_key,
- security_manager::SSLContext::Handshake_Result_Fail)));
+ EXPECT_CALL(ssl_context_mock, IsHandshakePending())
+ .
+ // emulate is pending
+ WillOnce(Return(true));
+
+ // Expect add listener for handshake result
+ EXPECT_CALL(security_manager_mock, AddListener(_))
+ // Emulate handshake fail
+ .WillOnce(Invoke(OnHandshakeDoneFunctor(
+ connection_key,
+ security_manager::SSLContext::Handshake_Result_Fail)));
// Listener check SSLContext
EXPECT_CALL(session_observer_mock,
- GetSSLContext(connection_key, start_service)).
- // emulate protection for service is not enabled
- WillOnce(ReturnNull());
+ GetSSLContext(connection_key, start_service))
+ .
+ // Emulate protection for service is not enabled
+ WillOnce(ReturnNull());
- // expect send Ack with PROTECTION_OFF (on fail handshake)
+ // Expect send Ack with PROTECTION_OFF (on fail handshake)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
- * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake success
+ * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake
+ * success
*/
-TEST_F(ProtocolHandlerImplTest, SecurityEnable_StartSessionProtected_HandshakeSuccess) {
+TEST_F(ProtocolHandlerImplTest,
+ SecurityEnable_StartSessionProtected_HandshakeSuccess) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+
+ // No services are protected
+ std::vector<int> services;
+ ON_CALL(protocol_handler_settings_mock, force_protected_service())
+ .WillByDefault(ReturnRefOfCopy(services));
+
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
// call new SSLContext creation
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return new SSLContext
- WillOnce(Return(&ssl_context_mock));
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return new SSLContext
+ WillOnce(Return(&ssl_context_mock));
- // initilization check
- EXPECT_CALL(ssl_context_mock,
- IsInitCompleted()).
- //emulate SSL is not initilized
- WillOnce(Return(false));
+ // Initilization check
+ EXPECT_CALL(ssl_context_mock, IsInitCompleted())
+ .
+ // emulate SSL is not initilized
+ WillOnce(Return(false));
// Pending handshake check
- EXPECT_CALL(ssl_context_mock,
- IsHandshakePending()).
- //emulate is pending
- WillOnce(Return(true));
-
- // expect add listener for handshake result
- EXPECT_CALL(security_manager_mock,
- AddListener(_))
- // emulate handshake fail
- .WillOnce(Invoke(OnHandshakeDoneFunctor(
- connection_key,
- security_manager::SSLContext::Handshake_Result_Success)));
+ EXPECT_CALL(ssl_context_mock, IsHandshakePending())
+ .
+ // emulate is pending
+ WillOnce(Return(true));
+
+ // Expect add listener for handshake result
+ EXPECT_CALL(security_manager_mock, AddListener(_))
+ // Emulate handshake fail
+ .WillOnce(Invoke(OnHandshakeDoneFunctor(
+ connection_key,
+ security_manager::SSLContext::Handshake_Result_Success)));
// Listener check SSLContext
EXPECT_CALL(session_observer_mock,
- GetSSLContext(connection_key, start_service)).
- // emulate protection for service is not enabled
- WillOnce(ReturnNull());
+ GetSSLContext(connection_key, start_service))
+ .
+ // Emulate protection for service is not enabled
+ WillOnce(ReturnNull());
// Expect service protection enable
EXPECT_CALL(session_observer_mock,
- SetProtectionFlag(connection_key, start_service));
+ SetProtectionFlag(connection_key, start_service));
- // expect send Ack with PROTECTION_OFF (on fail handshake)
+ // Expect send Ack with PROTECTION_OFF (on fail handshake)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
- * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake success
+ * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake
+ * success
*/
-TEST_F(ProtocolHandlerImplTest,
+TEST_F(
+ ProtocolHandlerImplTest,
SecurityEnable_StartSessionProtected_HandshakeSuccess_ServiceProtectedBefore) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+
+ std::vector<int> services;
+ ON_CALL(protocol_handler_settings_mock, force_protected_service())
+ .WillByDefault(ReturnRefOfCopy(services));
+
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
// call new SSLContext creation
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return new SSLContext
- WillOnce(Return(&ssl_context_mock));
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return new SSLContext
+ WillOnce(Return(&ssl_context_mock));
- // initilization check
- EXPECT_CALL(ssl_context_mock,
- IsInitCompleted()).
- //emulate SSL is not initilized
- WillOnce(Return(false));
+ // Initilization check
+ EXPECT_CALL(ssl_context_mock, IsInitCompleted())
+ .
+ // emulate SSL is not initilized
+ WillOnce(Return(false));
// Pending handshake check
- EXPECT_CALL(ssl_context_mock,
- IsHandshakePending()).
- //emulate is pending
- WillOnce(Return(true));
-
- // expect add listener for handshake result
- EXPECT_CALL(security_manager_mock,
- AddListener(_))
- // emulate handshake fail
- .WillOnce(Invoke(OnHandshakeDoneFunctor(
- connection_key,
- security_manager::SSLContext::Handshake_Result_Success)));
+ EXPECT_CALL(ssl_context_mock, IsHandshakePending())
+ .
+ // emulate is pending
+ WillOnce(Return(true));
+
+ // Expect add listener for handshake result
+ EXPECT_CALL(security_manager_mock, AddListener(_))
+ // Emulate handshake fail
+ .WillOnce(Invoke(OnHandshakeDoneFunctor(
+ connection_key,
+ security_manager::SSLContext::Handshake_Result_Success)));
// Listener check SSLContext
EXPECT_CALL(session_observer_mock,
- GetSSLContext(connection_key, start_service)).
- // emulate protection for service is not enabled
- WillOnce(ReturnNull());
+ GetSSLContext(connection_key, start_service))
+ .
+ // Emulate protection for service is not enabled
+ WillOnce(ReturnNull());
// Expect service protection enable
EXPECT_CALL(session_observer_mock,
- SetProtectionFlag(connection_key, start_service));
+ SetProtectionFlag(connection_key, start_service));
- // expect send Ack with PROTECTION_OFF (on fail handshake)
+ // Expect send Ack with PROTECTION_OFF (on fail handshake)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
/*
- * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake success
+ * ProtocolHandler shall send Ack with PROTECTION_ON on session handshhake
+ * success
*/
TEST_F(ProtocolHandlerImplTest,
- SecurityEnable_StartSessionProtected_HandshakeSuccess_SSLIsNotPending) {
+ SecurityEnable_StartSessionProtected_HandshakeSuccess_SSLIsNotPending) {
AddConnection();
AddSecurityManager();
const ServiceType start_service = kRpc;
- // expect ConnectionHandler check
- EXPECT_CALL(session_observer_mock,
- OnSessionStartedCallback(connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _)).
- //return sessions start success
- WillOnce(Return(session_id));
+
+ std::vector<int> services;
+ ON_CALL(protocol_handler_settings_mock, force_protected_service())
+ .WillByDefault(ReturnRefOfCopy(services));
+
+ // Expect ConnectionHandler check
+ EXPECT_CALL(
+ session_observer_mock,
+ OnSessionStartedCallback(
+ connection_id, NEW_SESSION_ID, start_service, PROTECTION_ON, _))
+ .
+ // Return sessions start success
+ WillOnce(Return(session_id));
// call new SSLContext creation
- EXPECT_CALL(security_manager_mock,
- CreateSSLContext(connection_key)).
- //return new SSLContext
- WillOnce(Return(&ssl_context_mock));
+ EXPECT_CALL(security_manager_mock, CreateSSLContext(connection_key))
+ .
+ // Return new SSLContext
+ WillOnce(Return(&ssl_context_mock));
- // initilization check
- EXPECT_CALL(ssl_context_mock,
- IsInitCompleted()).
- //emulate SSL is not initilized
- WillOnce(Return(false));
+ // Initilization check
+ EXPECT_CALL(ssl_context_mock, IsInitCompleted())
+ .
+ // emulate SSL is not initilized
+ WillOnce(Return(false));
// Pending handshake check
- EXPECT_CALL(ssl_context_mock,
- IsHandshakePending()).
- //emulate is pending
- WillOnce(Return(false));
+ EXPECT_CALL(ssl_context_mock, IsHandshakePending())
+ .
+ // emulate is pending
+ WillOnce(Return(false));
// Wait restart handshake operation
- EXPECT_CALL(security_manager_mock,
- StartHandshake(connection_key));
+ EXPECT_CALL(security_manager_mock, StartHandshake(connection_key));
- // expect add listener for handshake result
- EXPECT_CALL(security_manager_mock,
- AddListener(_))
- // emulate handshake fail
- .WillOnce(Invoke(OnHandshakeDoneFunctor(
- connection_key,
- security_manager::SSLContext::Handshake_Result_Success)));
+ // Expect add listener for handshake result
+ EXPECT_CALL(security_manager_mock, AddListener(_))
+ // Emulate handshake fail
+ .WillOnce(Invoke(OnHandshakeDoneFunctor(
+ connection_key,
+ security_manager::SSLContext::Handshake_Result_Success)));
// Listener check SSLContext
EXPECT_CALL(session_observer_mock,
- GetSSLContext(connection_key, start_service)).
- // emulate protection for service is not enabled
- WillOnce(ReturnNull());
+ GetSSLContext(connection_key, start_service))
+ .
+ // Emulate protection for service is not enabled
+ WillOnce(ReturnNull());
// Expect service protection enable
EXPECT_CALL(session_observer_mock,
- SetProtectionFlag(connection_key, start_service));
+ SetProtectionFlag(connection_key, start_service));
- // expect send Ack with PROTECTION_OFF (on fail handshake)
+ // Expect send Ack with PROTECTION_OFF (on fail handshake)
EXPECT_CALL(transport_manager_mock,
- SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON))).
- WillOnce(Return(E_SUCCESS));
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_START_SERVICE_ACK, PROTECTION_ON)))
+ .WillOnce(Return(E_SUCCESS));
- SendControlMessage(PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
+ SendControlMessage(
+ PROTECTION_ON, start_service, NEW_SESSION_ID, FRAME_DATA_START_SERVICE);
}
#endif // ENABLE_SECURITY
-TEST_F(ProtocolHandlerImplTest,
- FloodVerification) {
+TEST_F(ProtocolHandlerImplTest, FloodVerification) {
const size_t period_msec = 10000;
const size_t max_messages = 1000;
InitProtocolHandlerImpl(period_msec, max_messages);
AddConnection();
AddSession();
- // expect flood notification to CH
- EXPECT_CALL(session_observer_mock,
- OnApplicationFloodCallBack(connection_key)).
- Times(1);
+ // Expect flood notification to CH
+ EXPECT_CALL(session_observer_mock, OnApplicationFloodCallBack(connection_key))
+ .Times(1);
+
+ ON_CALL(protocol_handler_settings_mock, message_frequency_time())
+ .WillByDefault(Return(period_msec));
+ ON_CALL(protocol_handler_settings_mock, message_frequency_count())
+ .WillByDefault(Return(max_messages));
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- FloodVerification_ThresholdValue) {
+TEST_F(ProtocolHandlerImplTest, FloodVerification_ThresholdValue) {
const size_t period_msec = 10000;
const size_t max_messages = 1000;
InitProtocolHandlerImpl(period_msec, max_messages);
AddConnection();
AddSession();
- // expect NO flood notification to CH
+ ON_CALL(protocol_handler_settings_mock, message_frequency_time())
+ .WillByDefault(Return(period_msec));
+ ON_CALL(protocol_handler_settings_mock, message_frequency_count())
+ .WillByDefault(Return(max_messages));
+
+ // Expect NO flood notification to CH
+ EXPECT_CALL(session_observer_mock, OnApplicationFloodCallBack(connection_key))
+ .Times(0);
for (size_t i = 0; i < max_messages - 1; ++i) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- FloodVerification_VideoFrameSkip) {
+TEST_F(ProtocolHandlerImplTest, FloodVerification_VideoFrameSkip) {
const size_t period_msec = 10000;
const size_t max_messages = 1000;
InitProtocolHandlerImpl(period_msec, max_messages);
AddConnection();
AddSession();
- // expect NO flood notification to CH on video data streaming
+ // Expect NO flood notification to CH on video data streaming
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kMobileNav, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kMobileNav,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- FloodVerification_AudioFrameSkip) {
+TEST_F(ProtocolHandlerImplTest, FloodVerification_AudioFrameSkip) {
const size_t period_msec = 10000;
const size_t max_messages = 1000;
InitProtocolHandlerImpl(period_msec, max_messages);
AddConnection();
AddSession();
- // expect NO flood notification to CH on video data streaming
+ // Expect NO flood notification to CH on video data streaming
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kAudio, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kAudio,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- FloodVerificationDisable) {
+TEST_F(ProtocolHandlerImplTest, FloodVerificationDisable) {
const size_t period_msec = 0;
const size_t max_messages = 0;
InitProtocolHandlerImpl(period_msec, max_messages);
AddConnection();
AddSession();
- // expect NO flood notification to session observer
+ // Expect NO flood notification to session observer
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, PROTOCOL_VERSION_3, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_3,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-
-TEST_F(ProtocolHandlerImplTest,
- MalformedVerificationDisable) {
+TEST_F(ProtocolHandlerImplTest, MalformedVerificationDisable) {
const size_t period_msec = 10000;
const size_t max_messages = 100;
InitProtocolHandlerImpl(0u, 0u, false, period_msec, max_messages);
AddConnection();
AddSession();
- // expect malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(max_messages);
+ // Expect malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(max_messages);
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
for (size_t i = 0; i < max_messages; ++i) {
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- MalformedLimitVerification) {
+TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification) {
const size_t period_msec = 10000;
const size_t max_messages = 100;
InitProtocolHandlerImpl(0u, 0u, true, period_msec, max_messages);
AddConnection();
AddSession();
- // expect malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(1);
+ // Expect malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(1);
// Sending malformed packets
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
for (size_t i = 0; i < max_messages * 2; ++i) {
// Malformed message
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Common message
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- MalformedLimitVerification_MalformedStock) {
+TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification_MalformedStock) {
const size_t period_msec = 10000;
const size_t max_messages = 100;
InitProtocolHandlerImpl(0u, 0u, true, period_msec, max_messages);
AddConnection();
AddSession();
- // expect malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(1);
+ // Expect malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(1);
// Sending malformed packets
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
@@ -834,37 +1113,63 @@ TEST_F(ProtocolHandlerImplTest,
const uint8_t malformed_service_type = kInvalidServiceType;
for (size_t i = 0; i < max_messages * 2; ++i) {
// Malformed message 1
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Malformed message 2
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, malformed_frame_type,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ malformed_frame_type,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Malformed message 3
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- malformed_service_type, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ malformed_service_type,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Common message
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- MalformedLimitVerification_MalformedOnly) {
+TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification_MalformedOnly) {
const size_t period_msec = 10000;
const size_t max_messages = 100;
InitProtocolHandlerImpl(0u, 0u, true, period_msec, max_messages);
AddConnection();
AddSession();
- // expect NO malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(0);
+ // Expect NO malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(0);
// Sending malformed packets
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
@@ -872,65 +1177,318 @@ TEST_F(ProtocolHandlerImplTest,
const uint8_t malformed_service_type = kInvalidServiceType;
for (size_t i = 0; i < max_messages * 2; ++i) {
// Malformed message 1
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Malformed message 2
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, malformed_frame_type,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ malformed_frame_type,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// Malformed message 3
- SendTMMessage(connection_id, PROTOCOL_VERSION_1, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- malformed_service_type, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ PROTOCOL_VERSION_1,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ malformed_service_type,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
// No common message
}
}
-TEST_F(ProtocolHandlerImplTest,
- MalformedLimitVerification_NullTimePeriod) {
+TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification_NullTimePeriod) {
const size_t period_msec = 0;
const size_t max_messages = 1000;
InitProtocolHandlerImpl(0u, 0u, true, period_msec, max_messages);
AddConnection();
AddSession();
- // expect no malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(0);
+ // Expect no malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(0);
// Sending malformed packets
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-TEST_F(ProtocolHandlerImplTest,
- MalformedLimitVerification_NullCount) {
+TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification_NullCount) {
const size_t period_msec = 10000;
const size_t max_messages = 0;
InitProtocolHandlerImpl(0u, 0u, true, period_msec, max_messages);
AddConnection();
AddSession();
- // expect no malformed notification to CH
- EXPECT_CALL(session_observer_mock,
- OnMalformedMessageCallback(connection_id)).
- Times(0);
+ // Expect no malformed notification to CH
+ EXPECT_CALL(session_observer_mock, OnMalformedMessageCallback(connection_id))
+ .Times(0);
// Sending malformed packets
const uint8_t malformed_version = PROTOCOL_VERSION_MAX;
for (size_t i = 0; i < max_messages + 1; ++i) {
- SendTMMessage(connection_id, malformed_version, PROTECTION_OFF, FRAME_TYPE_SINGLE,
- kControl, FRAME_DATA_SINGLE, session_id,
- some_data.size(), message_id, &some_data[0]);
+ SendTMMessage(connection_id,
+ malformed_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ some_data.size(),
+ message_id,
+ &some_data[0]);
}
}
-} // namespace test
-} // namespace components
+TEST_F(ProtocolHandlerImplTest,
+ SendEndServicePrivate_NoConnection_MessageNotSent) {
+ // Expect check connection with ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, _))
+ .WillOnce(Return(false));
+ // Expect not send End Service
+ EXPECT_CALL(transport_manager_mock, SendMessageToDevice(_)).Times(0);
+ // Act
+ protocol_handler_impl->SendEndSession(connection_id, session_id);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendEndServicePrivate_EndSession_MessageSent) {
+ // Arrange
+ AddSession();
+ // Expect check connection with ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, _))
+ .WillOnce(Return(true));
+ // Expect send End Service
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(
+ FRAME_TYPE_CONTROL, FRAME_DATA_END_SERVICE, PROTECTION_OFF, kRpc)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendEndSession(connection_id, session_id);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ SendEndServicePrivate_ServiceTypeControl_MessageSent) {
+ // Arrange
+ AddSession();
+ // Expect check connection with ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, _))
+ .WillOnce(Return(true));
+ // Expect send End Service
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(FRAME_TYPE_CONTROL,
+ FRAME_DATA_END_SERVICE,
+ PROTECTION_OFF,
+ kControl)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendEndService(connection_id, session_id, kControl);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendHeartBeat_NoConnection_NotSent) {
+ // Expect check connection with ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, _))
+ .WillOnce(Return(false));
+ // Expect not send HeartBeat
+ EXPECT_CALL(transport_manager_mock, SendMessageToDevice(_)).Times(0);
+ // Act
+ protocol_handler_impl->SendHeartBeat(connection_id, session_id);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendHeartBeat_Successful) {
+ // Arrange
+ AddSession();
+ // Expect check connection with ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, _))
+ .WillOnce(Return(true));
+ // Expect send HeartBeat
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(
+ FRAME_TYPE_CONTROL, FRAME_DATA_HEART_BEAT, PROTECTION_OFF, kControl)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendHeartBeat(connection_id, session_id);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendHeartBeatAck_Successful) {
+ // Arrange
+ AddSession();
+ // Expect double check connection and protocol version with
+ // ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(connection_id, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_3), Return(true)));
+ // Expect send HeartBeatAck
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(FRAME_TYPE_CONTROL,
+ FRAME_DATA_HEART_BEAT_ACK,
+ PROTECTION_OFF,
+ kControl)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ SendControlMessage(
+ PROTECTION_OFF, kControl, session_id, FRAME_DATA_HEART_BEAT);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendHeartBeatAck_WrongProtocolVersion_NotSent) {
+ // Arrange
+ AddSession();
+ // Expect two checks of connection and protocol version with
+ // ProtocolVersionUsed
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(connection_id, _, _))
+ .Times(2)
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_1), Return(true)));
+ // Expect not send HeartBeatAck
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(FRAME_TYPE_CONTROL,
+ FRAME_DATA_HEART_BEAT_ACK,
+ PROTECTION_OFF,
+ kControl))).Times(0);
+ // Act
+ SendControlMessage(
+ PROTECTION_OFF, kControl, session_id, FRAME_DATA_HEART_BEAT);
+ SendControlMessage(
+ PROTECTION_OFF, kControl, session_id, FRAME_DATA_HEART_BEAT);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ SendMessageToMobileApp_SendSingleControlMessage) {
+ // Arrange
+ AddSession();
+ const bool is_final = true;
+ const uint32_t total_data_size = 1;
+ UCharDataVector data(total_data_size);
+ RawMessagePtr message = utils::MakeShared<RawMessage>(
+ connection_key, PROTOCOL_VERSION_3, &data[0], total_data_size, kControl);
+ // Expect getting pair from key from session observer
+ EXPECT_CALL(session_observer_mock,
+ PairFromKey(message->connection_key(), _, _))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(connection_id), SetArgPointee<2>(session_id)));
+// Expect getting ssl context
+#ifdef ENABLE_SECURITY
+ EXPECT_CALL(session_observer_mock,
+ GetSSLContext(message->connection_key(), message->service_type()))
+ .WillOnce(Return(&ssl_context_mock));
+#endif // ENABLE_SECURITY
+ // Expect send message to mobile
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(
+ FRAME_TYPE_SINGLE, FRAME_DATA_SINGLE, PROTECTION_OFF, kControl)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendMessageToMobileApp(message, is_final);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ SendMessageToMobileApp_SendSingleNonControlMessage) {
+ // Arrange
+ AddSession();
+ const bool is_final = true;
+ const uint32_t total_data_size = 1;
+ UCharDataVector data(total_data_size);
+ RawMessagePtr message = utils::MakeShared<RawMessage>(
+ connection_key, PROTOCOL_VERSION_3, &data[0], total_data_size, kRpc);
+ // Expect getting pair from key from session observer
+ EXPECT_CALL(session_observer_mock,
+ PairFromKey(message->connection_key(), _, _))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(connection_id), SetArgPointee<2>(session_id)));
+// Expect getting ssl context
+#ifdef ENABLE_SECURITY
+ EXPECT_CALL(session_observer_mock,
+ GetSSLContext(message->connection_key(), message->service_type()))
+ .Times(2)
+ .WillRepeatedly(Return(&ssl_context_mock));
+ AddSecurityManager();
+#endif // ENABLE_SECURITY
+ // Expect send message to mobile
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(
+ FRAME_TYPE_SINGLE, FRAME_DATA_SINGLE, PROTECTION_OFF, kRpc)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendMessageToMobileApp(message, is_final);
+}
+
+TEST_F(ProtocolHandlerImplTest, SendMessageToMobileApp_SendMultiframeMessage) {
+ // Arrange
+ AddSession();
+ const bool is_final = true;
+ const uint32_t total_data_size = MAXIMUM_FRAME_DATA_V2_SIZE * 2;
+ UCharDataVector data(total_data_size);
+ const uint8_t first_consecutive_frame = 0x01;
+ RawMessagePtr message = utils::MakeShared<RawMessage>(
+ connection_key, PROTOCOL_VERSION_3, &data[0], total_data_size, kBulk);
+ // Expect getting pair from key from session observer
+ EXPECT_CALL(session_observer_mock,
+ PairFromKey(message->connection_key(), _, _))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(connection_id), SetArgPointee<2>(session_id)));
+// Expect getting ssl context
+#ifdef ENABLE_SECURITY
+ EXPECT_CALL(session_observer_mock,
+ GetSSLContext(message->connection_key(), message->service_type()))
+ .Times(4)
+ .WillRepeatedly(Return(&ssl_context_mock));
+ AddSecurityManager();
+#endif // ENABLE_SECURITY
+ // Expect sending message frame by frame to mobile
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(
+ FRAME_TYPE_FIRST, FRAME_DATA_FIRST, PROTECTION_OFF, kBulk)))
+ .WillOnce(Return(E_SUCCESS));
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(FRAME_TYPE_CONSECUTIVE,
+ first_consecutive_frame,
+ PROTECTION_OFF,
+ kBulk)))
+ .WillOnce(Return(E_SUCCESS));
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ExpectedMessage(FRAME_TYPE_CONSECUTIVE,
+ FRAME_DATA_LAST_CONSECUTIVE,
+ PROTECTION_OFF,
+ kBulk)))
+ .WillOnce(Return(E_SUCCESS));
+ // Act
+ protocol_handler_impl->SendMessageToMobileApp(message, is_final);
+}
+
} // namespace protocol_handler_test
+} // namespace components
+} // namespace test