Skip to content

Commit

Permalink
New client testing infrastructure.
Browse files Browse the repository at this point in the history
  • Loading branch information
arobenko committed Jun 10, 2024
1 parent 68c4410 commit 5ce3486
Show file tree
Hide file tree
Showing 16 changed files with 700 additions and 22 deletions.
2 changes: 1 addition & 1 deletion client.old/templ/client.cpp.templ
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ void cc_mqttsn_##NAME##client_set_retry_count(CC_MqttsnClientHandle client, unsi
clientObj->setRetryCount(value);
}

void cc_mqttsn_##NAME##client_set_broadcast_radius(CC_MqttsnClientHandle client, unsigned char value)
void cc_mqttsn_##NAME##client_set_default_broadcast_radius(CC_MqttsnClientHandle client, unsigned char value)
{
auto* clientObj = reinterpret_cast<MqttsnClient*>(client.m_ptr);
clientObj->setBroadcastRadius(value);
Expand Down
2 changes: 1 addition & 1 deletion client.old/templ/client.h.templ
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ void cc_mqttsn_##NAME##client_set_retry_count(CC_MqttsnClientHandle client, unsi
/// set using this function. Default radius value is 0.
/// @param[in] client Handle returned by @ref cc_mqttsn_##NAME##client_new() function.
/// @param[in] value Broadcast radius.
void cc_mqttsn_##NAME##client_set_broadcast_radius(CC_MqttsnClientHandle client, unsigned char value);
void cc_mqttsn_##NAME##client_set_default_broadcast_radius(CC_MqttsnClientHandle client, unsigned char value);

/// @brief Enable/Disable search for gateways.
/// @details According to @b MQTT-SN protocol specification the client may
Expand Down
2 changes: 1 addition & 1 deletion client.old/test/CommonTestClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ ClientLibFuncs createDefaultLibFuncs()
funcs.m_tickFunc = &cc_mqttsn_client_tick;
funcs.m_setRetryPeriodFunc = &cc_mqttsn_client_set_retry_period;
funcs.m_setRetryCountFunc = &cc_mqttsn_client_set_retry_count;
funcs.m_setBroadcastRadius = &cc_mqttsn_client_set_broadcast_radius;
funcs.m_setBroadcastRadius = &cc_mqttsn_client_set_default_broadcast_radius;
funcs.m_setSearchgwEnabledFunc = &cc_mqttsn_client_set_searchgw_enabled;
funcs.m_cancelFunc = &cc_mqttsn_client_cancel;
funcs.m_connectFunc = &cc_mqttsn_client_connect;
Expand Down
2 changes: 1 addition & 1 deletion client.old/test/CommonTestClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ typedef decltype(&cc_mqttsn_client_process_data) ProcessDataFunc;
typedef decltype(&cc_mqttsn_client_tick) TickFunc;
typedef decltype(&cc_mqttsn_client_set_retry_period) SetRetryPeriodFunc;
typedef decltype(&cc_mqttsn_client_set_retry_count) SetRetryCountFunc;
typedef decltype(&cc_mqttsn_client_set_broadcast_radius) SetBroadcastRadiusFunc;
typedef decltype(&cc_mqttsn_client_set_default_broadcast_radius) SetBroadcastRadiusFunc;
typedef decltype(&cc_mqttsn_client_set_searchgw_enabled) SetSearchgwEnabledFunc;
typedef decltype(&cc_mqttsn_client_cancel) CancelFunc;
typedef decltype(&cc_mqttsn_client_connect) ConnectFunc;
Expand Down
2 changes: 1 addition & 1 deletion client.old/test/bare_metal_app/test_client_build/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ int main(int argc, const char** argv)

cc_mqttsn_test_bare_metal_client_set_retry_period(client, 10);
cc_mqttsn_test_bare_metal_client_set_retry_count(client, 3);
cc_mqttsn_test_bare_metal_client_set_broadcast_radius(client, 0);
cc_mqttsn_test_bare_metal_client_set_default_broadcast_radius(client, 0);
cc_mqttsn_test_bare_metal_client_set_searchgw_enabled(client, true);
cc_mqttsn_test_bare_metal_client_search_gw(client);
cc_mqttsn_test_bare_metal_client_discard_gw(client, 0);
Expand Down
2 changes: 1 addition & 1 deletion client/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -292,4 +292,4 @@ if (NOT "${CC_MQTTSN_CUSTOM_CLIENT_CONFIG_FILES}" STREQUAL "")
endforeach ()
endif ()

#add_subdirectory(test)
add_subdirectory(test)
6 changes: 3 additions & 3 deletions client/lib/doxygen/main.dox
Original file line number Diff line number Diff line change
Expand Up @@ -273,10 +273,10 @@
/// requesting to broadcast the message, the client library also specifies the
/// broadcast radius. The default broadcast radius value is @b 3.
/// To change the default configuration value
/// use @b cc_mqttsn_client_set_broadcast_radius() function. To retrieve
/// the current configuration use @b cc_mqttsn_client_get_broadcast_radius().
/// use @b cc_mqttsn_client_set_default_broadcast_radius() function. To retrieve
/// the current configuration use @b cc_mqttsn_client_get_default_broadcast_radius().
/// @code
/// CC_MqttsnErrorCode ec = cc_mqttsn_client_set_broadcast_radius(client, 5);
/// CC_MqttsnErrorCode ec = cc_mqttsn_client_set_default_broadcast_radius(client, 5);
/// if (ec != CC_MqttsnErrorCode_Success) {
/// ... /* Something went wrong */
/// }
Expand Down
26 changes: 16 additions & 10 deletions client/lib/templ/client.cpp.templ
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ unsigned cc_mqttsn_##NAME##client_get_default_retry_count(CC_MqttsnClientHandle
return clientFromHandle(client)->configState().m_retryCount;
}

