glitch in the license text detected by hyazinthe, thank you!
[oweals/gnunet.git] / src / transport / test_transport_testing_startstop.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2009, 2010, 2016 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14 */
15 /**
16  * @file transport/test_transport_testing_startstop.c
17  * @brief test case for transport testing library:
18  * start the peer, get the HELLO message and stop the peer
19  */
20 #include "platform.h"
21 #include "gnunet_transport_service.h"
22 #include "transport-testing.h"
23
24 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
25
26
27 static struct GNUNET_SCHEDULER_Task *timeout_task;
28
29 static struct GNUNET_TRANSPORT_TESTING_PeerContext *p;
30
31 static struct GNUNET_TRANSPORT_TESTING_Handle *tth;
32
33 static int ret;
34
35
36 static void
37 end ()
38 {
39   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
40               "Stopping peers\n");
41   if (NULL != timeout_task)
42     GNUNET_SCHEDULER_cancel (timeout_task);
43   if (NULL != p)
44     GNUNET_TRANSPORT_TESTING_stop_peer (p);
45   if (NULL != tth)
46     GNUNET_TRANSPORT_TESTING_done (tth);
47 }
48
49
50 static void
51 end_badly ()
52 {
53   timeout_task = NULL;
54   GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
55               "Timeout!\n");
56   end ();
57   ret = GNUNET_SYSERR;
58 }
59
60
61 static void
62 start_cb (void *cls)
63 {
64   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
65               "Peer %u (`%s') successfully started\n",
66               p->no,
67               GNUNET_i2s (&p->id));
68   ret = 0;
69   GNUNET_SCHEDULER_add_now (&end,
70                             NULL);
71 }
72
73
74 static void
75 run (void *cls,
76      char *const *args,
77      const char *cfgfile,
78      const struct GNUNET_CONFIGURATION_Handle *cfg)
79 {
80   ret = 1;
81   tth = GNUNET_TRANSPORT_TESTING_init ();
82   GNUNET_assert (NULL != tth);
83
84   timeout_task =
85       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
86                                     &end_badly,
87                                     NULL);
88
89   p = GNUNET_TRANSPORT_TESTING_start_peer (tth,
90                                            cfgfile,
91                                            1,
92                                            NULL, /* receive cb */
93                                            NULL, /* connect cb */
94                                            NULL, /* disconnect cb */
95                                            NULL, /* nc/nd closure */
96                                            &start_cb, /* startup cb */
97                                            NULL); /* closure */
98   if (NULL == p)
99   {
100     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to start peer\n");
101     if (timeout_task != NULL)
102       GNUNET_SCHEDULER_cancel (timeout_task);
103     timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
104   }
105 }
106
107
108 int
109 main (int argc, char *argv[])
110 {
111   char *const argv_1[] = { "test_transport_testing",
112     "-c",
113     "test_transport_api_data.conf",
114     NULL
115   };
116   struct GNUNET_GETOPT_CommandLineOption options[] = {
117     GNUNET_GETOPT_OPTION_END
118   };
119
120   GNUNET_log_setup ("test_transport_testing_startstop",
121                     "WARNING",
122                     NULL);
123   GNUNET_PROGRAM_run ((sizeof (argv_1) / sizeof (char *)) - 1,
124                       argv_1,
125                       "test_transport_testing_startstop", "nohelp",
126                       options,
127                       &run,
128                       &ret);
129
130   return ret;
131 }
132
133 /* end of test_transport_testing_startstop.c */