summaryrefslogtreecommitdiff
path: root/test/components/security_manager/include/security_manager/security_manager_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/components/security_manager/include/security_manager/security_manager_test.h')
-rw-r--r--test/components/security_manager/include/security_manager/security_manager_test.h798
1 files changed, 0 insertions, 798 deletions
diff --git a/test/components/security_manager/include/security_manager/security_manager_test.h b/test/components/security_manager/include/security_manager/security_manager_test.h
deleted file mode 100644
index e4dd9d1bb..000000000
--- a/test/components/security_manager/include/security_manager/security_manager_test.h
+++ /dev/null
@@ -1,798 +0,0 @@
-/*
- * Copyright (c) 2014, Ford Motor Company
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of the Ford Motor Company nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_COMPONENTS_SECURITY_MANAGER_INCLUDE_SECURITY_MANAGER_SECURITY_MANAGER_TEST_H_
-#define TEST_COMPONENTS_SECURITY_MANAGER_INCLUDE_SECURITY_MANAGER_SECURITY_MANAGER_TEST_H_
-
-#include <gtest/gtest.h>
-#include <string>
-
-#include "utils/byte_order.h"
-#include "protocol/common.h"
-#include "security_manager/security_manager_impl.h"
-
-#include "protocol_handler/session_observer_mock.h"
-#include "protocol_handler/protocol_handler_mock.h"
-#include "protocol_handler/protocol_observer_mock.h"
-#include "security_manager/security_manager_mock.h"
-#include "security_manager/security_query_matcher.h"
-#include "security_manager/crypto_manager_mock.h"
-#include "security_manager/ssl_context_mock.h"
-#include "security_manager/security_manager_listener_mock.h"
-#include "transport_manager/transport_manager_mock.h"
-
-// TODO(EZamakhov): add test on get correct/wrong InternalError
-// TODO(EZamakhov): check connection_key the same and seq_number
-// TODO(EZamakhov): check ::SendData with correct query_id and query_type
-
-namespace test {
-namespace components {
-namespace security_manager_test {
-
-using namespace ::protocol_handler;
-using ::protocol_handler::ServiceType;
-using namespace ::transport_manager;
-using namespace ::security_manager;
-
- // Sample data for handshake data emulation
- const int32_t key = 0x1;
- const int32_t seq_number = 0x2;
- const ServiceType secureServiceType = kControl;
- const uint32_t protocolVersion = PROTOCOL_VERSION_2;
- const bool is_final = false;
-
- const uint8_t handshake_data[] = {0x1, 0x2, 0x3, 0x4, 0x5};
- const size_t handshake_data_size =
- sizeof(handshake_data)/sizeof(handshake_data[0]);
-
- uint8_t handshake_data_out[] = {0x6, 0x7, 0x8};
- uint8_t *handshake_data_out_pointer = handshake_data_out;
- const size_t handshake_data_out_size =
- sizeof(handshake_data_out)/sizeof(handshake_data_out[0]);
-
- using ::security_manager::SecurityQuery;
- using security_manager_test::InternalErrorWithErrId;
- using ::testing::Return;
- using ::testing::ReturnNull;
- using ::testing::DoAll;
- using ::testing::SetArgPointee;
- using ::testing::_;
- using ::security_manager::SecurityManager;
- using ::security_manager::SecurityManagerImpl;
-
- class SecurityManagerTest: public ::testing::Test {
- protected:
- void SetUp() OVERRIDE {
- security_manager_.reset(new SecurityManagerImpl());
- security_manager_->set_session_observer(&mock_session_observer);
- security_manager_->set_protocol_handler(&mock_protocol_handler);
- security_manager_->AddListener(&mock_sm_listener);
- }
- void TearDown() OVERRIDE {
- // Wait call methods in thread
- usleep(100000);
- }
-
- void SetMockCryptoManger() {
- security_manager_->set_crypto_manager(&mock_crypto_manager);
- }
- /*
- * Wrapper for fast emulate recieve SecurityManager::OnMessageReceived
- */
- void call_OnMessageReceived(const uint8_t* const data, uint32_t dataSize,
- const ServiceType serviceType) {
- const ::protocol_handler::RawMessagePtr rawMessagePtr(
- new ::protocol_handler::RawMessage(key, protocolVersion, data, dataSize, serviceType));
- security_manager_->OnMessageReceived(rawMessagePtr);
- }
- /*
- * Wrapper for fast emulate recieve query
- */
- void EmulateMobileMessage(SecurityQuery::QueryHeader header,
- const uint8_t* const data, const uint32_t data_size) {
- // convert to Big-Endian (network) order
- const uint32_t query_id = header.query_id << 8;
- header.query_id = LE_TO_BE32(query_id);
- header.json_size = LE_TO_BE32(header.json_size);
- header.seq_number = LE_TO_BE32(header.seq_number);
-
- const size_t data_sending_size = sizeof(header) + data_size;
- uint8_t* data_sending = new uint8_t[data_sending_size];
- memcpy(data_sending, &header, sizeof(header));
- memcpy(data_sending + sizeof(header), data, data_size);
-
- call_OnMessageReceived(data_sending, data_sending_size,
- kControl);
- delete[] data_sending;
- }
- /*
- * Wrapper for fast emulate recieve Handshake
- */
- void EmulateMobileMessageHandShake(const uint8_t* const data,
- const uint32_t data_size,
- const int repeat_count = 1) {
- const SecurityQuery::QueryHeader header(
- SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_HANDSHAKE_DATA, seq_number);
- for (int c = 0; c < repeat_count; ++c) {
- EmulateMobileMessage(header, data, data_size);
- }
- }
- ::utils::SharedPtr<SecurityManagerImpl> security_manager_;
- // Strict mocks (same as all methods EXPECT_CALL().Times(0))
- testing::StrictMock<protocol_handler_test::SessionObserverMock> mock_session_observer;
- testing::StrictMock<protocol_handler_test::ProtocolHandlerMock> mock_protocol_handler;
- testing::StrictMock<security_manager_test::CryptoManagerMock> mock_crypto_manager;
- testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context_new;
- testing::StrictMock<security_manager_test::SSLContextMock> mock_ssl_context_exists;
- testing::StrictMock<security_manager_test::SMListenerMock> mock_sm_listener;
- };
- // Test Bodies
-
- /*
- * SecurityManager shall not set NULL interfaces
- * and shall not call any methodes
- */
- TEST_F(SecurityManagerTest, SetNULL_Intefaces) {
- security_manager_.reset(new SecurityManagerImpl());
- security_manager_->set_session_observer(NULL);
- security_manager_->set_protocol_handler(NULL);
- security_manager_->set_crypto_manager(NULL);
- security_manager_->AddListener(NULL);
- // additional check not null config section
- EXPECT_TRUE(SecurityManagerImpl::ConfigSection());
- }
- /*
- * Add/Remove NULL listeners do not any additional logics
- */
- TEST_F(SecurityManagerTest, Listeners_NULL) {
- security_manager_->AddListener(NULL);
- security_manager_->RemoveListener(NULL);
- }
- /*
- * Twice remove listener
- */
- TEST_F(SecurityManagerTest, Listeners_TwiceRemoveListeners) {
- security_manager_->RemoveListener(&mock_sm_listener);
- security_manager_->RemoveListener(&mock_sm_listener);
- }
- /*
- * Add and remove listeners
- */
- TEST_F(SecurityManagerTest, Listeners_NoListeners) {
- // Check correct removing listener
- security_manager_->RemoveListener(&mock_sm_listener);
-
- // Expect no calls
- testing::StrictMock<SMListenerMock> mock_listener2;
- security_manager_->AddListener(&mock_listener2);
- security_manager_->RemoveListener(&mock_listener2);
-
- security_manager_->NotifyListenersOnHandshakeDone(key, true);
- security_manager_->NotifyListenersOnHandshakeDone(key, false);
- }
- /*
- * Notifying two listeners
- */
- TEST_F(SecurityManagerTest, Listeners_Notifying) {
- // Check correct removing listener
- security_manager_->RemoveListener(&mock_sm_listener);
-
- testing::StrictMock<SMListenerMock> mock_listener1;
- testing::StrictMock<SMListenerMock> mock_listener2;
-
- const bool first_call_value = true;
- // Expect call both listeners on 1st call
- EXPECT_CALL(mock_listener1,
- OnHandshakeDone(key, first_call_value)).
- // Emulate false (reject) result
- WillOnce(Return(false));
- EXPECT_CALL(mock_listener2,
- OnHandshakeDone(key, first_call_value)).
- // Emulate true (accept) result
- WillOnce(Return(true));
-
- const bool second_call_value = false;
- // Expect call last listener on 2d call
- EXPECT_CALL(mock_listener1,
- OnHandshakeDone(key, second_call_value)).
- // Emulate false (reject) result
- WillOnce(Return(true));
-
- // Expect no call 3d call
-
- security_manager_->AddListener(&mock_listener1);
- security_manager_->AddListener(&mock_listener2);
- // 1st call
- security_manager_->NotifyListenersOnHandshakeDone(key, first_call_value);
- // 2nd call
- security_manager_->NotifyListenersOnHandshakeDone(key, second_call_value);
- // 3nd call
- security_manager_->NotifyListenersOnHandshakeDone(key, false);
- }
- /*
- * SecurityManager with NULL CryptoManager shall send
- * InternallError (ERROR_NOT_SUPPORTED) on any Query
- */
- TEST_F(SecurityManagerTest, SecurityManager_NULLCryptoManager) {
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_NOT_SUPPORTED), is_final)).
- Times(1);
- const SecurityQuery::QueryHeader header(
- SecurityQuery::REQUEST,
- // It could be any query id
- SecurityQuery::INVALID_QUERY_ID);
- const uint8_t data = 0;
- EmulateMobileMessage(header, &data, 1);
- }
- /*
- * Shall skip all OnMobileMessageSent
- */
- TEST_F(SecurityManagerTest, OnMobileMessageSent) {
- const ::protocol_handler::RawMessagePtr rawMessagePtr(
- new ::protocol_handler::RawMessage(key, protocolVersion, NULL, 0));
- security_manager_->OnMobileMessageSent(rawMessagePtr);
- }
- /*
- * Shall skip all not-Secure messages
- */
- TEST_F(SecurityManagerTest, GetWrongServiceType) {
- // Call with wrong Service type
- call_OnMessageReceived(NULL, 0, kRpc);
- call_OnMessageReceived(NULL, 0, kAudio);
- call_OnMessageReceived(NULL, 0, kMobileNav);
- call_OnMessageReceived(NULL, 0, kBulk);
- call_OnMessageReceived(NULL, 0, kInvalidServiceType);
- }
- /*
- * Shall send InternallError on null data received
- */
- TEST_F(SecurityManagerTest, GetEmptyQuery) {
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INVALID_QUERY_SIZE), is_final)).
- Times(1);
- // Call with NULL data
- call_OnMessageReceived(NULL, 0, secureServiceType);
- }
- /*
- * Shall send InternallError on null data received
- */
- TEST_F(SecurityManagerTest, GetWrongJSONSize) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INVALID_QUERY_SIZE), is_final)).
- Times(1);
- SecurityQuery::QueryHeader header(
- SecurityQuery::REQUEST,
- SecurityQuery::INVALID_QUERY_ID);
- header.json_size = 0x0FFFFFFF;
- EmulateMobileMessage(header, NULL, 0);
- }
- /*
- * Shall send InternallError on INVALID_QUERY_ID
- */
- TEST_F(SecurityManagerTest, GetInvalidQueryId) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INVALID_QUERY_ID), is_final)).
- Times(1);
- const SecurityQuery::QueryHeader header(
- SecurityQuery::REQUEST,
- SecurityQuery::INVALID_QUERY_ID);
- const uint8_t data = 0;
- EmulateMobileMessage(header, &data, 1);
- }
- /*
- * Shall send Internall Error on call
- * CreateSSLContext for already protected connections
- */
- TEST_F(SecurityManagerTest, CreateSSLContext_ServiceAlreadyProtected) {
- SetMockCryptoManger();
-
- // Return mock SSLContext
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(Return(&mock_ssl_context_new));
-
- const security_manager::SSLContext* rezult = security_manager_->CreateSSLContext(key);
- EXPECT_EQ(rezult, &mock_ssl_context_new);
- }
- /*
- * Shall send Internall Error on error create SSL
- */
- TEST_F(SecurityManagerTest, CreateSSLContext_ErrorCreateSSL) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INTERNAL), is_final)).
- Times(1);
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(ReturnNull());
- EXPECT_CALL(mock_crypto_manager,
- CreateSSLContext()).
- WillOnce(ReturnNull());
-
- const bool rezult = security_manager_->CreateSSLContext(key);
- EXPECT_FALSE(rezult);
- }
- /*
- * Shall send InternalError with SERVICE_NOT_FOUND
- * on getting any Error with call SetSSLContext
- */
- TEST_F(SecurityManagerTest, CreateSSLContext_SetSSLContextError) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_UNKWOWN_INTERNAL_ERROR), is_final)).
- Times(1);
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(ReturnNull());
- EXPECT_CALL(mock_crypto_manager,
- CreateSSLContext()).
- WillOnce(Return(&mock_ssl_context_new));
- EXPECT_CALL(mock_crypto_manager,
- ReleaseSSLContext(&mock_ssl_context_new)).
- Times(1);
- EXPECT_CALL(mock_session_observer,
- SetSSLContext(key, &mock_ssl_context_new)).
- WillOnce(Return(SecurityManager::ERROR_UNKWOWN_INTERNAL_ERROR));
-
- const bool rezult = security_manager_->CreateSSLContext(key);
- EXPECT_FALSE(rezult);
- }
- /*
- * Shall protect connection on correct call CreateSSLContext
- */
- TEST_F(SecurityManagerTest, CreateSSLContext_Success) {
- SetMockCryptoManger();
- // Expect no Errors
- // Expect no notifying listeners - it will be done after handshake
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(ReturnNull()).
- // additional check for debug code
- WillOnce(Return(&mock_ssl_context_exists));
- EXPECT_CALL(mock_crypto_manager,
- CreateSSLContext()).
- WillOnce(Return(&mock_ssl_context_new));
- EXPECT_CALL(mock_session_observer,
- SetSSLContext(key, &mock_ssl_context_new)).
- WillOnce(Return(SecurityManager::ERROR_SUCCESS));
-
- const bool rezult = security_manager_->CreateSSLContext(key);
- EXPECT_TRUE(rezult);
- }
- /*
- * Shall send InternallError on call StartHandshake for uprotected service
- */
- TEST_F(SecurityManagerTest, StartHandshake_ServiceStillUnprotected) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_INTERNAL
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INTERNAL), is_final)).
- Times(1);
- // Expect notifying listeners (unsuccess)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, false)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(ReturnNull());
-
- security_manager_->StartHandshake(key);
- }
- /*
- * Shall send InternallError on SSL error and notify listeners
- */
- TEST_F(SecurityManagerTest, StartHandshake_SSLInternalError) {
- SetMockCryptoManger();
-
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INTERNAL), is_final)).
- Times(1);
- // Expect notifying listeners (unsuccess)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, false)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(Return(&mock_ssl_context_exists));
- EXPECT_CALL(mock_ssl_context_exists,
- IsInitCompleted()).
- WillOnce(Return(false));
- EXPECT_CALL(mock_ssl_context_exists,
- StartHandshake(_, _)).
- WillOnce(DoAll(SetArgPointee<0>(handshake_data_out_pointer),
- SetArgPointee<1>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Fail)));
-
- security_manager_->StartHandshake(key);
- }
- /*
- * Shall send data on call StartHandshake
- */
- TEST_F(SecurityManagerTest, StartHandshake_SSLInitIsNotComplete) {
- SetMockCryptoManger();
-
- // Expect send one message (with correct pointer and size data)
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(_, is_final)).
- Times(1);
-
- // Return mock SSLContext
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- Times(3).
- WillRepeatedly(Return(&mock_ssl_context_exists));
- // Expect initialization check on each call StartHandshake
- EXPECT_CALL(mock_ssl_context_exists,
- IsInitCompleted()).
- Times(3).
- WillRepeatedly(Return(false));
-
- // Emulate SSLContext::StartHandshake with different parameters
- // Only on both correct - data and size shall be send message to mobile app
- EXPECT_CALL(mock_ssl_context_exists,
- StartHandshake(_, _)).
- WillOnce(DoAll(SetArgPointee<0>(handshake_data_out_pointer),
- SetArgPointee<1>(0),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<0>((uint8_t*)NULL),
- SetArgPointee<1>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<0>(handshake_data_out_pointer),
- SetArgPointee<1>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Success)));
-
- security_manager_->StartHandshake(key);
- security_manager_->StartHandshake(key);
- security_manager_->StartHandshake(key);
- }
- /*
- * Shall notify listeners on call StartHandshake after SSLContext initialization complete
- */
- TEST_F(SecurityManagerTest, StartHandshake_SSLInitIsComplete) {
- SetMockCryptoManger();
- // Expect no message send
- // Expect notifying listeners (success)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, true)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(Return(&mock_ssl_context_exists));
- EXPECT_CALL(mock_ssl_context_exists,
- IsInitCompleted()).
- WillOnce(Return(true));
-
- security_manager_->StartHandshake(key);
- }
- /*
- * Shall send InternallError on
- * getting SEND_HANDSHAKE_DATA with NULL data
- */
- TEST_F(SecurityManagerTest, ProccessHandshakeData_WrongDataSize) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_INVALID_QUERY_SIZE), is_final)).
- Times(1);
- EmulateMobileMessageHandShake(NULL, 0);
- }
- /*
- * Shall send InternallError on
- * getting SEND_HANDSHAKE_DATA from mobile side
- * for service which is not protected
- */
- TEST_F(SecurityManagerTest, ProccessHandshakeData_ServiceNotProtected) {
- SetMockCryptoManger();
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_SERVICE_NOT_PROTECTED), is_final)).
- Times(1);
- // Expect notifying listeners (unsuccess)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, false)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- WillOnce(ReturnNull());
-
- const uint8_t data[] = {0x1, 0x2};
- EmulateMobileMessageHandShake(data, sizeof(data)/sizeof(data[0]));
- }
- /*
- * Shall send InternallError on getting
- * SEND_HANDSHAKE_DATA from mobile side with invalid handshake
- * data (DoHandshakeStep return NULL pointer)
- */
- TEST_F(SecurityManagerTest, ProccessHandshakeData_InvalidData) {
- SetMockCryptoManger();
-
- // Count handshake calls
- const int handshake_emulates = 4;
-
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- InternalErrorWithErrId(
- SecurityManager::ERROR_SSL_INVALID_DATA), is_final)).
- Times(handshake_emulates);
- // Expect notifying listeners (unsuccess)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, false)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- Times(handshake_emulates).
- WillRepeatedly(Return(&mock_ssl_context_exists));
- // Emulate DoHandshakeStep fail logics
- EXPECT_CALL(mock_ssl_context_exists,
- DoHandshakeStep(_, handshake_data_size, _, _)).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_AbnormalFail))).
- WillOnce(DoAll(SetArgPointee<2>((uint8_t*)NULL),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_AbnormalFail))).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(0),
- Return(security_manager::SSLContext::
- Handshake_Result_AbnormalFail))).
- WillOnce(DoAll(SetArgPointee<2>((uint8_t*)NULL),
- SetArgPointee<3>(0),
- Return(security_manager::SSLContext::
- Handshake_Result_AbnormalFail)));
-
-
- // On each wrong handshake will be asked error
- EXPECT_CALL(mock_ssl_context_exists,
- LastError()).Times(handshake_emulates);
-
- // Emulate handshare #handshake_emulates times for 5 cases
- EmulateMobileMessageHandShake(handshake_data, handshake_data_size,
- handshake_emulates);
- }
- /*
- * Shall send HandshakeData on getting SEND_HANDSHAKE_DATA from mobile side
- * with correct handshake data Check Fail and sussecc states
- */
- TEST_F(SecurityManagerTest, ProccessHandshakeData_Answer) {
- SetMockCryptoManger();
- // Count handshake calls
- const int handshake_emulates = 2;
-
- // Expect InternalError with ERROR_ID
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(
- // FIXME : !!!
- _, is_final)).
- Times(handshake_emulates);
- // Expect notifying listeners (unsuccess)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, false)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_ssl_context_exists,
- IsInitCompleted()).
- Times(handshake_emulates).
- WillRepeatedly(Return(false));
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- Times(handshake_emulates).
- WillRepeatedly(Return(&mock_ssl_context_exists));
-
- // Emulate DoHandshakeStep correct logics
- EXPECT_CALL(mock_ssl_context_exists,
- DoHandshakeStep(_, handshake_data_size, _, _)).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Fail)));
-
- EmulateMobileMessageHandShake(handshake_data, handshake_data_size,
- handshake_emulates);
- }
- /*
- * Shall call all listeners on success end handshake
- * and return handshake data
- * Check Fail and sussecc states
- */
- TEST_F(SecurityManagerTest, ProccessHandshakeData_HandShakeFinished) {
- SetMockCryptoManger();
- // Count handshake calls
- const int handshake_emulates = 6;
- // Expect no errors
- // Expect notifying listeners (success)
- EXPECT_CALL(mock_sm_listener,
- OnHandshakeDone(key, true)).
- WillOnce(Return(true));
-
- // Emulate SessionObserver and CryptoManager result
- EXPECT_CALL(mock_session_observer,
- GetSSLContext(key, kControl)).
- Times(handshake_emulates).
- WillRepeatedly(Return(&mock_ssl_context_exists));
- EXPECT_CALL(mock_ssl_context_exists,
- IsInitCompleted()).
- Times(handshake_emulates).
- WillRepeatedly(Return(true));
- // FIXME(EZamakhov): add DoHandshakeStep matcher for compare handshake data
- EXPECT_CALL(mock_ssl_context_exists,
- DoHandshakeStep(_, handshake_data_size, _, _)).
- // two states with correct out data
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Fail))).
- // two states with with null pointer data
- WillOnce(DoAll(SetArgPointee<2>((uint8_t*)NULL),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<2>((uint8_t*)NULL),
- SetArgPointee<3>(handshake_data_out_size),
- Return(security_manager::SSLContext::
- Handshake_Result_Fail))).
- // two states with with null data size
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(0),
- Return(security_manager::SSLContext::
- Handshake_Result_Success))).
- WillOnce(DoAll(SetArgPointee<2>(handshake_data_out_pointer),
- SetArgPointee<3>(0),
- Return(security_manager::SSLContext::
- Handshake_Result_Success)));
-
- // Expect send two message (with correct pointer and size data)
- EXPECT_CALL(mock_protocol_handler,
- SendMessageToMobileApp(_, is_final)).
- Times(2);
-
- // Expect NO InternalError with ERROR_ID
- EmulateMobileMessageHandShake(handshake_data, handshake_data_size,
- handshake_emulates);
- }
- /*
- * Shall not any query on getting empty SEND_INTERNAL_ERROR
- */
- TEST_F(SecurityManagerTest, GetInternalError_NullData) {
- SetMockCryptoManger();
-
- const SecurityQuery::QueryHeader header(
- SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_INTERNAL_ERROR, 0);
- EmulateMobileMessage(header, NULL, 0);
- }
- /*
- * Shall not send any query on getting SEND_INTERNAL_ERROR
- */
- TEST_F(SecurityManagerTest, GetInternalError) {
- SetMockCryptoManger();
-
- const SecurityQuery::QueryHeader header(
- SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_INTERNAL_ERROR, 0);
- const uint8_t data[] = {0x1, 0x2};
- EmulateMobileMessage(header, data, sizeof(data)/sizeof(data[0]));
- }
- /*
- * Shall not send any query on getting SEND_INTERNAL_ERROR with error string
- */
- TEST_F(SecurityManagerTest, GetInternalError_WithErrText) {
- SetMockCryptoManger();
-
- SecurityQuery::QueryHeader header(
- SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_INTERNAL_ERROR, 0);
- std::string error("JSON wrong string");
- header.json_size = error.size();
- EmulateMobileMessage(header,
- reinterpret_cast<const uint8_t*>(error.c_str()),
- error.size());
- }
- /*
- * Shall not send any query on getting SEND_INTERNAL_ERROR with error string
- */
- TEST_F(SecurityManagerTest, GetInternalError_WithErrJSONText) {
- SetMockCryptoManger();
-
- SecurityQuery::QueryHeader header(
- SecurityQuery::NOTIFICATION,
- SecurityQuery::SEND_INTERNAL_ERROR, 0);
- std::string error(" { \"id\": 1 } ");
- header.json_size = error.size();
- EmulateMobileMessage(header,
- reinterpret_cast<const uint8_t*>(error.c_str()),
- error.size());
- }
-} // namespace security_manager_test
-} // namespace components
-} // namespace test
-#endif // TEST_COMPONENTS_SECURITY_MANAGER_INCLUDE_SECURITY_MANAGER_SECURITY_MANAGER_TEST_H_