Skip to content

Commit b8fee3a

Browse files
authored
New unit tests (#1955)
* UT inc * transport stats * signaling deserialize unknown * exclude samples * more metrics coverage * Sdp lib * fix skt tst bug * Improve deserialize and sdp api test * RB ut improvement * more uts * sig api * signaling api tests * Stun * more stun * rtp * more signaling * update encoder stats * Metrics coverage * nat behavior ut * more stun * serialize * twcc on callback * FIR test * enable ice stats * more rtcp * JB test * metrics * CleanUp * Comments * Remove config
1 parent 7cc13a5 commit b8fee3a

27 files changed

+787
-93
lines changed

Diff for: CMakeLists.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ execute_process(
5252
add_definitions(-DSDK_VERSION=\"${GIT_COMMIT_HASH}\")
5353
add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\")
5454
add_definitions(-DDETECTED_GIT_HASH)
55+
5556
if(NOT KVS_STACK_SIZE OR KVS_STACK_SIZE STREQUAL "")
5657
message(STATUS "Setting default stack size to 64*1024")
5758
set(KVS_DEFAULT_STACK_SIZE 65536)
@@ -387,8 +388,6 @@ file(GLOB WEBRTC_SIGNALING_CLIENT_SOURCE_FILES "src/source/Signaling/*.c")
387388
include_directories(${OPEN_SRC_INCLUDE_DIRS})
388389
include_directories(${OPEN_SRC_INSTALL_PREFIX}/include)
389390
include_directories(${KINESIS_VIDEO_WEBRTC_CLIENT_SRC}/src/include)
390-
# include sdp_config.h
391-
include_directories(src/source/Sdp/kvssdp)
392391

393392
add_library(kvsWebrtcClient ${LINKAGE} ${WEBRTC_CLIENT_SOURCE_FILES} ${DATACHANNEL_SRC})
394393

Diff for: src/source/Ice/IceAgentStateMachine.c

-25
Original file line numberDiff line numberDiff line change
@@ -101,31 +101,6 @@ STATUS stepIceAgentStateMachine(PIceAgent pIceAgent)
101101
return retStatus;
102102
}
103103

104-
STATUS acceptIceAgentMachineState(PIceAgent pIceAgent, UINT64 state)
105-
{
106-
ENTERS();
107-
STATUS retStatus = STATUS_SUCCESS;
108-
BOOL locked = FALSE;
109-
110-
CHK(pIceAgent != NULL, STATUS_NULL_ARG);
111-
112-
MUTEX_LOCK(pIceAgent->lock);
113-
locked = TRUE;
114-
115-
// Step the state machine
116-
CHK_STATUS(acceptStateMachineState(pIceAgent->pStateMachine, state));
117-
118-
CleanUp:
119-
CHK_LOG_ERR(retStatus);
120-
121-
if (locked) {
122-
MUTEX_UNLOCK(pIceAgent->lock);
123-
}
124-
125-
LEAVES();
126-
return retStatus;
127-
}
128-
129104
/*
130105
* This function is supposed to be called from within IceAgentStateMachine callbacks. Assume holding IceAgent->lock
131106
*/

Diff for: src/source/Ice/NatBehaviorDiscovery.c

+6-13
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ STATUS natTestIncomingDataHandler(UINT64 customData, PSocketConnection pSocketCo
1212
STATUS retStatus = STATUS_SUCCESS;
1313
PNatTestData pNatTestData = (PNatTestData) customData;
1414
PStunPacket pStunPacket = NULL;
15-
1615
MUTEX_LOCK(pNatTestData->lock);
1716
if (pNatTestData->bindingResponseCount < DEFAULT_NAT_TEST_MAX_BINDING_REQUEST_COUNT * NAT_BEHAVIOR_DISCOVER_PROCESS_TEST_COUNT) {
1817
CHK_STATUS(deserializeStunPacket(pBuffer, bufferLen, NULL, 0, &pStunPacket));
@@ -33,13 +32,13 @@ STATUS natTestIncomingDataHandler(UINT64 customData, PSocketConnection pSocketCo
3332
*
3433
*/
3534
STATUS executeNatTest(PStunPacket bindingRequest, PKvsIpAddress pDestAddr, PSocketConnection pSocketConnection, UINT32 testIndex, PNatTestData pData,
36-
PStunPacket* ppTestReponse)
35+
PStunPacket* ppTestResponse)
3736
{
3837
PStunPacket testResponse = NULL;
3938
UINT32 i, j;
4039
STATUS retStatus = STATUS_SUCCESS;
4140

42-
CHK(bindingRequest != NULL && pDestAddr != NULL && pSocketConnection != NULL && pData != NULL && ppTestReponse != NULL, STATUS_NULL_ARG);
41+
CHK(bindingRequest != NULL && pDestAddr != NULL && pSocketConnection != NULL && pData != NULL && ppTestResponse != NULL, STATUS_NULL_ARG);
4342

4443
MEMSET(bindingRequest->header.transactionId, 0x00, STUN_TRANSACTION_ID_LEN);
4544

@@ -53,7 +52,7 @@ STATUS executeNatTest(PStunPacket bindingRequest, PKvsIpAddress pDestAddr, PSock
5352
/* Send the STUN packet. Retry DEFAULT_NAT_TEST_MAX_BINDING_REQUEST_COUNT many times until a response
5453
* is received */
5554
for (i = 0; testResponse == NULL && i < DEFAULT_NAT_TEST_MAX_BINDING_REQUEST_COUNT; ++i) {
56-
iceUtilsSendStunPacket(bindingRequest, NULL, 0, pDestAddr, pSocketConnection, NULL, FALSE);
55+
CHK_STATUS(iceUtilsSendStunPacket(bindingRequest, NULL, 0, pDestAddr, pSocketConnection, NULL, FALSE));
5756
CVAR_WAIT(pData->cvar, pData->lock, DEFAULT_TEST_NAT_TEST_RESPONSE_WAIT_TIME);
5857
if (pData->bindingResponseCount > 0) {
5958
for (j = 0; j < pData->bindingResponseCount; ++j) {
@@ -64,11 +63,10 @@ STATUS executeNatTest(PStunPacket bindingRequest, PKvsIpAddress pDestAddr, PSock
6463
}
6564
}
6665
}
67-
6866
CleanUp:
6967

70-
if (ppTestReponse != NULL) {
71-
*ppTestReponse = testResponse;
68+
if (ppTestResponse != NULL) {
69+
*ppTestResponse = testResponse;
7270
}
7371

7472
CHK_LOG_ERR(retStatus);
@@ -274,11 +272,11 @@ STATUS discoverNatBehavior(PCHAR stunServer, NAT_BEHAVIOR* pNatMappingBehavior,
274272
PKvsIpAddress pSelectedLocalInterface = NULL;
275273
PConnectionListener pConnectionListener = NULL;
276274

275+
MEMSET(&customData, 0x00, SIZEOF(NatTestData));
277276
CHK(stunServer != NULL && pNatMappingBehavior != NULL && pNatFilteringBehavior != NULL, STATUS_NULL_ARG);
278277
CHK(!IS_EMPTY_STRING(stunServer), STATUS_INVALID_ARG);
279278

280279
MEMSET(&iceServerStun, 0x00, SIZEOF(IceServer));
281-
MEMSET(&customData, 0x00, SIZEOF(NatTestData));
282280
cvar = CVAR_CREATE();
283281
lock = MUTEX_CREATE(FALSE);
284282
CHK_STATUS(parseIceServer(&iceServerStun, stunServer, NULL, NULL));
@@ -334,24 +332,19 @@ STATUS discoverNatBehavior(PCHAR stunServer, NAT_BEHAVIOR* pNatMappingBehavior,
334332
CHK_STATUS(discoverNatFilteringBehavior(&iceServerStun, &customData, pSocketConnection, pNatFilteringBehavior));
335333

336334
CleanUp:
337-
338335
if (locked) {
339336
MUTEX_UNLOCK(lock);
340337
}
341-
342338
if (pConnectionListener != NULL) {
343339
connectionListenerRemoveAllConnection(pConnectionListener);
344340
freeConnectionListener(&pConnectionListener);
345341
}
346-
347342
if (pSocketConnection != NULL) {
348343
freeSocketConnection(&pSocketConnection);
349344
}
350-
351345
for (i = 0; i < customData.bindingResponseCount; ++i) {
352346
freeStunPacket(&customData.bindingResponseList[i]);
353347
}
354-
355348
if (cvar != INVALID_CVAR_VALUE) {
356349
CVAR_FREE(cvar);
357350
}

Diff for: src/source/Ice/SocketConnection.c

+6-4
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,16 @@ STATUS createSocketConnection(KVS_IP_FAMILY_TYPE familyType, KVS_SOCKET_PROTOCOL
4646
CHK_LOG_ERR(retStatus);
4747

4848
if (pBindAddr) {
49-
getIpAddrStr(pBindAddr, ipAddr, ARRAY_SIZE(ipAddr));
50-
DLOGD("create socket with ip: %s:%u. family:%d", ipAddr, (UINT16) getInt16(pBindAddr->port), pBindAddr->family);
49+
if (STATUS_SUCCEEDED(getIpAddrStr(pBindAddr, ipAddr, ARRAY_SIZE(ipAddr)))) {
50+
DLOGD("create socket with ip: %s:%u. family:%d", ipAddr, (UINT16) getInt16(pBindAddr->port), pBindAddr->family);
51+
}
5152
} else {
5253
DLOGD("create socket without the bind address(%d:%d)", familyType, protocol);
5354
}
5455
if (protocol == KVS_SOCKET_PROTOCOL_TCP) {
55-
getIpAddrStr(pPeerIpAddr, ipAddr, ARRAY_SIZE(ipAddr));
56-
DLOGD("tcp socket connected with ip: %s:%u. family:%d", ipAddr, (UINT16) getInt16(pPeerIpAddr->port), pPeerIpAddr->family);
56+
if (STATUS_SUCCEEDED(getIpAddrStr(pPeerIpAddr, ipAddr, ARRAY_SIZE(ipAddr)))) {
57+
DLOGD("tcp socket connected with ip: %s:%u. family:%d", ipAddr, (UINT16) getInt16(pPeerIpAddr->port), pPeerIpAddr->family);
58+
}
5759
}
5860

5961
if (STATUS_FAILED(retStatus) && pSocketConnection != NULL) {

Diff for: src/source/Include_i.h

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ extern "C" {
2525
// Project include files
2626
////////////////////////////////////////////////////
2727
#include <com/amazonaws/kinesis/video/webrtcclient/Include.h>
28+
#include "kvssdp/sdp_data_types.h"
2829

2930
#ifdef KVS_USE_OPENSSL
3031
#include <openssl/bio.h>
@@ -171,6 +172,8 @@ STATUS generateJSONSafeString(PCHAR, UINT32);
171172

172173
#define KVS_CONVERT_TIMESCALE(pts, from_timescale, to_timescale) (pts * to_timescale / from_timescale)
173174

175+
STATUS convertSdpErrorCode(SdpResult_t sdpResult);
176+
174177
#ifdef __cplusplus
175178
}
176179
#endif

Diff for: src/source/Metrics/Metrics.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ STATUS getIceCandidatePairStats(PRtcPeerConnection pRtcPeerConnection, PRtcIceCa
99
STATUS retStatus = STATUS_SUCCESS;
1010
BOOL locked = FALSE;
1111
PIceAgent pIceAgent = NULL;
12-
CHK((pRtcPeerConnection != NULL || pRtcIceCandidatePairStats != NULL), STATUS_NULL_ARG);
12+
CHK((pRtcPeerConnection != NULL && pRtcIceCandidatePairStats != NULL), STATUS_NULL_ARG);
1313
pIceAgent = ((PKvsPeerConnection) pRtcPeerConnection)->pIceAgent;
1414
MUTEX_LOCK(pIceAgent->lock);
1515
locked = TRUE;
@@ -58,8 +58,9 @@ STATUS getIceCandidateStats(PRtcPeerConnection pRtcPeerConnection, BOOL isRemote
5858
{
5959
STATUS retStatus = STATUS_SUCCESS;
6060
BOOL locked = FALSE;
61-
PIceAgent pIceAgent = ((PKvsPeerConnection) pRtcPeerConnection)->pIceAgent;
62-
CHK((pRtcPeerConnection != NULL || pRtcIceCandidateStats != NULL), STATUS_NULL_ARG);
61+
PIceAgent pIceAgent = NULL;
62+
CHK((pRtcPeerConnection != NULL && pRtcIceCandidateStats != NULL), STATUS_NULL_ARG);
63+
pIceAgent = ((PKvsPeerConnection) pRtcPeerConnection)->pIceAgent;
6364
MUTEX_LOCK(pIceAgent->lock);
6465
locked = TRUE;
6566
CHK_WARN(pIceAgent->kvsRtcConfiguration.enableIceStats, STATUS_SUCCESS, "ICE stats not enabled");
@@ -87,9 +88,11 @@ STATUS getIceServerStats(PRtcPeerConnection pRtcPeerConnection, PRtcIceServerSta
8788
{
8889
STATUS retStatus = STATUS_SUCCESS;
8990
BOOL locked = FALSE;
90-
PIceAgent pIceAgent = ((PKvsPeerConnection) pRtcPeerConnection)->pIceAgent;
91+
PIceAgent pIceAgent = NULL;
9192
CHK((pRtcPeerConnection != NULL && pRtcIceServerStats != NULL), STATUS_NULL_ARG);
9293

94+
pIceAgent = ((PKvsPeerConnection) pRtcPeerConnection)->pIceAgent;
95+
9396
MUTEX_LOCK(pIceAgent->lock);
9497
locked = TRUE;
9598
CHK_WARN(pIceAgent->kvsRtcConfiguration.enableIceStats, STATUS_SUCCESS, "ICE stats not enabled");

Diff for: src/source/PeerConnection/DataChannel.c

-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22

33
#include "../Include_i.h"
44

5-
STATUS connectLocalDataChannel()
6-
{
7-
return STATUS_SUCCESS;
8-
}
9-
105
STATUS createDataChannel(PRtcPeerConnection pPeerConnection, PCHAR pDataChannelName, PRtcDataChannelInit pRtcDataChannelInit,
116
PRtcDataChannel* ppRtcDataChannel)
127
{

Diff for: src/source/PeerConnection/Rtcp.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static STATUS onRtcpFIRPacket(PRtcpPacket pRtcpPacket, PKvsPeerConnection pKvsPe
2828
}
2929

3030
// TODO handle SLI packet https://tools.ietf.org/html/rfc4585#section-6.3.2
31-
static STATUS onRtcpSLIPacket(PRtcpPacket pRtcpPacket, PKvsPeerConnection pKvsPeerConnection)
31+
STATUS onRtcpSLIPacket(PRtcpPacket pRtcpPacket, PKvsPeerConnection pKvsPeerConnection)
3232
{
3333
STATUS retStatus = STATUS_SUCCESS;
3434
UINT32 mediaSSRC;

Diff for: src/source/PeerConnection/Rtcp.h

+2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ extern "C" {
99

1010
STATUS onRtcpPacket(PKvsPeerConnection, PBYTE, UINT32);
1111
STATUS onRtcpRembPacket(PRtcpPacket, PKvsPeerConnection);
12+
STATUS onRtcpTwccPacket(PRtcpPacket, PKvsPeerConnection);
1213
STATUS onRtcpPLIPacket(PRtcpPacket, PKvsPeerConnection);
14+
STATUS onRtcpSLIPacket(PRtcpPacket, PKvsPeerConnection);
1315
STATUS parseRtcpTwccPacket(PRtcpPacket, PTwccManager);
1416
STATUS onRtcpTwccPacket(PRtcpPacket, PKvsPeerConnection);
1517

Diff for: src/source/PeerConnection/Rtp.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ STATUS createKvsRtpTransceiver(RTC_RTP_TRANSCEIVER_DIRECTION direction, DOUBLE r
4646
pKvsRtpTransceiver->rollingBufferBitratebps = DEFAULT_EXPECTED_AUDIO_BIT_RATE;
4747
} else {
4848
DLOGW("Rolling buffer duration set to less than 100 Kibps for unknown codec. Setting to default %d bps", DEFAULT_EXPECTED_AUDIO_BIT_RATE);
49-
rollingBufferBitratebps = DEFAULT_EXPECTED_VIDEO_BIT_RATE;
49+
pKvsRtpTransceiver->rollingBufferBitratebps = DEFAULT_EXPECTED_VIDEO_BIT_RATE;
5050
}
5151

5252
} else {

Diff for: src/source/Sdp/Deserialize.c

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#include "kvssdp/sdp_deserializer.h"
44

55
// Convert error code from SDP library to STATUS.
6-
extern STATUS convertSdpErrorCode(SdpResult_t sdpResult);
76

87
STATUS parseMediaName(PSessionDescription pSessionDescription, PCHAR mediaValue, SIZE_T mediaValueLength)
98
{

Diff for: src/source/Sdp/Serialize.c

-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
#include "../Include_i.h"
33
#include "kvssdp/sdp_serializer.h"
44

5-
// Convert error code from SDP library to STATUS.
6-
extern STATUS convertSdpErrorCode(SdpResult_t sdpResult);
7-
85
static STATUS serializeVersion(SdpSerializerContext_t* pCtx, UINT64 version)
96
{
107
ENTERS();
@@ -156,7 +153,6 @@ static STATUS serializeMediaConnectionInformation(SdpSerializerContext_t* pCtx,
156153
SdpConnectionInfo_t connInfo;
157154

158155
CHK(pSdpConnectionInformation != NULL, STATUS_NULL_ARG);
159-
160156
if (pSdpConnectionInformation->networkType[0] != '\0') {
161157
/* Append connection info */
162158
CHK(STRCMP(pSdpConnectionInformation->networkType, "IN") == 0, STATUS_INVALID_ARG);

Diff for: src/source/Signaling/FileCache.h

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ typedef struct {
3838
STATUS deserializeSignalingCacheEntries(PCHAR, UINT64, PSignalingFileCacheEntry, PUINT32, PCHAR);
3939
STATUS signalingCacheLoadFromFile(PCHAR, PCHAR, SIGNALING_CHANNEL_ROLE_TYPE, PSignalingFileCacheEntry, PBOOL, PCHAR);
4040
STATUS signalingCacheSaveToFile(PSignalingFileCacheEntry, PCHAR);
41+
STATUS createFileIfNotExist(PCHAR);
4142

4243
#ifdef __cplusplus
4344
}

Diff for: tst/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ endif()
3838

3939
file(GLOB WEBRTC_CLIENT_TEST_SOURCE_FILES "*.cpp" )
4040

41-
add_executable(webrtc_client_test ${WEBRTC_CLIENT_TEST_SOURCE_FILES} SignalingApiFunctionalityTest.h)
41+
add_executable(webrtc_client_test ${WEBRTC_CLIENT_TEST_SOURCE_FILES})
42+
target_include_directories(webrtc_client_test PRIVATE "../configs")
4243
target_link_libraries(webrtc_client_test
4344
kvsWebrtcClient
4445
kvsWebrtcSignalingClient

Diff for: tst/CryptoApiTest.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "WebRTCClientTestFixture.h"
2+
3+
namespace com {
4+
namespace amazonaws {
5+
namespace kinesis {
6+
namespace video {
7+
namespace webrtcclient {
8+
9+
class CryptoApiTest : public WebRtcClientTestBase {
10+
};
11+
12+
TEST_F(CryptoApiTest, createRtcCertificateApiTest)
13+
{
14+
PRtcCertificate pRtcCertificate = NULL;
15+
EXPECT_EQ(createRtcCertificate(NULL), STATUS_NULL_ARG);
16+
EXPECT_EQ(createRtcCertificate(&pRtcCertificate), STATUS_SUCCESS);
17+
EXPECT_TRUE(pRtcCertificate != NULL);
18+
EXPECT_EQ(freeRtcCertificate(NULL), STATUS_SUCCESS);
19+
EXPECT_EQ(freeRtcCertificate(pRtcCertificate), STATUS_SUCCESS);
20+
}
21+
22+
} // namespace webrtcclient
23+
} // namespace video
24+
} // namespace kinesis
25+
} // namespace amazonaws
26+
} // namespace com

Diff for: tst/IceApiTest.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ namespace webrtcclient {
99
class IceApiTest : public WebRtcClientTestBase {
1010
};
1111

12+
TEST_F(IceApiTest, failCreateSocketConnection)
13+
{
14+
PSocketConnection pDummySocketConnection = NULL;
15+
KvsIpAddress localhost;
16+
17+
MEMSET(&localhost, 0x00, SIZEOF(KvsIpAddress));
18+
19+
EXPECT_EQ(createSocketConnection(KVS_IP_FAMILY_TYPE_IPV4, KVS_SOCKET_PROTOCOL_NONE, &localhost, NULL, 0, NULL, 0, &pDummySocketConnection), STATUS_INVALID_ARG);
20+
21+
EXPECT_EQ(createSocketConnection(KVS_IP_FAMILY_TYPE_IPV4, KVS_SOCKET_PROTOCOL_TCP, NULL, NULL, 0, NULL, 0, &pDummySocketConnection), STATUS_INVALID_ARG);
22+
23+
}
24+
1225
TEST_F(IceApiTest, ConnectionListenerApiTest)
1326
{
1427
PConnectionListener pConnectionListener = NULL;

Diff for: tst/JitterBufferFunctionalityTest.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,15 @@ TEST_F(JitterBufferFunctionalityTest, continousPacketsComeInOrder)
103103
clearJitterBufferForTest();
104104
}
105105

106+
TEST_F(JitterBufferFunctionalityTest, createJitterBufferLatencySetTest)
107+
{
108+
EXPECT_EQ(createJitterBuffer(testFrameReadyFunc, testFrameDroppedFunc, testDepayRtpFunc, 0,
109+
TEST_JITTER_BUFFER_CLOCK_RATE, (UINT64) this, &mJitterBuffer), STATUS_SUCCESS);
110+
EXPECT_EQ(mJitterBuffer->maxLatency, DEFAULT_JITTER_BUFFER_MAX_LATENCY * TEST_JITTER_BUFFER_CLOCK_RATE / HUNDREDS_OF_NANOS_IN_A_SECOND);
111+
EXPECT_EQ(freeJitterBuffer(NULL), STATUS_NULL_ARG);
112+
EXPECT_EQ(freeJitterBuffer(&mJitterBuffer), STATUS_SUCCESS);
113+
}
114+
106115
TEST_F(JitterBufferFunctionalityTest, continousPacketsComeOutOfOrder)
107116
{
108117
UINT32 i;

0 commit comments

Comments
 (0)