aboutsummaryrefslogtreecommitdiff
path: root/src/lib/hello/test_hello-uri.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/hello/test_hello-uri.c')
-rw-r--r--src/lib/hello/test_hello-uri.c215
1 files changed, 215 insertions, 0 deletions
diff --git a/src/lib/hello/test_hello-uri.c b/src/lib/hello/test_hello-uri.c
new file mode 100644
index 000000000..9f3179270
--- /dev/null
+++ b/src/lib/hello/test_hello-uri.c
@@ -0,0 +1,215 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2022 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 hello/test_hello-uri.c
22 * @brief test for helper library for handling URI-based HELLOs
23 * @author Christian Grothoff
24 */
25#include "platform.h"
26#include "gnunet_signatures.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_hello_uri_lib.h"
29
30
31/**
32 * Check for expected URIs.
33 *
34 * @param cls a `unsigned int*`, bitmask set to found URIs
35 * @param uri URI to check for
36 */
37static void
38check_uris (void *cls,
39 const struct GNUNET_PeerIdentity *pid,
40 const char *uri)
41{
42 unsigned int *found = cls;
43
44 if (0 == strcmp (uri,
45 "test://address"))
46 *found |= 1;
47 else if (0 == strcmp (uri,
48 "test://more"))
49 *found |= 2;
50 else
51 *found = (unsigned int) -1;
52}
53
54
55int
56main (int argc,
57 char *argv[])
58{
59 struct GNUNET_PeerIdentity pid;
60 struct GNUNET_HELLO_Builder *b;
61 struct GNUNET_CRYPTO_EddsaPrivateKey priv;
62
63 GNUNET_log_setup ("test-hell-uri",
64 "WARNING",
65 NULL);
66 GNUNET_CRYPTO_eddsa_key_create (&priv);
67 GNUNET_CRYPTO_eddsa_key_get_public (&priv,
68 &pid.public_key);
69 b = GNUNET_HELLO_builder_new (&pid);
70 GNUNET_assert (GNUNET_SYSERR ==
71 GNUNET_HELLO_builder_add_address (b,
72 "invalid"));
73 GNUNET_assert (GNUNET_SYSERR ==
74 GNUNET_HELLO_builder_add_address (b,
75 "i%v://bla"));
76 GNUNET_assert (GNUNET_SYSERR ==
77 GNUNET_HELLO_builder_add_address (b,
78 "://empty"));
79 GNUNET_assert (GNUNET_OK ==
80 GNUNET_HELLO_builder_add_address (b,
81 "test://address"));
82 GNUNET_assert (GNUNET_NO ==
83 GNUNET_HELLO_builder_add_address (b,
84 "test://address"));
85 GNUNET_assert (GNUNET_OK ==
86 GNUNET_HELLO_builder_add_address (b,
87 "test://more"));
88 {
89 void *block;
90 size_t block_size = 0;
91 struct GNUNET_HELLO_Builder *b2;
92 const struct GNUNET_PeerIdentity *p2;
93 unsigned int found;
94
95 GNUNET_assert (GNUNET_NO ==
96 GNUNET_HELLO_builder_to_block (b,
97 &priv,
98 NULL,
99 &block_size,
100 GNUNET_TIME_UNIT_FOREVER_REL));
101 GNUNET_assert (GNUNET_NO ==
102 GNUNET_HELLO_builder_to_block (b,
103 &priv,
104 NULL,
105 &block_size,
106 GNUNET_TIME_UNIT_FOREVER_REL));
107 GNUNET_assert (0 != block_size);
108 block = GNUNET_malloc (block_size);
109 GNUNET_assert (GNUNET_OK ==
110 GNUNET_HELLO_builder_to_block (b,
111 &priv,
112 block,
113 &block_size,
114 GNUNET_TIME_UNIT_FOREVER_REL));
115 b2 = GNUNET_HELLO_builder_from_block (block,
116 block_size);
117 GNUNET_free (block);
118 GNUNET_assert (NULL != b2);
119 found = 0;
120 p2 = GNUNET_HELLO_builder_iterate (b2,
121 &check_uris,
122 &found);
123 GNUNET_assert (3 == found);
124 GNUNET_assert (0 ==
125 GNUNET_memcmp (p2,
126 &pid));
127 GNUNET_HELLO_builder_free (b2);
128 }
129
130 {
131 char *url;
132 struct GNUNET_HELLO_Builder *b2;
133 const struct GNUNET_PeerIdentity *p2;
134 unsigned int found;
135
136 url = GNUNET_HELLO_builder_to_url (b,
137 &priv);
138 b2 = GNUNET_HELLO_builder_from_url (url);
139 GNUNET_free (url);
140 GNUNET_assert (NULL != b2);
141 found = 0;
142 p2 = GNUNET_HELLO_builder_iterate (b2,
143 &check_uris,
144 &found);
145 GNUNET_assert (3 == found);
146 GNUNET_assert (0 ==
147 GNUNET_memcmp (p2,
148 &pid));
149 GNUNET_HELLO_builder_free (b2);
150 }
151
152 {
153 struct GNUNET_MQ_Envelope *env;
154 struct GNUNET_HELLO_Builder *b2;
155 const struct GNUNET_PeerIdentity *p2;
156 unsigned int found;
157
158 env = GNUNET_HELLO_builder_to_env (b,
159 &priv,
160 GNUNET_TIME_UNIT_FOREVER_REL);
161 b2 = GNUNET_HELLO_builder_from_msg (GNUNET_MQ_env_get_msg (env));
162 GNUNET_free (env);
163 GNUNET_assert (NULL != b2);
164 found = 0;
165 p2 = GNUNET_HELLO_builder_iterate (b2,
166 &check_uris,
167 &found);
168 GNUNET_assert (3 == found);
169 GNUNET_assert (0 ==
170 GNUNET_memcmp (p2,
171 &pid));
172 GNUNET_HELLO_builder_free (b2);
173 }
174
175 GNUNET_HELLO_builder_free (b);
176
177 GNUNET_CRYPTO_mpi_print_unsigned (priv.d,
178 sizeof (priv.d),
179 GCRYMPI_CONST_ONE);
180 priv.d[0] &= 248;
181 priv.d[31] &= 127;
182 priv.d[31] |= 64;
183 {
184 char *buf;
185
186 buf = GNUNET_STRINGS_data_to_string_alloc (&priv,
187 sizeof (priv));
188 fprintf (stderr,
189 "PK: %s\n",
190 buf);
191 GNUNET_free (buf);
192 }
193 GNUNET_CRYPTO_eddsa_key_get_public (&priv,
194 &pid.public_key);
195 b = GNUNET_HELLO_builder_new (&pid);
196 GNUNET_assert (GNUNET_OK ==
197 GNUNET_HELLO_builder_add_address (b,
198 "a://first"));
199 GNUNET_assert (GNUNET_OK ==
200 GNUNET_HELLO_builder_add_address (b,
201 "b://second"));
202 {
203 char *url;
204
205 url = GNUNET_HELLO_builder_to_url (b,
206 &priv);
207 fprintf (stderr,
208 "TV: %s\n",
209 url);
210 GNUNET_free (url);
211 }
212 GNUNET_HELLO_builder_free (b);
213
214 return 0;
215}