Skip to content

Commit

Permalink
iox-#27 Add PortManager tests for client and server discovery
Browse files Browse the repository at this point in the history
  • Loading branch information
elBoberido committed Feb 17, 2022
1 parent 609b161 commit 1f4c22b
Showing 1 changed file with 166 additions and 0 deletions.
166 changes: 166 additions & 0 deletions iceoryx_posh/test/moduletests/test_roudi_portmanager_client_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,170 @@ TEST_F(PortManager_test, AcquireServerPortDataWithSameServiceDescriptionTwiceAnd

// END aquireServerPortData tests

// BEGIN discovery tests

TEST_F(PortManager_test, CreateClientWithConnectOnCreateAndNoServerResultsInWaitForOffer)
{
::testing::Test::RecordProperty("TEST_ID", "14070d7b-d8e1-4df5-84fc-119e5e126cde");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;

auto clientPortUser = createClient(clientOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::WAIT_FOR_OFFER));
}

TEST_F(PortManager_test, DoDiscoveryWithClientConnectOnCreateAndNoServerResultsInNotConnected)
{
::testing::Test::RecordProperty("TEST_ID", "6829e506-9f58-4253-bc42-469f2970a2c7");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;

auto clientPortUser = createClient(clientOptions);
m_portManager->doDiscovery();

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::WAIT_FOR_OFFER));
}

TEST_F(PortManager_test, CreateClientWithConnectOnCreateAndNotOfferingServerResultsInWaitForOffer)
{
::testing::Test::RecordProperty("TEST_ID", "0f7098d0-2646-4c10-b347-9b57b0f593ce");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = false;

auto serverPortUser = createServer(serverOptions);
auto clientPortUser = createClient(clientOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::WAIT_FOR_OFFER));
}

TEST_F(PortManager_test, CreateClientWithConnectOnCreateAndOfferingServerResultsInConnectedClient)
{
::testing::Test::RecordProperty("TEST_ID", "108170d4-786b-4266-ad2a-ef922188f70b");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = true;

auto serverPortUser = createServer(serverOptions);
auto clientPortUser = createClient(clientOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::CONNECTED));
}

TEST_F(PortManager_test, CreateServerWithOfferOnCreateAndClientWaitingToConnectResultsInConnectedClient)
{
::testing::Test::RecordProperty("TEST_ID", "b5bb10b2-bf9b-400e-ab5c-aa3a1e0e826f");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = true;

auto clientPortUser = createClient(clientOptions);
auto serverPortUser = createServer(serverOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::CONNECTED));
}

TEST_F(PortManager_test, CreateClientWithNotConnectOnCreateAndNoServerResultsInNotConnected)
{
::testing::Test::RecordProperty("TEST_ID", "fde662f1-f9e1-4302-be41-59a7a0bfa4e7");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = false;

auto clientPortUser = createClient(clientOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::NOT_CONNECTED));
}

TEST_F(PortManager_test, DoDiscoveryWithClientNotConnectOnCreateAndNoServerResultsInNotConnected)
{
::testing::Test::RecordProperty("TEST_ID", "c59b7343-6277-4a4b-8204-506048726be4");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = false;

auto clientPortUser = createClient(clientOptions);
m_portManager->doDiscovery();

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::NOT_CONNECTED));
}

TEST_F(PortManager_test, CreateClientWithNotConnectOnCreateAndOfferingServerResultsNotConnected)
{
::testing::Test::RecordProperty("TEST_ID", "17cf22ba-066a-418a-8366-1c6b75177b9a");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = false;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = true;

auto serverPortUser = createServer(serverOptions);
auto clientPortUser = createClient(clientOptions);

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::NOT_CONNECTED));
}

TEST_F(PortManager_test, DoDiscoveryWithClientNotConnectOnCreateAndServerResultsInConnectedWhenCallingConnect)
{
::testing::Test::RecordProperty("TEST_ID", "87bbb991-4aaf-49c1-b238-d9b0bb18d699");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = false;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = true;

auto serverPortUser = createServer(serverOptions);
auto clientPortUser = createClient(clientOptions);

clientPortUser.connect();
;

m_portManager->doDiscovery();

EXPECT_THAT(clientPortUser.getConnectionState(), Eq(ConnectionState::CONNECTED));
}

// END discovery tests

// BEGIN communication tests

TEST_F(PortManager_test, ConnectedClientCanCommunicateWithServer)
{
::testing::Test::RecordProperty("TEST_ID", "6376b58d-a796-4cc4-9c40-0c5a117b53f5");
auto clientOptions = createTestClientOptions();
clientOptions.connectOnCreate = true;
auto serverOptions = createTestServerOptions();
serverOptions.offerOnCreate = true;

auto serverPortUser = createServer(serverOptions);
auto clientPortUser = createClient(clientOptions);

using DataType = uint64_t;
constexpr int64_t SEQUENCE_ID{42};

auto allocateRequestResult = clientPortUser.allocateRequest(sizeof(DataType), alignof(DataType));
ASSERT_FALSE(allocateRequestResult.has_error());
auto requestHeader = allocateRequestResult.value();
requestHeader->setSequenceId(SEQUENCE_ID);
clientPortUser.sendRequest(requestHeader);

auto getRequestResult = serverPortUser.getRequest();
ASSERT_FALSE(getRequestResult.has_error());
auto receivedRequestHeader = getRequestResult.value();
EXPECT_THAT(receivedRequestHeader->getSequenceId(), Eq(SEQUENCE_ID));

auto allocateResponseResult =
serverPortUser.allocateResponse(receivedRequestHeader, sizeof(DataType), alignof(DataType));
ASSERT_FALSE(allocateResponseResult.has_error());
auto responseHeader = allocateResponseResult.value();
serverPortUser.sendResponse(responseHeader);

auto getResponseResult = clientPortUser.getResponse();
ASSERT_FALSE(getResponseResult.has_error());
auto receivedResponseHeader = getResponseResult.value();
EXPECT_THAT(receivedResponseHeader->getSequenceId(), Eq(SEQUENCE_ID));
}

// END discovery tests

} // namespace iox_test_roudi_portmanager

0 comments on commit 1f4c22b

Please sign in to comment.