Skip to content

Commit 0c8e021

Browse files
authored
test: unit test lwip secure_sockets (aws#1720)
* test: unit test lwip secure_sockets * test: add Unit Test to secure sockets lckets lwip * test: add more testcase comments * test: remove unecessary cmake condition
1 parent 04be7e9 commit 0c8e021

File tree

33 files changed

+3414
-16
lines changed

33 files changed

+3414
-16
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@
1616
[submodule "lwip"]
1717
path = libraries/3rdparty/lwip
1818
url = https://github.com/lwip-tcpip/lwip.git
19+
[submodule "libraries/3rdparty/CMock"]
20+
path = libraries/3rdparty/CMock
21+
url = https://github.com/ThrowTheSwitch/CMock.git

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ set(PROJECT_VERSION_MINOR "00")
1414
include("tools/cmake/afr.cmake")
1515

1616
# Add 3rdparty modules.
17-
add_subdirectory("libraries/3rdparty")
17+
if (NOT AFR_ENABLE_UNIT_TESTS)
18+
add_subdirectory("libraries/3rdparty")
19+
endif()
1820

1921
# -------------------------------------------------------------------------------------------------
2022
# Configure target board
@@ -54,6 +56,10 @@ include("${AFR_BOARD_PATH}/CMakeLists.txt")
5456
# Do not prefix the output library file.
5557
set(CMAKE_STATIC_LIBRARY_PREFIX "")
5658

59+
if (AFR_ENABLE_UNIT_TESTS)
60+
return()
61+
endif()
62+
5763
# Initialize all modules.
5864
add_subdirectory("libraries")
5965
add_subdirectory("demos")

libraries/3rdparty/CMock

Submodule CMock added at bd5fbc3

libraries/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
# FreeRTOS module.
2+
3+
if (AFR_ENABLE_UNIT_TESTS)
4+
add_subdirectory(abstractions/secure_sockets)
5+
return()
6+
endif()
7+
28
afr_module(NAME freertos INTERFACE KERNEL)
39
afr_glob_src(freertos_inc DIRECTORY "${AFR_KERNEL_DIR}/include" RECURSE)
410
afr_module_sources(

libraries/abstractions/posix/include/FreeRTOS_POSIX/pthread.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ int pthread_barrier_wait( pthread_barrier_t * barrier );
243243
*/
244244
int pthread_create( pthread_t * thread,
245245
const pthread_attr_t * attr,
246-
void *( *startroutine )( void * ),
246+
void * ( *startroutine )( void * ),
247247
void * arg );
248248

249249
/**

libraries/abstractions/secure_sockets/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2+
if(AFR_ENABLE_UNIT_TESTS)
3+
add_subdirectory(utest)
4+
return()
5+
endif()
6+
17
afr_module()
28

39
afr_set_lib_metadata(ID "secure_sockets")

libraries/abstractions/secure_sockets/lwip/iot_secure_sockets.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@ static void vTaskRxSelect( void * param )
282282

283283
if( FD_ISSET( s, &read_fds ) )
284284
{
285-
configASSERT( ctx->rx_callback );
286285
ctx->rx_callback( ( Socket_t ) ctx );
287286
}
288287
}
@@ -291,6 +290,7 @@ static void vTaskRxSelect( void * param )
291290
vTaskDelete( NULL );
292291
}
293292

293+
294294
/*-----------------------------------------------------------*/
295295

296296
static void prvRxSelectSet( ss_ctx_t * ctx,
@@ -400,7 +400,6 @@ int32_t SOCKETS_Connect( Socket_t xSocket,
400400
struct sockaddr_in sa_addr = { 0 };
401401
int ret;
402402

403-
sa_addr.sin_family = pxAddress->ucSocketDomain ? pxAddress->ucSocketDomain : AF_INET;
404403
sa_addr.sin_addr.s_addr = pxAddress->ulAddress;
405404
sa_addr.sin_port = pxAddress->usPort;
406405

@@ -447,12 +446,14 @@ int32_t SOCKETS_Connect( Socket_t xSocket,
447446
}
448447
else
449448
{
450-
configPRINTF( ( "TLS_Connect fail (0x%x, %s)\n", ( unsigned int ) -status, ctx->destination ? ctx->destination : "NULL" ) );
449+
configPRINTF( ( "TLS_Connect fail (0x%x, %s)\n",
450+
( unsigned int ) -status,
451+
ctx->destination ? ctx->destination : "NULL" ) );
451452
}
452453
}
453454
else
454455
{
455-
configPRINTF( ( "Invalid ip socket\n" ) );
456+
configPRINTF( ( "LwIP connect fail %d %d\n", ret, errno ) );
456457
}
457458

458459
return SOCKETS_SOCKET_ERROR;
@@ -569,7 +570,6 @@ int32_t SOCKETS_Close( Socket_t xSocket )
569570
{
570571
ss_ctx_t * ctx;
571572

572-
573573
if( SOCKETS_INVALID_SOCKET == xSocket )
574574
{
575575
return SOCKETS_EINVAL;
@@ -579,7 +579,6 @@ int32_t SOCKETS_Close( Socket_t xSocket )
579579
ctx->state = SST_RX_CLOSING;
580580

581581
lwip_close( ctx->ip_socket );
582-
583582
prvDecrementRefCount( ctx );
584583

585584
return SOCKETS_ERROR_NONE;
@@ -624,7 +623,8 @@ int32_t SOCKETS_SetSockOpt( Socket_t xSocket,
624623

625624
ret = lwip_setsockopt( ctx->ip_socket,
626625
SOL_SOCKET,
627-
lOptionName == SOCKETS_SO_RCVTIMEO ? SO_RCVTIMEO : SO_SNDTIMEO,
626+
lOptionName == SOCKETS_SO_RCVTIMEO ?
627+
SO_RCVTIMEO : SO_SNDTIMEO,
628628
( struct timeval * ) &tv,
629629
sizeof( tv ) );
630630

@@ -752,7 +752,8 @@ int32_t SOCKETS_SetSockOpt( Socket_t xSocket,
752752
ctx->ulAlpnProtocolsCount = 1 + xOptionLength;
753753

754754
if( NULL == ( ctx->ppcAlpnProtocols =
755-
( char ** ) pvPortMalloc( ctx->ulAlpnProtocolsCount * sizeof( char * ) ) ) )
755+
( char ** ) pvPortMalloc( ctx->ulAlpnProtocolsCount *
756+
sizeof( char * ) ) ) )
756757
{
757758
return SOCKETS_ENOMEM;
758759
}
@@ -764,13 +765,15 @@ int32_t SOCKETS_SetSockOpt( Socket_t xSocket,
764765
}
765766

766767
/* Copy each protocol string. */
767-
for( ulProtocol = 0; ( ulProtocol < ctx->ulAlpnProtocolsCount - 1 ); ulProtocol++ )
768+
for( ulProtocol = 0; ( ulProtocol < ctx->ulAlpnProtocolsCount - 1 );
769+
ulProtocol++ )
768770
{
769771
xLength = strlen( ppcAlpnIn[ ulProtocol ] );
770772

771773
if( NULL == ( ctx->ppcAlpnProtocols[ ulProtocol ] =
772774
( char * ) pvPortMalloc( 1 + xLength ) ) )
773775
{
776+
ctx->ppcAlpnProtocols[ ulProtocol ] = NULL;
774777
return SOCKETS_ENOMEM;
775778
}
776779
else
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
project ("secure sockets unit test")
2+
cmake_minimum_required (VERSION 3.13)
3+
4+
set(3rdparty_dir "${AFR_ROOT_DIR}/libraries/3rdparty")
5+
set(freertos_plus_dir "${AFR_ROOT_DIR}/libraries/freertos_plus")
6+
set(abstraction_dir "${AFR_ROOT_DIR}/libraries/abstractions")
7+
set(kernel_dir "${AFR_ROOT_DIR}/freertos_kernel")
8+
set(common_dir "${AFR_ROOT_DIR}/libraries/c_sdk/standard/common")
9+
10+
list(APPEND mock_list
11+
"${kernel_dir}/include/task.h"
12+
"${kernel_dir}/include/portable.h"
13+
"${common_dir}/include/iot_logging_task.h"
14+
"${abstraction_dir}/wifi/include/iot_wifi.h"
15+
"${freertos_plus_dir}/standard/tls/include/iot_tls.h"
16+
"${3rdparty_dir}/lwip/src/include/lwip/sockets.h"
17+
)
18+
create_mock_list(secure_sockets_mock "${mock_list}"
19+
)
20+
target_include_directories(secure_sockets_mock PUBLIC
21+
"${3rdparty_dir}/lwip/src/include"
22+
"${3rdparty_dir}/lwip/src/include/lwip"
23+
"${3rdparty_dir}/lwip/contrib/ports/unix/lib"
24+
"${3rdparty_dir}/lwip/contrib/ports/unix/port/include"
25+
)
26+
27+
target_compile_definitions(secure_sockets_mock PUBLIC
28+
LWIP_COMPAT_SOCKETS=1
29+
)
30+
target_compile_definitions(secure_sockets_mock PUBLIC
31+
portHAS_STACK_OVERFLOW_CHECKING=1
32+
)
33+
target_compile_definitions(secure_sockets_mock PUBLIC
34+
portUSING_MPU_WRAPPERS=1
35+
)
36+
target_compile_definitions(secure_sockets_mock PUBLIC
37+
MPU_WRAPPERS_INCLUDED_FROM_API_FILE
38+
)
39+
40+
add_library(secure_sockets_real STATIC
41+
"../lwip/iot_secure_sockets.c"
42+
)
43+
44+
target_include_directories(secure_sockets_real PUBLIC
45+
.
46+
../include
47+
"${3rdparty_dir}/lwip/src/include"
48+
"${3rdparty_dir}/lwip/contrib/ports/unix/lib"
49+
"${3rdparty_dir}/lwip/contrib/ports/unix/port/include"
50+
"${AFR_ROOT_DIR}/libraries/abstractions/wifi/include"
51+
"${AFR_ROOT_DIR}/libraries/c_sdk/standard/common/include"
52+
"${AFR_ROOT_DIR}/libraries/freertos_plus/standard/tls/include"
53+
"${AFR_ROOT_DIR}/freertos_kernel/include/"
54+
"${CMAKE_CURRENT_BINARY_DIR}/mocks"
55+
)
56+
57+
set_target_properties(secure_sockets_real PROPERTIES
58+
COMPILE_FLAGS "-Wall -fPIC -ggdb3 -Og \
59+
-fprofile-arcs -ftest-coverage -fprofile-generate \
60+
-include portableDefs.h -Wno-unused-but-set-variable"
61+
LINK_FLAGS "-fPIC -fprofile-arcs -ftest-coverage \
62+
-fprofile-generate -ggdb3 -Og"
63+
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib
64+
)
65+
66+
add_dependencies(secure_sockets_real secure_sockets_mock)
67+
target_link_libraries(secure_sockets_real PUBLIC
68+
-lsecure_sockets_mock
69+
-lgcov
70+
)
71+
list(APPEND link_list
72+
-lsecure_sockets_mock
73+
libsecure_sockets_real.a
74+
libutils.so
75+
)
76+
list(APPEND dep_list
77+
secure_sockets_real
78+
)
79+
create_test(secure_sockets_utest
80+
secure_sockets_utest.c
81+
"${link_list}"
82+
"${dep_list}"
83+
)
84+
target_include_directories(secure_sockets_utest PUBLIC
85+
../include
86+
"${3rdparty_dir}/lwip/src/include/lwip"
87+
"${3rdparty_dir}/lwip/src/include"
88+
"${3rdparty_dir}/lwip/contrib/ports/unix/lib"
89+
"${3rdparty_dir}/lwip/contrib/ports/unix/port/include"
90+
"${AFR_ROOT_DIR}/libraries/freertos_plus/standard/tls/include"
91+
"${AFR_ROOT_DIR}/libraries/c_sdk/standard/common/include"
92+
"${AFR_ROOT_DIR}/libraries/abstractions/wifi/include"
93+
)

0 commit comments

Comments
 (0)