END_TEST START_TEST (CancelTrans_BindErrorResp) { int ctx; ctx = StartBindTransaction(0); StunClient_HandleTick(stunInstance, STUN_TICK_INTERVAL_MS); fail_unless (StunClient_cancelBindingTransaction(stunInstance, LastTransId) == ctx); StunClient_HandleTick(stunInstance, STUN_TICK_INTERVAL_MS); SimBindSuccessResp(ctx, runningAsIPv6, false); }
END_TEST START_TEST (Send_Discuss) { int ctx; ctx = StartDiscussBindTransaction(0); StunClient_HandleTick(stunInstance, STUN_TICK_INTERVAL_MS); SimBindSuccessResp(ctx, runningAsIPv6, true); fail_unless (stunResult == StunResult_BindOk); }
END_TEST START_TEST (WaitBindRespNotAut_BindError) { //printf("IPv6: %s\n", runningAsIPv6? "True" : "False"); int ctx; ctx = StartBindTransaction(0); StunClient_HandleTick(stunInstance, STUN_TICK_INTERVAL_MS); SimBindSuccessResp(ctx, runningAsIPv6, false); fail_unless (stunResult == StunResult_BindFail); }
static void* tickStun(void* ptr) { struct timespec timer; struct timespec remaining; STUN_CLIENT_DATA* clientData = (STUN_CLIENT_DATA*)ptr; timer.tv_sec = 0; timer.tv_nsec = 50000000; for (;; ) { nanosleep(&timer, &remaining); StunClient_HandleTick(clientData, 50); } return NULL; }
CTEST(stuntrace, run_IPv4_Stunresp_max_ttl) { int someData = 3; STUN_CLIENT_DATA* clientData; struct sockaddr_storage localAddr, remoteAddr, hop1Addr; int sockfd = 4; sockaddr_initFromString( (struct sockaddr*)&remoteAddr, "193.200.93.152:45674" ); sockaddr_initFromString( (struct sockaddr*)&localAddr, "192.168.1.34:45674" ); StunClient_Alloc(&clientData); int len = StunTrace_startTrace(clientData, &someData, (const struct sockaddr*)&remoteAddr, (const struct sockaddr*)&localAddr, sockfd, "test", "tset", 1, StunTraceCallBack, sendPacket); /* First alive probe */ ASSERT_TRUE(len != 0); ASSERT_TRUE(LastTTL == 40); StunMessage m; memset( &m, 0, sizeof(m) ); memcpy( &m.msgHdr.id, &LastTransId, STUN_MSG_ID_SIZE); memcpy( &m.msgHdr.cookie, StunCookie, sizeof(m.msgHdr.cookie) ); m.msgHdr.msgType = STUN_MSG_BindResponseMsg; m.hasXorMappedAddress = true; m.xorMappedAddress.familyType = STUN_ADDR_IPv4Family; m.xorMappedAddress.addr.v4.addr = test_addr_ipv4; m.xorMappedAddress.addr.v4.port = test_port_ipv4; StunClient_HandleIncResp(clientData, &m, NULL); /*Timeout is roughtly 160*50 ms*/ for (int i = 0; i < 160 * 38; i++) { StunClient_HandleTick(clientData, 50); } /* First hop.. */ ASSERT_TRUE(LastTTL == 39); sockaddr_initFromString( (struct sockaddr*)&hop1Addr, "192.168.1.1:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop1Addr, 11); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop1Addr ) ); ASSERT_TRUE( Done); ASSERT_TRUE( EndOfTrace); }
CTEST(stuntrace, run_IPv4_Stunresp_dead) { int someData = 3; STUN_CLIENT_DATA* clientData; struct sockaddr_storage localAddr, remoteAddr, hop1Addr; int sockfd = 4; sockaddr_initFromString( (struct sockaddr*)&remoteAddr, "193.200.93.152:45674" ); sockaddr_initFromString( (struct sockaddr*)&localAddr, "192.168.1.34:45674" ); StunClient_Alloc(&clientData); StunTrace_startTrace(clientData, &someData, (const struct sockaddr*)&remoteAddr, (const struct sockaddr*)&localAddr, sockfd, "test", "tset", 1, StunTraceCallBack, sendPacket); /*Timeout is roughtly 160*50 ms*/ for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } /* First hop.. */ ASSERT_TRUE(LastTTL == 1); sockaddr_initFromString( (struct sockaddr*)&hop1Addr, "192.168.1.1:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop1Addr, 11); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop1Addr ) ); ASSERT_TRUE( LastTTL == 2); for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } ASSERT_TRUE(LastTTL == 3); for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } ASSERT_TRUE(LastTTL == 4); for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } ASSERT_TRUE(LastTTL == 5); for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } ASSERT_TRUE(LastTTL == 5); ASSERT_TRUE(Done); ASSERT_TRUE(EndOfTrace); }
CTEST(stuntrace, no_answer_recurring_IPv4) { int someData = 3; STUN_CLIENT_DATA* clientData; struct sockaddr_storage localAddr, remoteAddr, hop1Addr, hop2Addr; int sockfd = 4; sockaddr_initFromString( (struct sockaddr*)&remoteAddr, "193.200.93.152:45674" ); sockaddr_initFromString( (struct sockaddr*)&localAddr, "192.168.1.34:45674" ); StunClient_Alloc(&clientData); int len = StunTrace_startTrace(clientData, &someData, (const struct sockaddr*)&remoteAddr, (const struct sockaddr*)&localAddr, sockfd, "test", "tset", 2, StunTraceCallBack, sendPacket); ASSERT_TRUE(len != 0); StunClient_HandleICMP(clientData, (struct sockaddr*)&remoteAddr, 3); /* HOP 1 Answer */ ASSERT_TRUE(LastTTL == 1); sockaddr_initFromString( (struct sockaddr*)&hop1Addr, "192.168.1.1:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop1Addr, 11); ASSERT_FALSE(Done); ASSERT_FALSE(EndOfTrace); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop1Addr ) ); /* HOP 2 No Answer */ ASSERT_TRUE( LastTTL == 2); ASSERT_TRUE( LastTTL == 2); /*Timeout is roughtly 160*50 ms*/ for (int i = 0; i < 160; i++) { StunClient_HandleTick(clientData, 50); } ASSERT_FALSE(Done); ASSERT_FALSE(EndOfTrace); /* HOP 3 Answer */ ASSERT_TRUE(LastTTL == 3); sockaddr_initFromString( (struct sockaddr*)&hop2Addr, "193.200.93.152:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop2Addr, 3); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop2Addr ) ); ASSERT_FALSE(Done); ASSERT_TRUE(EndOfTrace); /* HOP 1 Answer */ ASSERT_TRUE(LastTTL == 1); sockaddr_initFromString( (struct sockaddr*)&hop1Addr, "192.168.1.1:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop1Addr, 11); ASSERT_FALSE(Done); ASSERT_FALSE(EndOfTrace); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop1Addr ) ); /* HOP 3 Answer */ ASSERT_TRUE(LastTTL == 3); sockaddr_initFromString( (struct sockaddr*)&hop2Addr, "193.200.93.152:45674" ); StunClient_HandleICMP(clientData, (struct sockaddr*)&hop2Addr, 3); ASSERT_TRUE( sockaddr_alike( (struct sockaddr*)&LastHopAddr, (struct sockaddr*)&hop2Addr ) ); ASSERT_TRUE( Done); ASSERT_TRUE( EndOfTrace); }