[Nice] [nice/master] Add test for new set_selecte_remote_candidate function

Olivier Crête olivier.crete at collabora.co.uk
Wed Nov 5 14:01:43 PST 2008


---
 agent/test-fallback.c |  138 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 138 insertions(+), 0 deletions(-)

diff --git a/agent/test-fallback.c b/agent/test-fallback.c
index 64cf4d6..4eedeaf 100644
--- a/agent/test-fallback.c
+++ b/agent/test-fallback.c
@@ -337,6 +337,136 @@ static int run_fallback_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress
   return 0;
 }
 
+
+static int run_safe_fallback_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *baseaddr)
+{
+  NiceAddress laddr, raddr, laddr_rtcp, raddr_rtcp;
+  NiceCandidate cdes;
+  guint ls_id, rs_id;
+
+  memset (&cdes, 0, sizeof(NiceCandidate));
+  cdes.priority = 100000;
+  strcpy (cdes.foundation, "1");
+  cdes.type = NICE_CANDIDATE_TYPE_HOST;
+  cdes.transport = NICE_CANDIDATE_TRANSPORT_UDP;
+  cdes.base_addr = *baseaddr;
+
+  /* step: initialize variables modified by the callbacks */
+  global_components_ready = 0;
+  global_components_ready_exit = 4;
+  global_components_failed = 0;
+  global_components_failed_exit = 4;
+  global_lagent_gathering_done = FALSE;
+  global_ragent_gathering_done = FALSE;
+  global_lagent_ibr_received =
+    global_ragent_ibr_received = FALSE;
+  global_lagent_cands =
+    global_ragent_cands = 0;
+  global_ragent_read_exit = -1;
+
+  g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
+  g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
+
+  /* step: add one stream, with RTP+RTCP components, to each agent */
+  ls_id = nice_agent_add_stream (lagent, 2);
+  rs_id = nice_agent_add_stream (ragent, 2);
+  g_assert (ls_id > 0);
+  g_assert (rs_id > 0);
+
+  nice_agent_gather_candidates (lagent, ls_id);
+  nice_agent_gather_candidates (ragent, rs_id);
+
+  /* step: attach to mainloop (needed to register the fds) */
+  nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
+      g_main_loop_get_context (global_mainloop), cb_nice_recv, (gpointer)1);
+  nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
+      g_main_loop_get_context (global_mainloop), cb_nice_recv, (gpointer)1);
+  nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
+      g_main_loop_get_context (global_mainloop), cb_nice_recv, (gpointer)2);
+  nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP,
+      g_main_loop_get_context (global_mainloop), cb_nice_recv, (gpointer)2);
+
+  /* step: run mainloop until local candidates are ready
+   *       (see timer_cb() above) */
+  if (global_lagent_gathering_done != TRUE ||
+      global_ragent_gathering_done != TRUE) {
+    g_debug ("test-fallback: Added streams, running mainloop until 'candidate-gathering-done'...");
+    g_main_loop_run (global_mainloop);
+    g_assert (global_lagent_gathering_done == TRUE);
+    g_assert (global_ragent_gathering_done == TRUE);
+  }
+
+  /* step: find out the local candidates of each agent */
+
+  priv_get_local_addr (ragent, rs_id, NICE_COMPONENT_TYPE_RTP, &raddr);
+  g_debug ("test-fallback: local RTP port R %u",
+           nice_address_get_port (&raddr));
+
+  priv_get_local_addr (lagent, ls_id, NICE_COMPONENT_TYPE_RTP, &laddr);
+  g_debug ("test-fallback: local RTP port L %u",
+           nice_address_get_port (&laddr));
+
+  priv_get_local_addr (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP, &raddr_rtcp);
+  g_debug ("test-fallback: local RTCP port R %u",
+           nice_address_get_port (&raddr_rtcp));
+
+  priv_get_local_addr (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP, &laddr_rtcp);
+  g_debug ("test-fallback: local RTCP port L %u",
+           nice_address_get_port (&laddr_rtcp));
+
+  /* step: exchange candidate information but not the credentials */
+
+  cdes.component_id = NICE_COMPONENT_TYPE_RTP;
+  cdes.addr = raddr;
+  g_assert (nice_agent_set_selected_remote_candidate (lagent, ls_id, NICE_COMPONENT_TYPE_RTP, &cdes));
+
+  cdes.addr = laddr;
+  g_assert (nice_agent_set_selected_remote_candidate (ragent, rs_id, NICE_COMPONENT_TYPE_RTP, &cdes));
+
+  cdes.component_id = NICE_COMPONENT_TYPE_RTCP;
+  cdes.addr = raddr_rtcp;
+  g_assert (nice_agent_set_selected_remote_candidate (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP, &cdes));
+
+  cdes.addr = laddr_rtcp;
+  g_assert (nice_agent_set_selected_remote_candidate (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP, &cdes));
+
+  g_debug ("test-fallback: Requested for fallback, running mainloop until component state change is completed...");
+
+  /* step: run the mainloop until connectivity checks succeed
+   *       (see timer_cb() above) */
+  if (global_components_ready < global_components_ready_exit)
+    g_main_loop_run (global_mainloop);
+
+  /* note: verify that agents are in correct state */
+  g_assert (global_lagent_state == NICE_COMPONENT_STATE_READY);
+  g_assert (global_ragent_state == NICE_COMPONENT_STATE_READY);
+
+  /* step: next send a packet -> should work even if no ICE processing
+   *       has been done */
+
+  g_debug ("test-fallback: Sent a payload packet, run mainloop until packet received.");
+
+  /* step: send a new test packet from L ot R */
+  global_ragent_read = 0;
+  g_assert (nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678") == 16);
+  global_ragent_read_exit = 16;
+  g_main_loop_run (global_mainloop);
+
+  /* note: verify that payload was succesfully received */
+  g_assert (global_ragent_read == 16);
+
+  g_debug ("test-fallback: Ran mainloop, removing streams...");
+
+  /* step: clean up resources and exit */
+
+  nice_agent_remove_stream (lagent, ls_id);
+  nice_agent_remove_stream (ragent, rs_id);
+
+  g_debug ("test-fallback: test COMPLETED");
+
+  return 0;
+}
+
 int main (void)
 {
   NiceAgent *lagent, *ragent;      /* agent's L and R */
@@ -412,6 +542,14 @@ int main (void)
   g_assert (global_lagent_state == NICE_COMPONENT_STATE_READY);
   g_assert (global_ragent_state == NICE_COMPONENT_STATE_READY);
 
+  /* step: run the safe test without sending any stnu */
+  g_debug ("test-fallback: TEST STARTS / safe fallback test");
+  result = run_safe_fallback_test (lagent, ragent, &baseaddr);
+  priv_print_global_status ();
+  g_assert (result == 0);
+  g_assert (global_lagent_state == NICE_COMPONENT_STATE_READY);
+  g_assert (global_ragent_state == NICE_COMPONENT_STATE_READY);
+
   g_object_unref (lagent);
   g_object_unref (ragent);
 
-- 
1.5.6.5




More information about the Nice mailing list