summaryrefslogtreecommitdiff
path: root/tests/test-new-dribble.c
diff options
context:
space:
mode:
authorRohan Garg <rohangarg@kubuntu.org>2012-05-03 23:17:20 +0530
committerRohan Garg <rohangarg@kubuntu.org>2012-05-03 23:17:20 +0530
commit1405c4c29a00fca15ceed00ada5d9861c58bbe99 (patch)
tree69e48a2276513f094156fc33d3bc0800de09aae1 /tests/test-new-dribble.c
parent911c6cafae6e8fd79a0e3ab475680d0961c36630 (diff)
downloadlibnice-1405c4c29a00fca15ceed00ada5d9861c58bbe99.tar.gz
Minor bug fixes and enhancements to the test
Diffstat (limited to 'tests/test-new-dribble.c')
-rw-r--r--tests/test-new-dribble.c126
1 files changed, 71 insertions, 55 deletions
diff --git a/tests/test-new-dribble.c b/tests/test-new-dribble.c
index da3797b..850cf87 100644
--- a/tests/test-new-dribble.c
+++ b/tests/test-new-dribble.c
@@ -38,6 +38,7 @@
*/
#include <glib.h>
+#include <glib-object.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
@@ -77,6 +78,7 @@ static gboolean exit_stun_thread = FALSE;
static gboolean lagent_candidate_gathering_done = FALSE;
static gboolean ragent_candidate_gathering_done = FALSE;
static guint global_ls_id, global_rs_id;
+static gboolean data_received = FALSE;
static const uint16_t known_attributes[] = {
0
@@ -163,9 +165,6 @@ recv_packet:
goto recv_packet;
}
- // Don't recieve anymore
- shutdown (sock, 0);
-
switch (stun_message_get_method (&request)) {
case STUN_BINDING:
stun_agent_init_response (agent, &response, buf, sizeof (buf), &request);
@@ -182,6 +181,7 @@ recv_packet:
if (!stun_agent_init_error (agent, &response, buf, sizeof (buf),
&request, STUN_ERROR_BAD_REQUEST)) {
g_debug ("STUN error message not initialized properly");
+ g_assert_not_reached();
}
}
@@ -195,11 +195,11 @@ send_buf:
g_debug ("Waiting for signal. State is %d", global_lagent_state);
g_cond_wait (stun_signal_ptr, stun_mutex_ptr);
}
+ g_mutex_unlock (stun_mutex_ptr);
len = sendto (sock, buf, buf_len, 0,
(struct sockaddr *)&addr, addr_len);
g_debug ("STUN response sent");
ret = (len < buf_len) ? -1 : 0;
- g_mutex_unlock (stun_mutex_ptr);
return ret;
}
@@ -216,24 +216,20 @@ static gpointer stun_thread_func (const gpointer user_data)
stun_agent_init (&newagent, known_attributes,
STUN_COMPATIBILITY_RFC5389, STUN_AGENT_USAGE_USE_FINGERPRINT);
- for (;;) {
+ while (!exit_stun_thread) {
sock = listen_socket (IPPORT_STUN);
if (sock == -1) {
continue;
}
- if (exit_stun_thread) {
- g_debug ("Exit STUN daemon");
- exit_code = close (sock);
- g_thread_exit (GINT_TO_POINTER (exit_code));
- }
g_debug ("Ready to process next datagram");
dgram_process (sock, &oldagent, &newagent);
g_assert (g_mutex_trylock(stun_thread_ret_mutex_ptr));
g_cond_wait (stun_thread_ret_ptr, stun_thread_ret_mutex_ptr);
g_mutex_unlock (stun_thread_ret_mutex_ptr);
- close (sock);
+ exit_code = close (sock);
}
+ g_thread_exit (GINT_TO_POINTER (exit_code));
return NULL;
}
@@ -282,7 +278,11 @@ static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id,
g_debug ("test-dribblemode:%s: ragent recieved %d bytes : quit mainloop",
G_STRFUNC, len);
+ data_received = TRUE;
g_main_loop_quit (global_mainloop);
+ } else {
+ g_debug ("Buffer is %s", buf);
+ g_assert_not_reached();
}
}
@@ -315,19 +315,21 @@ static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint
}
}
-static void swap_candidates(NiceAgent *local, guint local_id, NiceAgent *remote, guint remote_id, gpointer user_data)
+static void swap_candidates(NiceAgent *local, guint local_id, NiceAgent *remote, guint remote_id, gboolean signal_stun_reply)
{
GSList *cands = NULL;
- g_debug ("test-dribblemode:%s: %p", G_STRFUNC, user_data);
+ g_debug ("test-dribblemode:%s", G_STRFUNC);
cands = nice_agent_get_local_candidates(local, local_id,
NICE_COMPONENT_TYPE_RTP);
g_assert(nice_agent_set_remote_candidates(remote, remote_id,
NICE_COMPONENT_TYPE_RTP, cands));
- if (GPOINTER_TO_UINT(user_data) == 2) {
+ if (signal_stun_reply) {
g_cond_signal (stun_signal_ptr);
}
+
+ g_slist_free_full (cands, (GDestroyNotify) nice_candidate_free);
}
static void cb_agent_new_candidate(NiceAgent *agent, guint stream_id, guint component_id, gchar *foundation, gpointer user_data)
@@ -339,7 +341,6 @@ static void cb_agent_new_candidate(NiceAgent *agent, guint stream_id, guint comp
NiceCandidate* temp;
gpointer tmp;
guint id;
- static bool send_stun_response = TRUE;
g_debug ("test-dribblemode:%s: %p", G_STRFUNC, user_data);
@@ -350,7 +351,7 @@ static void cb_agent_new_candidate(NiceAgent *agent, guint stream_id, guint comp
temp = (NiceCandidate*) cands->data;
if (g_strcmp0(temp->foundation, foundation) == 0) {
g_debug ("Adding new local candidate to other agent's connchecks");
- remote_cands = g_slist_prepend (remote_cands, temp);
+ remote_cands = g_slist_prepend (remote_cands, nice_candidate_copy(temp));
g_assert (nice_agent_set_remote_candidates (other, id,
NICE_COMPONENT_TYPE_RTP,
remote_cands));
@@ -358,10 +359,8 @@ static void cb_agent_new_candidate(NiceAgent *agent, guint stream_id, guint comp
cands = g_slist_next(cands);
}
- if (send_stun_response) {
- g_cond_signal (stun_signal_ptr);
- send_stun_response = FALSE;
- }
+ g_slist_free_full (remote_cands, (GDestroyNotify) nice_candidate_free);
+ g_slist_free_full (cands, (GDestroyNotify) nice_candidate_free);
}
@@ -376,31 +375,28 @@ static void add_bad_candidate (NiceAgent *agent, guint stream_id, NiceCandidate
cand->stream_id = stream_id;
cand->component_id = NICE_COMPONENT_TYPE_RTP;
cand->addr = bad_addr;
- cand->username = NULL;
- cand->password = NULL;
+ nice_agent_get_local_credentials (agent, stream_id,
+ &cand->username, &cand->password);
cand_list = g_slist_prepend (cand_list, cand);
g_debug ("Adding buggy candidate to the agent %p", agent);
- nice_agent_set_remote_candidates (agent, stream_id,
+ g_assert (nice_agent_set_remote_candidates (agent, stream_id,
NICE_COMPONENT_TYPE_RTP,
- cand_list);
+ cand_list));
- g_slist_free (cand_list);
+ g_slist_free_full (cand_list, (GDestroyNotify) nice_candidate_free);
}
static void init_test(NiceAgent *lagent, NiceAgent *ragent, gboolean connect_new_candidate_signal)
{
- global_lagent_state = NICE_COMPONENT_STATE_LAST;
- global_ragent_state = NICE_COMPONENT_STATE_LAST;
+ global_lagent_state = NICE_COMPONENT_STATE_DISCONNECTED;
+ global_ragent_state = NICE_COMPONENT_STATE_DISCONNECTED;
lagent_candidate_gathering_done = FALSE;
ragent_candidate_gathering_done = FALSE;
- global_ls_id = 0;
- global_rs_id = 0;
-
global_ls_id = nice_agent_add_stream (lagent, 1);
global_rs_id = nice_agent_add_stream (ragent, 1);
@@ -415,11 +411,18 @@ static void init_test(NiceAgent *lagent, NiceAgent *ragent, gboolean connect_new
g_object_set_data (G_OBJECT (ragent), "id", GUINT_TO_POINTER (global_rs_id));
if (connect_new_candidate_signal) {
- g_signal_connect(G_OBJECT(ragent), "new-candidate",
- G_CALLBACK(cb_agent_new_candidate), GUINT_TO_POINTER(1));
- g_signal_connect(G_OBJECT(ragent), "new-candidate",
- G_CALLBACK(cb_agent_new_candidate), GUINT_TO_POINTER(2));
- }
+ g_signal_connect (G_OBJECT(lagent), "new-candidate",
+ G_CALLBACK(cb_agent_new_candidate), GUINT_TO_POINTER(1));
+ g_signal_connect (G_OBJECT(ragent), "new-candidate",
+ G_CALLBACK(cb_agent_new_candidate), GUINT_TO_POINTER(2));
+ } /*else {
+ g_signal_disconnect_by_func (G_OBJECT(lagent), cb_agent_new_candidate,
+ GUINT_TO_POINTER(1));
+ g_signal_disconnect_by_func (G_OBJECT(ragent), cb_agent_new_candidate,
+ GUINT_TO_POINTER(2));
+ }*/
+
+ data_received = FALSE;
nice_agent_attach_recv (lagent, global_ls_id, NICE_COMPONENT_TYPE_RTP,
g_main_loop_get_context(global_mainloop),
@@ -444,8 +447,8 @@ static void standard_test(NiceAgent *lagent, NiceAgent *ragent)
nice_agent_gather_candidates (lagent, global_ls_id);
g_main_loop_run (global_mainloop);
- g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING);
- g_assert (!lagent_candidate_gathering_done);
+ g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING &&
+ !lagent_candidate_gathering_done);
nice_agent_gather_candidates (ragent, global_rs_id);
if (!ragent_candidate_gathering_done) {
@@ -458,20 +461,22 @@ static void standard_test(NiceAgent *lagent, NiceAgent *ragent)
g_debug ("Setting local candidates of ragent as remote candidates of lagent");
swap_candidates (ragent, global_rs_id,
lagent, global_ls_id,
- GUINT_TO_POINTER(2));
+ TRUE);
g_main_loop_run (global_mainloop);
+ g_assert (global_lagent_state >= NICE_COMPONENT_STATE_CONNECTED &&
+ data_received);
g_debug ("Setting local candidates of lagent as remote candidates of ragent");
swap_candidates (lagent, global_ls_id,
ragent, global_rs_id,
- GUINT_TO_POINTER(1));
+ FALSE);
g_main_loop_run (global_mainloop);
g_assert (lagent_candidate_gathering_done);
g_assert (global_lagent_state == NICE_COMPONENT_STATE_READY);
- g_assert (global_lagent_state >= NICE_COMPONENT_STATE_CONNECTED);
+ g_assert (global_ragent_state >= NICE_COMPONENT_STATE_CONNECTED);
cleanup (lagent, ragent);
}
@@ -490,8 +495,8 @@ static void bad_credentials_test(NiceAgent *lagent, NiceAgent *ragent)
nice_agent_gather_candidates (lagent, global_ls_id);
g_cond_signal (stun_thread_ret_ptr);
g_main_loop_run (global_mainloop);
- g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING);
- g_assert (!lagent_candidate_gathering_done);
+ g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING &&
+ !lagent_candidate_gathering_done);
nice_agent_gather_candidates (ragent, global_rs_id);
if (!ragent_candidate_gathering_done) {
@@ -501,7 +506,7 @@ static void bad_credentials_test(NiceAgent *lagent, NiceAgent *ragent)
swap_candidates (ragent, global_rs_id,
lagent, global_ls_id,
- GUINT_TO_POINTER(1));
+ FALSE);
g_main_loop_run (global_mainloop);
g_assert (global_lagent_state == NICE_COMPONENT_STATE_FAILED);
@@ -509,14 +514,15 @@ static void bad_credentials_test(NiceAgent *lagent, NiceAgent *ragent)
set_credentials (lagent, global_ls_id, ragent, global_rs_id);
swap_candidates (ragent, global_rs_id,
lagent, global_ls_id,
- GUINT_TO_POINTER(1));
+ FALSE);
swap_candidates (lagent, global_ls_id,
ragent, global_rs_id,
- GUINT_TO_POINTER(1));
+ FALSE);
g_main_loop_run (global_mainloop);
+ g_assert (data_received);
g_assert (global_lagent_state == NICE_COMPONENT_STATE_READY);
g_assert (global_ragent_state >= NICE_COMPONENT_STATE_CONNECTED);
@@ -538,8 +544,8 @@ static void bad_candidate_test(NiceAgent *lagent,NiceAgent *ragent)
nice_agent_gather_candidates (lagent, global_ls_id);
g_cond_signal (stun_thread_ret_ptr);
g_main_loop_run (global_mainloop);
- g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING);
- g_assert (!lagent_candidate_gathering_done);
+ g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING &&
+ !lagent_candidate_gathering_done);
nice_agent_gather_candidates (ragent, global_rs_id);
if (!ragent_candidate_gathering_done) {
@@ -548,21 +554,25 @@ static void bad_candidate_test(NiceAgent *lagent,NiceAgent *ragent)
}
add_bad_candidate (lagent, global_ls_id, cand);
+
+ // lagent will finish candidate gathering causing this mainloop to quit
g_main_loop_run (global_mainloop);
- g_assert (global_lagent_state == NICE_COMPONENT_STATE_FAILED);
+ // connchecks will fail causing this mainloop to quit
+ g_main_loop_run (global_mainloop);
+
+ g_assert (global_lagent_state == NICE_COMPONENT_STATE_FAILED &&
+ !data_received);
set_credentials (lagent, global_ls_id, ragent, global_rs_id);
swap_candidates (ragent, global_rs_id,
lagent, global_ls_id,
- GUINT_TO_POINTER(1));
+ FALSE);
swap_candidates (lagent, global_ls_id,
ragent, global_rs_id,
- GUINT_TO_POINTER(1));
- g_main_loop_run (global_mainloop);
+ FALSE);
- // Wait for lagent to finish candidate gathering
g_main_loop_run (global_mainloop);
g_assert (lagent_candidate_gathering_done);
@@ -583,16 +593,22 @@ static void new_candidate_test(NiceAgent *lagent, NiceAgent *ragent)
nice_agent_gather_candidates (lagent, global_ls_id);
g_cond_signal (stun_thread_ret_ptr);
g_main_loop_run (global_mainloop);
- g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING);
- g_assert (!lagent_candidate_gathering_done);
+ g_assert (global_lagent_state == NICE_COMPONENT_STATE_GATHERING &&
+ !lagent_candidate_gathering_done);
nice_agent_gather_candidates (ragent, global_rs_id);
if (!ragent_candidate_gathering_done) {
g_main_loop_run (global_mainloop);
}
- // Wait for lagent and ragent to finish gathering candidates
+ // Wait for data
g_main_loop_run (global_mainloop);
+ g_assert (data_received);
+
+ // Data arrived, signal STUN thread to send STUN response
+ g_cond_signal (stun_signal_ptr);
+
+ // Wait for lagent to finish gathering candidates
g_main_loop_run (global_mainloop);
g_assert (lagent_candidate_gathering_done);