diff options
author | Shobhit Adlakha <adlakhashobhit@gmail.com> | 2019-07-22 09:52:37 -0400 |
---|---|---|
committer | Shobhit Adlakha <adlakhashobhit@gmail.com> | 2019-07-22 09:52:37 -0400 |
commit | a72e667bfc1df405ea9f8360e6b38c25323002f4 (patch) | |
tree | 70508453e876113454815af258390fe46dec1744 /src/components/transport_manager/test/transport_adapter_test.cc | |
parent | 4c148aafa5a21ee11f69af75e37afbf961a8766d (diff) | |
parent | 5e6ea2c18e35b56a3109a0a5c1bb962b9445a094 (diff) | |
download | sdl_core-a72e667bfc1df405ea9f8360e6b38c25323002f4.tar.gz |
Fixed merge conflicts and updated branch
Diffstat (limited to 'src/components/transport_manager/test/transport_adapter_test.cc')
-rw-r--r-- | src/components/transport_manager/test/transport_adapter_test.cc | 450 |
1 files changed, 438 insertions, 12 deletions
diff --git a/src/components/transport_manager/test/transport_adapter_test.cc b/src/components/transport_manager/test/transport_adapter_test.cc index 9e602332c6..56386db201 100644 --- a/src/components/transport_manager/test/transport_adapter_test.cc +++ b/src/components/transport_manager/test/transport_adapter_test.cc @@ -31,32 +31,35 @@ */ #include "gtest/gtest.h" -#include "transport_manager/transport_adapter/mock_device_scanner.h" +#include "transport_manager/mock_transport_manager_settings.h" #include "transport_manager/transport_adapter/mock_client_connection_listener.h" -#include "transport_manager/transport_adapter/mock_server_connection_factory.h" -#include "transport_manager/transport_adapter/mock_device.h" #include "transport_manager/transport_adapter/mock_connection.h" -#include "transport_manager/transport_adapter/mock_transport_adapter_listener.h" +#include "transport_manager/transport_adapter/mock_device.h" +#include "transport_manager/transport_adapter/mock_device_scanner.h" +#include "transport_manager/transport_adapter/mock_server_connection_factory.h" #include "transport_manager/transport_adapter/mock_transport_adapter_impl.h" -#include "transport_manager/mock_transport_manager_settings.h" +#include "transport_manager/transport_adapter/mock_transport_adapter_listener.h" +#include "utils/test_async_waiter.h" +#include "protocol/raw_message.h" +#include "transport_manager/cloud/cloud_device.h" +#include "transport_manager/cloud/cloud_websocket_transport_adapter.h" +#include "transport_manager/transport_adapter/connection.h" +#include "transport_manager/transport_adapter/transport_adapter_controller.h" #include "transport_manager/transport_adapter/transport_adapter_impl.h" #include "transport_manager/transport_adapter/transport_adapter_listener.h" -#include "transport_manager/transport_adapter/transport_adapter_controller.h" -#include "transport_manager/transport_adapter/connection.h" -#include "protocol/raw_message.h" -#include "resumption/last_state_impl.h" #include "config_profile/profile.h" +#include "resumption/last_state_impl.h" namespace test { namespace components { namespace transport_manager_test { -using ::testing::Return; -using ::testing::ReturnRef; using ::testing::_; using ::testing::NiceMock; +using ::testing::Return; +using ::testing::ReturnRef; using namespace ::transport_manager; using namespace ::protocol_handler; @@ -73,11 +76,149 @@ class TransportAdapterTest : public ::testing::Test { .WillByDefault(Return(true)); } + void SetDefaultExpectations(MockTransportAdapterImpl& adapter) { + ON_CALL(adapter, GetDeviceType()) + .WillByDefault(Return(DeviceType::UNKNOWN)); + } + NiceMock<MockTransportManagerSettings> transport_manager_settings; resumption::LastStateImpl last_state_; std::string dev_id; std::string uniq_id; int app_handle; + +#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT) + struct TestEndpoint { + std::string test_string; + std::string host; + std::string port; + std::string target; + }; + + CloudAppProperties test_cloud_properties_{.endpoint = "", + .certificate = "no cert", + .enabled = true, + .auth_token = "no auth token", + .cloud_transport_type = "WS", + .hybrid_app_preference = "CLOUD"}; + std::vector<std::string> kWebsocketProtocols{"ws://", "wss://"}; + + std::vector<TestEndpoint> kValidTestEndpoints{ + // Host and port + TestEndpoint{"localhost:40/", "localhost", "40", "/"}, + TestEndpoint{"[::1]:40", "[::1]", "40", "/"}, + TestEndpoint{"username:password@localhost.com:80", + "username:password@localhost.com", + "80", + "/"}, + // With path + TestEndpoint{ + "localhost:440/file.html", "localhost", "440", "/file.html/"}, + TestEndpoint{"101.180.1.213:23234/folder/img_index(1)/file.html", + "101.180.1.213", + "23234", + "/folder/img_index(1)/file.html/"}, + TestEndpoint{"[2600:3c00::f03c:91ff:fe73:2b08]:31333/folder/img_index(1)/" + "file.html", + "[2600:3c00::f03c:91ff:fe73:2b08]", + "31333", + "/folder/img_index(1)/file.html/"}, + // With query and/or fragment + TestEndpoint{ + "username@localhost:22/folder/img_index(1)/" + "file.html?eventId=2345&eventName='some%20event'&eventSuccess=true", + "username@localhost", + "22", + "/folder/img_index(1)/file.html/" + "?eventId=2345&eventName='some%20event'&eventSuccess=" + "true"}, + TestEndpoint{"username@localhost.com:80/folder/img_index(1)/" + "file.html?eventId=2345&eventName='some%20event'&" + "eventSuccess=true#section1", + "username@localhost.com", + "80", + "/folder/img_index(1)/file.html/" + "?eventId=2345&eventName='some%20event'&eventSuccess=true#" + "section1"}, + TestEndpoint{ + "localhost:443/" + "?eventId=2345&eventName='some%20event'&eventSuccess=true#section1", + "localhost", + "443", + "/?eventId=2345&eventName='some%20event'&eventSuccess=true#" + "section1"}, + TestEndpoint{"a1-b2.com:443/folder/img_index(1)/file.html#section1", + "a1-b2.com", + "443", + "/folder/img_index(1)/file.html/#section1"}, + TestEndpoint{"a1-b2.com:23#section1", "a1-b2.com", "23", "/#section1"}}; + + std::vector<TestEndpoint> kInvalidTestEndpoints{ + // Invalid hostname + TestEndpoint{"/localhost:80", "localhost", "80", "/"}, + TestEndpoint{"local?host:80", "local?host", "80", "/"}, + TestEndpoint{"local#host:80", "local#host", "80", "/"}, + TestEndpoint{"local\%host:80", "local\%host", "80", "/"}, + TestEndpoint{"local\\host:80", "local\\host", "80", "/"}, + TestEndpoint{"local/host:80", "local/host", "80", "/"}, + TestEndpoint{"local host:80", "local host", "80", "/"}, + TestEndpoint{"local\thost:80", "local\thost", "80", "/"}, + TestEndpoint{":80#section1", "", "80", "/#section1"}, + // Invalid port + TestEndpoint{"username:password@localhost.com", + "username:password@localhost.com", + "", + "/"}, + TestEndpoint{"username:password@localhost.com:5", + "username:password@localhost.com", + "5", + "/"}, + TestEndpoint{"201.123.213:2h32/", "201.123.213", "2h32", "/"}}; + std::vector<TestEndpoint> kIncorrectTestEndpoints{ + // Incorrect port number + TestEndpoint{"201.123.1.213:232454/folder/img_index(1)/file.html", + "201.123.1.213", + "232454", + "/folder/img_index(1)/file.html/"}, + // Incorrect path + TestEndpoint{"201.123.1.213:232//folder/img_index(1)/file.html", + "201.123.1.213", + "232", + "//folder/img_index(1)/file.html/"}, + TestEndpoint{"201.123.1.213:232/folder/img_index(1)//file.html", + "201.123.1.213", + "232", + "/folder/img_index(1)//file.html/"}, + TestEndpoint{"201.123.1.213:232/folder/img index(1)//file.html", + "201.123.1.213", + "232", + "/folder/img index(1)//file.html/"}, + TestEndpoint{"201.123.1.213:232/folder/img\tindex(1)//file.html", + "201.123.1.213", + "232", + "/folder/img\tindex(1)//file.html/"}, + // Incorrect query + TestEndpoint{"username@localhost:443/?eventId=2345&eventName='some " + "event'&eventSuccess=true", + "username@localhost", + "443", + "?eventId=2345&eventName='some event'&eventSuccess=true"}, + TestEndpoint{"username@localhost:443/" + "?eventId=2345&eventName='some\tevent'&eventSuccess=true", + "username@localhost", + "443", + "?eventId=2345&eventName='some\tevent'&eventSuccess=true"}, + // Incorrect fragment + TestEndpoint{"a1(b2).com:80/folder/img_index(1)/file.html#section 1", + "a1(b2).com", + "80", + "/folder/img_index(1)/file.html#section 1"}, + TestEndpoint{"a1(b2).com:80/folder/img_index(1)/file.html#section\t1", + "a1(b2).com", + "80", + "/folder/img_index(1)/file.html#section\t1"}}; + +#endif // CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT }; TEST_F(TransportAdapterTest, Init) { @@ -89,6 +230,7 @@ TEST_F(TransportAdapterTest, Init) { clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -123,6 +265,7 @@ TEST_F(TransportAdapterTest, SearchDevices_DeviceNotInitialized) { MockDeviceScanner* dev_mock = new MockDeviceScanner(); MockTransportAdapterImpl transport_adapter( dev_mock, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -138,6 +281,7 @@ TEST_F(TransportAdapterTest, SearchDevices_DeviceInitialized) { MockDeviceScanner* dev_mock = new MockDeviceScanner(); MockTransportAdapterImpl transport_adapter( dev_mock, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -153,6 +297,7 @@ TEST_F(TransportAdapterTest, SearchDevices_DeviceInitialized) { TEST_F(TransportAdapterTest, SearchDeviceDone_DeviceExisting) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -169,6 +314,7 @@ TEST_F(TransportAdapterTest, SearchDeviceDone_DeviceExisting) { TEST_F(TransportAdapterTest, SearchDeviceFailed) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -183,6 +329,7 @@ TEST_F(TransportAdapterTest, SearchDeviceFailed) { TEST_F(TransportAdapterTest, AddDevice) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -200,6 +347,7 @@ TEST_F(TransportAdapterTest, Connect_ServerNotSupported) { MockClientConnectionListener* clientMock = new MockClientConnectionListener(); MockTransportAdapterImpl transport_adapter( NULL, NULL, clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -217,6 +365,7 @@ TEST_F(TransportAdapterTest, Connect_ServerNotInitialized) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -234,6 +383,7 @@ TEST_F(TransportAdapterTest, Connect_Success) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -252,6 +402,7 @@ TEST_F(TransportAdapterTest, Connect_DeviceAddedTwice) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -274,6 +425,7 @@ TEST_F(TransportAdapterTest, Connect_DeviceAddedTwice) { TEST_F(TransportAdapterTest, ConnectDevice_ServerNotAdded_DeviceAdded) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -292,12 +444,14 @@ TEST_F(TransportAdapterTest, ConnectDevice_ServerNotAdded_DeviceAdded) { TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::FAIL, res); + EXPECT_NE(ConnectionStatus::CONNECTED, mockdev->connection_status()); } TEST_F(TransportAdapterTest, ConnectDevice_DeviceNotAdded) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -318,6 +472,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -341,14 +496,53 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded) { EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, res); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); EXPECT_CALL(*serverMock, Terminate()); } +TEST_F(TransportAdapterTest, ConnectDevice_DeviceAdded_ConnectFailedRetry) { + MockServerConnectionFactory* server_mock = new MockServerConnectionFactory(); + MockTransportAdapterImpl transport_adapter( + NULL, server_mock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); + + EXPECT_CALL(*server_mock, Init()).WillOnce(Return(TransportAdapter::OK)); + EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); + transport_adapter.Init(); + + std::shared_ptr<MockDevice> mockdev = + std::make_shared<MockDevice>(dev_id, uniq_id); + transport_adapter.AddDevice(mockdev); + + std::vector<std::string> dev_list = transport_adapter.GetDeviceList(); + ASSERT_EQ(1u, dev_list.size()); + EXPECT_EQ(uniq_id, dev_list[0]); + + int app_handle = 1; + std::vector<int> int_list = {app_handle}; + EXPECT_CALL(*mockdev, GetApplicationList()).WillOnce(Return(int_list)); + + EXPECT_CALL(*server_mock, IsInitialised()).WillOnce(Return(true)); + EXPECT_CALL(*server_mock, CreateConnection(uniq_id, app_handle)) + .WillOnce(Return(TransportAdapter::FAIL)); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + EXPECT_CALL(transport_adapter, GetDeviceType()) + .WillOnce(Return(DeviceType::CLOUD_WEBSOCKET)); + EXPECT_CALL(transport_manager_settings, cloud_app_max_retry_attempts()) + .WillOnce(Return(0)); + TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); + EXPECT_EQ(TransportAdapter::FAIL, res); + EXPECT_EQ(ConnectionStatus::PENDING, mockdev->connection_status()); + + EXPECT_CALL(*server_mock, Terminate()); +} + TEST_F(TransportAdapterTest, ConnectDevice_DeviceAddedTwice) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -372,6 +566,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAddedTwice) { EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, res); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); // Try to connect device second time @@ -382,6 +577,7 @@ TEST_F(TransportAdapterTest, ConnectDevice_DeviceAddedTwice) { EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); TransportAdapter::Error newres = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, newres); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); EXPECT_CALL(*serverMock, Terminate()); } @@ -390,6 +586,7 @@ TEST_F(TransportAdapterTest, Disconnect_ConnectDoneSuccess) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -416,10 +613,221 @@ TEST_F(TransportAdapterTest, Disconnect_ConnectDoneSuccess) { EXPECT_CALL(*serverMock, Terminate()); } +#if defined(CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT) +TEST_F(TransportAdapterTest, FindPending) { + MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); + MockTransportAdapterImpl transport_adapter( + NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); + + EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); + EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); + transport_adapter.Init(); + + MockTransportAdapterListener mock_listener; + transport_adapter.AddListener(&mock_listener); + + std::shared_ptr<MockDevice> mockdev = + std::make_shared<MockDevice>(dev_id, uniq_id); + DeviceVector devices{mockdev}; + transport_adapter.SearchDeviceDone(devices); + + // Create cloud app device with connection in pending state + std::shared_ptr<MockConnection> connection = + std::make_shared<MockConnection>(); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + transport_adapter.ConnectionCreated(connection, uniq_id, 0); + transport_adapter.ConnectPending(uniq_id, 0); + + std::vector<std::string> dev_list = transport_adapter.GetDeviceList(); + ASSERT_EQ(1u, dev_list.size()); + EXPECT_EQ(uniq_id, dev_list[0]); + EXPECT_EQ(ConnectionStatus::PENDING, mockdev->connection_status()); + + ConnectionSPtr mock_connection = + transport_adapter.FindPendingConnection(uniq_id, 0); + ASSERT_TRUE(mock_connection.use_count() != 0); + + ConnectionSPtr mock_connection_fake = + transport_adapter.FindPendingConnection(uniq_id, 1); + ASSERT_TRUE(mock_connection_fake.use_count() == 0); +} + +TEST_F(TransportAdapterTest, + Pending_Connect_Disconnect_ConnectDoneSuccess_PendingDeviceAdded) { + MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); + MockTransportAdapterImpl transport_adapter( + NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); + + EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); + EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); + transport_adapter.Init(); + + MockTransportAdapterListener mock_listener; + transport_adapter.AddListener(&mock_listener); + + std::shared_ptr<MockDevice> mockdev = + std::make_shared<MockDevice>(dev_id, uniq_id); + DeviceVector devices{mockdev}; + transport_adapter.SearchDeviceDone(devices); + + // Create cloud app device with connection in pending state + std::shared_ptr<MockConnection> connection = + std::make_shared<MockConnection>(); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + transport_adapter.ConnectionCreated(connection, uniq_id, 0); + transport_adapter.ConnectPending(uniq_id, 0); + + std::vector<std::string> dev_list = transport_adapter.GetDeviceList(); + ASSERT_EQ(1u, dev_list.size()); + EXPECT_EQ(uniq_id, dev_list[0]); + EXPECT_EQ(ConnectionStatus::PENDING, mockdev->connection_status()); + + // Connect cloud app + int app_handle = 0; + std::vector<int> int_list = {app_handle}; + EXPECT_CALL(*mockdev, GetApplicationList()).WillOnce(Return(int_list)); + + EXPECT_CALL(*serverMock, IsInitialised()).WillOnce(Return(true)); + EXPECT_CALL(*serverMock, CreateConnection(uniq_id, app_handle)) + .WillOnce(Return(TransportAdapter::OK)); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + + TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); + + EXPECT_EQ(TransportAdapter::OK, res); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); + + auto mock_connection = std::make_shared<MockConnection>(); + transport_adapter.ConnectionCreated(mock_connection, dev_id, app_handle); + + EXPECT_CALL(transport_adapter, Store()); + transport_adapter.ConnectDone(dev_id, app_handle); + + // Disconnect cloud app + EXPECT_CALL(*mock_connection, Disconnect()) + .WillOnce(Return(TransportAdapter::OK)); + TransportAdapter::Error new_res = + transport_adapter.Disconnect(dev_id, app_handle); + EXPECT_EQ(TransportAdapter::OK, new_res); + + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + EXPECT_CALL(transport_adapter, GetDeviceType()) + .WillOnce(Return(DeviceType::CLOUD_WEBSOCKET)); + EXPECT_CALL(mock_listener, + OnDisconnectDeviceDone(&transport_adapter, uniq_id)); + EXPECT_CALL(mock_listener, OnDeviceListUpdated(&transport_adapter)).Times(2); + EXPECT_CALL(transport_adapter, Store()); + transport_adapter.DisconnectDone(uniq_id, 0); + + dev_list = transport_adapter.GetDeviceList(); + ASSERT_EQ(0u, dev_list.size()); + + // Recreate device and put cloud app back into pending state + std::shared_ptr<MockDevice> mockdev2 = + std::make_shared<MockDevice>(dev_id, uniq_id); + DeviceVector devices2{mockdev2}; + transport_adapter.SearchDeviceDone(devices2); + + std::shared_ptr<MockConnection> connection2 = + std::make_shared<MockConnection>(); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)) + .WillOnce(Return(mockdev2)); + transport_adapter.ConnectionCreated(connection2, uniq_id, 0); + transport_adapter.ConnectPending(uniq_id, 0); + + dev_list = transport_adapter.GetDeviceList(); + ASSERT_EQ(1u, dev_list.size()); + EXPECT_EQ(uniq_id, dev_list[0]); + EXPECT_EQ(ConnectionStatus::PENDING, mockdev2->connection_status()); + + EXPECT_CALL(*serverMock, Terminate()); +} + +TEST_F(TransportAdapterTest, WebsocketEndpointParsing_SUCCESS) { + std::shared_ptr<CloudWebsocketTransportAdapter> cta = + std::make_shared<CloudWebsocketTransportAdapter>( + last_state_, transport_manager_settings); + + for (auto protocol : kWebsocketProtocols) { + for (auto endpoint : kValidTestEndpoints) { + test_cloud_properties_.endpoint = protocol + endpoint.test_string; + cta->SetAppCloudTransportConfig("cloud app", test_cloud_properties_); + + auto ta = std::dynamic_pointer_cast<TransportAdapter>(cta); + ASSERT_NE(ta.use_count(), 0); + + ta->CreateDevice(test_cloud_properties_.endpoint); + + auto device = cta->FindDevice(test_cloud_properties_.endpoint); + ASSERT_NE(device.use_count(), 0); + + std::shared_ptr<CloudDevice> cloud_device = + std::dynamic_pointer_cast<CloudDevice>(device); + ASSERT_NE(cloud_device.use_count(), 0); + + EXPECT_EQ(cloud_device->GetHost(), endpoint.host); + EXPECT_EQ(cloud_device->GetPort(), endpoint.port); + EXPECT_EQ(cloud_device->GetTarget(), endpoint.target); + } + } +} +TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INVALID) { + std::shared_ptr<CloudWebsocketTransportAdapter> cta = + std::make_shared<CloudWebsocketTransportAdapter>( + last_state_, transport_manager_settings); + + for (auto protocol : kWebsocketProtocols) { + for (auto endpoint : kInvalidTestEndpoints) { + test_cloud_properties_.endpoint = protocol + endpoint.test_string; + cta->SetAppCloudTransportConfig("cloud app", test_cloud_properties_); + + auto ta = std::dynamic_pointer_cast<TransportAdapter>(cta); + ASSERT_NE(ta.use_count(), 0); + + ta->CreateDevice(test_cloud_properties_.endpoint); + + auto device = cta->FindDevice(test_cloud_properties_.endpoint); + EXPECT_EQ(device.use_count(), 0); + } + } +} +TEST_F(TransportAdapterTest, WebsocketEndpointParsing_INCORRECT) { + std::shared_ptr<CloudWebsocketTransportAdapter> cta = + std::make_shared<CloudWebsocketTransportAdapter>( + last_state_, transport_manager_settings); + + for (auto protocol : kWebsocketProtocols) { + for (auto endpoint : kIncorrectTestEndpoints) { + test_cloud_properties_.endpoint = protocol + endpoint.test_string; + cta->SetAppCloudTransportConfig("cloud app", test_cloud_properties_); + + auto ta = std::dynamic_pointer_cast<TransportAdapter>(cta); + ASSERT_NE(ta.use_count(), 0); + + ta->CreateDevice(test_cloud_properties_.endpoint); + + auto device = cta->FindDevice(test_cloud_properties_.endpoint); + ASSERT_NE(device.use_count(), 0); + + std::shared_ptr<CloudDevice> cloud_device = + std::dynamic_pointer_cast<CloudDevice>(device); + ASSERT_NE(cloud_device.use_count(), 0); + + EXPECT_FALSE(cloud_device->GetHost() == endpoint.host && + cloud_device->GetPort() == endpoint.port && + cloud_device->GetTarget() == endpoint.target); + } + } +} +#endif // CLOUD_APP_WEBSOCKET_TRANSPORT_SUPPORT + TEST_F(TransportAdapterTest, DisconnectDevice_DeviceAddedConnectionCreated) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -439,9 +847,11 @@ TEST_F(TransportAdapterTest, DisconnectDevice_DeviceAddedConnectionCreated) { EXPECT_CALL(*serverMock, IsInitialised()).WillOnce(Return(true)); EXPECT_CALL(*serverMock, CreateConnection(uniq_id, app_handle)) .WillOnce(Return(TransportAdapter::OK)); - EXPECT_CALL(transport_adapter, FindDevice(uniq_id)).WillOnce(Return(mockdev)); + EXPECT_CALL(transport_adapter, FindDevice(uniq_id)) + .WillRepeatedly(Return(mockdev)); TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, res); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); auto mock_connection = std::make_shared<MockConnection>(); transport_adapter.ConnectionCreated(mock_connection, uniq_id, app_handle); @@ -451,6 +861,7 @@ TEST_F(TransportAdapterTest, DisconnectDevice_DeviceAddedConnectionCreated) { TransportAdapter::Error new_res = transport_adapter.DisconnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, new_res); + EXPECT_EQ(ConnectionStatus::CLOSING, mockdev->connection_status()); EXPECT_CALL(*serverMock, Terminate()); } @@ -459,6 +870,7 @@ TEST_F(TransportAdapterTest, DeviceDisconnected) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -484,6 +896,7 @@ TEST_F(TransportAdapterTest, DeviceDisconnected) { .WillOnce(Return(TransportAdapter::OK)); TransportAdapter::Error res = transport_adapter.ConnectDevice(uniq_id); EXPECT_EQ(TransportAdapter::OK, res); + EXPECT_EQ(ConnectionStatus::CONNECTED, mockdev->connection_status()); std::shared_ptr<MockConnection> mock_connection = std::make_shared<MockConnection>(); @@ -507,6 +920,7 @@ TEST_F(TransportAdapterTest, AbortedConnectSuccess) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -533,6 +947,7 @@ TEST_F(TransportAdapterTest, SendData) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( dev_mock, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -574,6 +989,7 @@ TEST_F(TransportAdapterTest, SendData_ConnectionNotEstablished) { clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -609,6 +1025,7 @@ TEST_F(TransportAdapterTest, StartClientListening_ClientNotInitialized) { MockClientConnectionListener* clientMock = new MockClientConnectionListener(); MockTransportAdapterImpl transport_adapter( dev_mock, NULL, clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -630,6 +1047,7 @@ TEST_F(TransportAdapterTest, StartClientListening) { MockClientConnectionListener* clientMock = new MockClientConnectionListener(); MockTransportAdapterImpl transport_adapter( dev_mock, NULL, clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -656,6 +1074,7 @@ TEST_F(TransportAdapterTest, StopClientListening_Success) { clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -690,6 +1109,7 @@ TEST_F(TransportAdapterTest, FindNewApplicationsRequest) { clientMock, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*dev_mock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(*clientMock, Init()).WillOnce(Return(TransportAdapter::OK)); @@ -711,6 +1131,7 @@ TEST_F(TransportAdapterTest, FindNewApplicationsRequest) { TEST_F(TransportAdapterTest, GetDeviceAndApplicationLists) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -735,6 +1156,7 @@ TEST_F(TransportAdapterTest, FindEstablishedConnection) { MockServerConnectionFactory* serverMock = new MockServerConnectionFactory(); MockTransportAdapterImpl transport_adapter( NULL, serverMock, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(*serverMock, Init()).WillOnce(Return(TransportAdapter::OK)); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); @@ -764,6 +1186,7 @@ TEST_F(TransportAdapterTest, RunAppOnDevice_NoDeviseWithAskedId_UNSUCCESS) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); std::shared_ptr<MockDevice> mock_device = std::make_shared<MockDevice>("test_device_name", "test_device_uid0"); @@ -783,6 +1206,7 @@ TEST_F(TransportAdapterTest, RunAppOnDevice_DeviseWithAskedIdWasFound_SUCCESS) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); std::shared_ptr<MockDevice> mock_device = std::make_shared<MockDevice>("test_device_name", device_uid); @@ -814,6 +1238,7 @@ TEST_F(TransportAdapterTest, StopDevice) { TEST_F(TransportAdapterTest, TransportConfigUpdated) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); @@ -832,6 +1257,7 @@ TEST_F(TransportAdapterTest, TransportConfigUpdated) { TEST_F(TransportAdapterTest, GetTransportConfigration) { MockTransportAdapterImpl transport_adapter( NULL, NULL, NULL, last_state_, transport_manager_settings); + SetDefaultExpectations(transport_adapter); EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true)); transport_adapter.Init(); |