CC_MqttsnErrorCode cc_mqttsn_##NAME##client_set_broadcast_radius(CC_MqttsnClientHandle client, unsigned value)
CC_MqttsnErrorCode cc_mqttsn_##NAME##client_set_default_broadcast_radius(CC_MqttsnClientHandle client, unsigned value)
{
COMMS_ASSERT(client != nullptr);
if (cc_mqttsn_client::ConfigState::MaxBroadcastRadius < value) {
Expand All @@ -134,7 +134,7 @@ CC_MqttsnErrorCode cc_mqttsn_##NAME##client_set_broadcast_radius(CC_MqttsnClient
return CC_MqttsnErrorCode_Success;
}

unsigned cc_mqttsn_##NAME##client_get_broadcast_radius(CC_MqttsnClientHandle client)
unsigned cc_mqttsn_##NAME##client_get_default_broadcast_radius(CC_MqttsnClientHandle client)
{
COMMS_ASSERT(client != nullptr);
return clientFromHandle(client)->configState().m_broadcastRadius;
Expand All @@ -146,21 +146,27 @@ unsigned cc_mqttsn_##NAME##client_get_available_gateways_count(CC_MqttsnClientHa
return static_cast<unsigned>(clientFromHandle(client)->clientState().m_gwInfos.size());
}

CC_MqttsnErrorCode cc_mqttsn_##NAME##client_get_available_gateway_info(CC_MqttsnClientHandle client, unsigned idx, CC_MqttsnGatewayInfo& info)
CC_MqttsnErrorCode cc_mqttsn_##NAME##client_get_available_gateway_info(CC_MqttsnClientHandle client, unsigned idx, CC_MqttsnGatewayInfo* info)
{
COMMS_ASSERT(client != nullptr);
auto& gwInfos = clientFromHandle(client)->clientState().m_gwInfos;
auto clientPtr = clientFromHandle(client);
if (info == nullptr) {
clientPtr->errorLog("The provided gateway info pointer is invalid");
return CC_MqttsnErrorCode_BadParam;
}

auto& gwInfos = clientPtr->clientState().m_gwInfos;
if (gwInfos.size() <= idx) {
clientFromHandle(client)->errorLog("The gateway info index is too high");
clientPtr->errorLog("The gateway info index is too high");
return CC_MqttsnErrorCode_BadParam;
}

auto& storedInfo = gwInfos[idx];
info = CC_MqttsnGatewayInfo();
info.m_gwId = storedInfo.m_gwId;
*info = CC_MqttsnGatewayInfo();
info->m_gwId = storedInfo.m_gwId;
if (!storedInfo.m_addr.empty()) {
info.m_addr = storedInfo.m_addr.data();
info.m_addrLen = static_cast<decltype(info.m_addrLen)>(storedInfo.m_addr.size());
info->m_addr = storedInfo.m_addr.data();
info->m_addrLen = static_cast<decltype(info->m_addrLen)>(storedInfo.m_addr.size());
}

return CC_MqttsnErrorCode_Success;
Expand Down Expand Up @@ -381,7 +387,7 @@ CC_MqttsnErrorCode cc_mqttsn_##NAME##client_search_set_broadcast_radius(
#endif // #if CC_MQTTSN_CLIENT_HAS_GATEWAY_DISCOVERY
}

unsigned cc_mqttsn_##NAME##client_search_get_broadcastRadius([[maybe_unused]] CC_MqttsnSearchHandle handle)
unsigned cc_mqttsn_##NAME##client_search_get_broadcast_radius([[maybe_unused]] CC_MqttsnSearchHandle handle)
{
#if CC_MQTTSN_CLIENT_HAS_GATEWAY_DISCOVERY
COMMS_ASSERT(handle != nullptr);
Expand Down
6 changes: 3 additions & 3 deletions client/lib/templ/client.h.templ
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,13 @@ unsigned cc_mqttsn_##NAME##client_get_default_retry_count(CC_MqttsnClientHandle
/// @return Result code of the call.
/// @pre The broadcast value cannot exceed 255.
/// @ingroup client
CC_MqttsnErrorCode cc_mqttsn_##NAME##client_set_broadcast_radius(CC_MqttsnClientHandle client, unsigned value);
CC_MqttsnErrorCode cc_mqttsn_##NAME##client_set_default_broadcast_radius(CC_MqttsnClientHandle client, unsigned value);

/// @brief Get current broadcast radius configuration.
/// @param[in] client Handle returned by @ref cc_mqttsn_##NAME##client_alloc() function.
/// @see @ref cc_mqttsn_##NAME##client_set_broadcast_radius()
/// @see @ref cc_mqttsn_##NAME##client_set_default_broadcast_radius()
/// @ingroup client
unsigned cc_mqttsn_##NAME##client_get_broadcast_radius(CC_MqttsnClientHandle client);
unsigned cc_mqttsn_##NAME##client_get_default_broadcast_radius(CC_MqttsnClientHandle client);

/// @brief Get number of available gateways.
/// @param[in] client Handle returned by @ref cc_mqttsn_##NAME##client_alloc() function.
Expand Down
105 changes: 105 additions & 0 deletions client/lib/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
if (NOT CC_MQTTSN_BUILD_UNIT_TESTS)
return ()
endif ()

##################################
set (COMMON_BASE_LIB_NAME "UnitTestCommonBase")
set (COMMON_BASE_SRC
"UnitTestCommonBase.cpp")

add_library(${COMMON_BASE_LIB_NAME} STATIC ${COMMON_BASE_SRC})
target_link_libraries(${COMMON_BASE_LIB_NAME} PUBLIC cc::cc_mqttsn)
target_include_directories(
${COMMON_BASE_LIB_NAME}
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/client/lib/include>
)

##################################

function (cc_mqttsn_client_add_unit_test name test_lib)
set (src ${CMAKE_CURRENT_SOURCE_DIR}/${name}.th)
cc_cxxtest_add_test (NAME unit.${name} SRC ${src})
target_link_libraries(unit.${name} PRIVATE ${test_lib} cxxtest::cxxtest)
endfunction ()

##################################

if (TARGET cc::cc_mqttsn_client)
set (DEFAULT_BASE_LIB_NAME "UnitTestDefaultBase")
set (DEFAULT_BASE_SRC
"UnitTestDefaultBase.cpp")

add_library(${DEFAULT_BASE_LIB_NAME} STATIC ${DEFAULT_BASE_SRC})
target_link_libraries(${DEFAULT_BASE_LIB_NAME} PUBLIC ${COMMON_BASE_LIB_NAME} cc::cc_mqttsn_client)
target_include_directories(
${DEFAULT_BASE_LIB_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

cc_mqttsn_client_add_unit_test(UnitTestGwDiscover ${DEFAULT_BASE_LIB_NAME})

# cc_mqttsn_client_add_unit_test(UnitTestConnect ${DEFAULT_BASE_LIB_NAME})
# cc_mqttsn_client_add_unit_test(UnitTestDisconnect ${DEFAULT_BASE_LIB_NAME})
# cc_mqttsn_client_add_unit_test(UnitTestPublish ${DEFAULT_BASE_LIB_NAME})
# cc_mqttsn_client_add_unit_test(UnitTestReceive ${DEFAULT_BASE_LIB_NAME})
# cc_mqttsn_client_add_unit_test(UnitTestSubscribe ${DEFAULT_BASE_LIB_NAME})
# cc_mqttsn_client_add_unit_test(UnitTestUnsubscribe ${DEFAULT_BASE_LIB_NAME})
endif ()

# TODO
return ()

if (TARGET cc::cc_mqttsn_bm_client)
set (BM_BASE_LIB_NAME "UnitTestBmBase")
set (BM_BASE_SRC
"UnitTestBmBase.cpp")

add_library(${BM_BASE_LIB_NAME} STATIC ${BM_BASE_SRC})
target_link_libraries(${BM_BASE_LIB_NAME} PUBLIC ${COMMON_BASE_LIB_NAME} cc::cc_mqttsn_bm_client)
target_include_directories(
${BM_BASE_LIB_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

cc_mqttsn_client_add_unit_test(UnitTestBmClient ${BM_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestBmConnect ${BM_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestBmPublish ${BM_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestBmReceive ${BM_BASE_LIB_NAME})
endif ()

if (TARGET cc::cc_mqttsn_qos1_client)
set (QOS1_BASE_LIB_NAME "UnitTestQos1Base")
set (QOS1_BASE_SRC
"UnitTestQos1Base.cpp")

add_library(${QOS1_BASE_LIB_NAME} STATIC ${QOS1_BASE_SRC})
target_link_libraries(${QOS1_BASE_LIB_NAME} PUBLIC ${COMMON_BASE_LIB_NAME} cc::cc_mqttsn_qos1_client)
target_include_directories(
${QOS1_BASE_LIB_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

cc_mqttsn_client_add_unit_test(UnitTestQos1Publish ${QOS1_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestQos1Receive ${QOS1_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestQos1Subscribe ${QOS1_BASE_LIB_NAME})
endif ()

if (TARGET cc::cc_mqttsn_qos0_client)
set (QOS0_BASE_LIB_NAME "UnitTestQos0Base")
set (QOS0_BASE_SRC
"UnitTestQos0Base.cpp")

add_library(${QOS0_BASE_LIB_NAME} STATIC ${QOS0_BASE_SRC})
target_link_libraries(${QOS0_BASE_LIB_NAME} PUBLIC ${COMMON_BASE_LIB_NAME} cc::cc_mqttsn_qos0_client)
target_include_directories(
${QOS0_BASE_LIB_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

cc_mqttsn_client_add_unit_test(UnitTestQos0Publish ${QOS0_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestQos0Receive ${QOS0_BASE_LIB_NAME})
cc_mqttsn_client_add_unit_test(UnitTestQos0Subscribe ${QOS0_BASE_LIB_NAME})
endif ()
Loading

0 comments on commit 5ce3486

Please sign in to comment.