Imported Upstream version 0.1.17
[platform/upstream/libnice.git] / tests / test.c
1 /*
2  * This file is part of the Nice GLib ICE library.
3  *
4  * (C) 2006, 2007 Collabora Ltd.
5  *  Contact: Dafydd Harries
6  * (C) 2006, 2007 Nokia Corporation. All rights reserved.
7  *  Contact: Kai Vehmanen
8  *
9  * The contents of this file are subject to the Mozilla Public License Version
10  * 1.1 (the "License"); you may not use this file except in compliance with
11  * the License. You may obtain a copy of the License at
12  * http://www.mozilla.org/MPL/
13  *
14  * Software distributed under the License is distributed on an "AS IS" basis,
15  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
16  * for the specific language governing rights and limitations under the
17  * License.
18  *
19  * The Original Code is the Nice GLib ICE library.
20  *
21  * The Initial Developers of the Original Code are Collabora Ltd and Nokia
22  * Corporation. All Rights Reserved.
23  *
24  * Contributors:
25  *   Dafydd Harries, Collabora Ltd.
26  *
27  * Alternatively, the contents of this file may be used under the terms of the
28  * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
29  * case the provisions of LGPL are applicable instead of those above. If you
30  * wish to allow use of your version of this file only under the terms of the
31  * LGPL and not to allow others to use your version of this file under the
32  * MPL, indicate your decision by deleting the provisions above and replace
33  * them with the notice and other provisions required by the LGPL. If you do
34  * not delete the provisions above, a recipient may use your version of this
35  * file under either the MPL or the LGPL.
36  */
37 #ifdef HAVE_CONFIG_H
38 # include <config.h>
39 #endif
40
41 #include <string.h>
42
43 #include "agent.h"
44 #include "agent-priv.h"
45
46 /* Waits about 10 seconds for @var to be NULL/FALSE */
47 #define WAIT_UNTIL_UNSET(var, context)                  \
48   if (var)                                              \
49     {                                                   \
50       int _i;                                           \
51                                                         \
52       for (_i = 0; _i < 13 && (var); _i++)              \
53         {                                               \
54           g_usleep (1000 * (1 << _i));                  \
55           g_main_context_iteration (context, FALSE);    \
56         }                                               \
57                                                         \
58       g_assert (!(var));                                \
59     }
60
61 gint
62 main (void)
63 {
64   NiceAgent *agent;
65   NiceAddress addr_local, addr_remote;
66   NiceCandidate *candidate;
67   GSList *candidates, *i;
68   guint stream_id;
69
70 #ifdef G_OS_WIN32
71   WSADATA w;
72
73   WSAStartup(0x0202, &w);
74 #endif
75
76   nice_address_init (&addr_local);
77   nice_address_init (&addr_remote);
78
79   g_assert (nice_address_set_from_string (&addr_local, "127.0.0.1"));
80   g_assert (nice_address_set_from_string (&addr_remote, "127.0.0.1"));
81   nice_address_set_port (&addr_remote, 2345);
82
83   agent = nice_agent_new ( NULL, NICE_COMPATIBILITY_RFC5245);
84   g_object_set (G_OBJECT (agent), "ice-tcp", FALSE,  NULL);
85
86   g_assert (agent->local_addresses == NULL);
87
88   /* add one local address */
89   nice_agent_add_local_address (agent, &addr_local);
90
91   g_assert (agent->local_addresses != NULL);
92   g_assert_cmpuint (g_slist_length (agent->local_addresses), ==, 1);
93   g_assert (nice_address_equal (agent->local_addresses->data, &addr_local));
94
95   /* add a stream */
96   stream_id = nice_agent_add_stream (agent, 1);
97   nice_agent_gather_candidates (agent, stream_id);
98
99   /* adding a stream should cause host candidates to be generated */
100   candidates = nice_agent_get_local_candidates (agent, stream_id, 1);
101   g_assert_cmpuint (g_slist_length (candidates), ==, 1);
102   candidate = candidates->data;
103   /* socket manager uses random port number */
104   nice_address_set_port (&addr_local, 1);
105   nice_address_set_port (&(candidate->addr), 1);
106   g_assert (nice_address_equal (&(candidate->addr), &addr_local));
107   g_assert (strncmp (candidate->foundation, "1", 1) == 0);
108   for (i = candidates; i; i = i->next)
109     nice_candidate_free ((NiceCandidate *) i->data);
110   g_slist_free (candidates);
111
112   /* clean up */
113   nice_agent_remove_stream (agent, stream_id);
114
115   g_object_add_weak_pointer (G_OBJECT (agent), (gpointer *) &agent);
116   g_object_unref (agent);
117   WAIT_UNTIL_UNSET (agent, NULL);
118
119 #ifdef G_OS_WIN32
120   WSACleanup();
121 #endif
122   return 0;
123 }
124