test: add test for server reuse
[platform/upstream/gstreamer.git] / tests / test-reuse.c
1 /* GStreamer
2  * Copyright (C) 2008 Wim Taymans <wim.taymans at gmail.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19
20 #include <gst/gst.h>
21
22 #include <gst/rtsp-server/rtsp-server.h>
23
24 #define TIMEOUT 2
25
26 static gboolean timeout_1 (GMainLoop * loop, gboolean ignored);
27
28 static guint id;
29 static gint rounds = 3;
30 static GstRTSPServer *server;
31
32 static gboolean
33 timeout_2 (GMainLoop * loop, gboolean ignored)
34 {
35   rounds--;
36   if (rounds > 0) {
37     id = gst_rtsp_server_attach (server, NULL);
38     g_print ("have attached\n");
39     g_timeout_add_seconds (TIMEOUT, (GSourceFunc) timeout_1, loop);
40   } else {
41     g_main_loop_quit (loop);
42   }
43   return FALSE;
44 }
45
46 static gboolean
47 timeout_1 (GMainLoop * loop, gboolean ignored)
48 {
49   g_source_remove (id);
50   g_print ("have removed\n");
51   g_timeout_add_seconds (TIMEOUT, (GSourceFunc) timeout_2, loop);
52   return FALSE;
53 }
54
55 int
56 main (int argc, char *argv[])
57 {
58   GMainLoop *loop;
59
60   gst_init (&argc, &argv);
61
62   loop = g_main_loop_new (NULL, FALSE);
63
64   /* create a server instance */
65   server = gst_rtsp_server_new ();
66
67   /* attach the server to the default maincontext */
68   if ((id = gst_rtsp_server_attach (server, NULL)) == 0)
69     goto failed;
70   g_print ("have attached\n");
71
72   g_timeout_add_seconds (TIMEOUT, (GSourceFunc) timeout_1, loop);
73
74   /* start serving */
75   g_main_loop_run (loop);
76
77   /* cleanup */
78   g_object_unref (server);
79   g_main_loop_unref (loop);
80
81   g_print ("quit\n");
82   return 0;
83
84   /* ERRORS */
85 failed:
86   {
87     g_print ("failed to attach the server\n");
88     return -1;
89   }
90 }