aboutsummaryrefslogtreecommitdiff
path: root/src/service/nat/test_nat_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/nat/test_nat_test.c')
-rw-r--r--src/service/nat/test_nat_test.c142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/service/nat/test_nat_test.c b/src/service/nat/test_nat_test.c
new file mode 100644
index 000000000..2abab4d5f
--- /dev/null
+++ b/src/service/nat/test_nat_test.c
@@ -0,0 +1,142 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2009, 2011, 2014 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 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file nat/test_nat_test.c
22 * @brief Testcase for NAT testing functions
23 * @author Christian Grothoff
24 */
25#include "platform.h"
26#include "gnunet_util_lib.h"
27#include "gnunet_nat_lib.h"
28
29/**
30 * Time to wait before stopping NAT test, in seconds
31 */
32#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
33
34
35static int ret = 1;
36
37static struct GNUNET_NAT_Test *tst;
38
39static struct GNUNET_SCHEDULER_Task *tsk;
40
41
42static void
43report_result (void *cls,
44 enum GNUNET_NAT_StatusCode aret)
45{
46 if (GNUNET_NAT_ERROR_TIMEOUT == aret)
47 fprintf (stderr,
48 "NAT test timed out\n");
49 else if (GNUNET_NAT_ERROR_SUCCESS != aret)
50 fprintf (stderr,
51 "NAT test reported error %d\n", aret);
52 else
53 ret = 0;
54 GNUNET_NAT_test_stop (tst);
55 tst = NULL;
56 GNUNET_SCHEDULER_cancel (tsk);
57 tsk = NULL;
58}
59
60
61static void
62failed_timeout (void *cls)
63{
64 tsk = NULL;
65 fprintf (stderr,
66 "NAT test failed to terminate on timeout\n");
67 ret = 2;
68 GNUNET_NAT_test_stop (tst);
69 tst = NULL;
70}
71
72
73/**
74 * Main function run with scheduler.
75 */
76static void
77run (void *cls, char *const *args, const char *cfgfile,
78 const struct GNUNET_CONFIGURATION_Handle *cfg)
79{
80 tst =
81 GNUNET_NAT_test_start (cfg, GNUNET_YES, 1285, 1285, TIMEOUT,
82 &report_result,
83 NULL);
84 tsk = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (TIMEOUT,
85 2),
86 &failed_timeout,
87 NULL);
88}
89
90
91int
92main (int argc, char *const argv[])
93{
94 struct GNUNET_GETOPT_CommandLineOption options[] = {
95 GNUNET_GETOPT_OPTION_END
96 };
97 struct GNUNET_OS_Process *gns;
98 int nat_res;
99 char *const argv_prog[] = {
100 "test-nat-test",
101 "-c",
102 "test_nat_test_data.conf",
103 NULL
104 };
105
106 GNUNET_log_setup ("test-nat-test",
107 "WARNING",
108 NULL);
109
110 nat_res = GNUNET_OS_check_helper_binary ("gnunet-nat-server", GNUNET_NO,
111 NULL);
112 if (GNUNET_SYSERR == nat_res)
113 {
114 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
115 "Cannot run NAT test: `%s' file not found\n",
116 "gnunet-nat-server");
117 return 0;
118 }
119
120 gns = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_OUT_AND_ERR
121 | GNUNET_OS_USE_PIPE_CONTROL,
122 NULL, NULL, NULL,
123 "gnunet-nat-server",
124 "gnunet-nat-server",
125 "-c", "test_nat_test_data.conf",
126 "12345", NULL);
127 GNUNET_assert (NULL != gns);
128 GNUNET_PROGRAM_run (3, argv_prog,
129 "test-nat-test", "nohelp",
130 options, &run,
131 NULL);
132 GNUNET_break (0 == GNUNET_OS_process_kill (gns, GNUNET_TERM_SIG));
133 GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (gns));
134 GNUNET_OS_process_destroy (gns);
135 if (0 != ret)
136 fprintf (stderr,
137 "NAT test failed to report success\n");
138 return ret;
139}
140
141
142/* end of test_nat_test.c */