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.c217
1 files changed, 217 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..1062f446b
--- /dev/null
+++ b/src/lib/hello/test_hello-uri.c
@@ -0,0 +1,217 @@
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_hello_uri_lib.h"
28#include "gnunet_util_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 char *uri)
40{
41 unsigned int *found = cls;
42
43 if (0 == strcmp (uri,
44 "test://address"))
45 *found |= 1;
46 else if (0 == strcmp (uri,
47 "test://more"))
48 *found |= 2;
49 else
50 *found = (unsigned int) -1;
51}
52
53
54int
55main (int argc,
56 char *argv[])
57{
58 struct GNUNET_PeerIdentity pid;
59 struct GNUNET_HELLO_Builder *b;
60 struct GNUNET_CRYPTO_EddsaPrivateKey priv;
61
62 GNUNET_log_setup ("test-hell-uri",
63 "WARNING",
64 NULL);
65 GNUNET_CRYPTO_eddsa_key_create (&priv);
66 GNUNET_CRYPTO_eddsa_key_get_public (&priv,
67 &pid.public_key);
68 b = GNUNET_HELLO_builder_new (&pid);
69 GNUNET_assert (GNUNET_SYSERR ==
70 GNUNET_HELLO_builder_add_address (b,
71 "invalid"));
72 GNUNET_assert (GNUNET_SYSERR ==
73 GNUNET_HELLO_builder_add_address (b,
74 "i%v://bla"));
75 GNUNET_assert (GNUNET_SYSERR ==
76 GNUNET_HELLO_builder_add_address (b,
77 "://empty"));
78 GNUNET_assert (GNUNET_OK ==
79 GNUNET_HELLO_builder_add_address (b,
80 "test://address"));
81 GNUNET_assert (GNUNET_NO ==
82 GNUNET_HELLO_builder_add_address (b,
83 "test://address"));
84 GNUNET_assert (GNUNET_OK ==
85 GNUNET_HELLO_builder_add_address (b,
86 "test://more"));
87 {
88 void *block;
89 size_t block_size = 0;
90 struct GNUNET_HELLO_Builder *b2;
91 struct GNUNET_PeerIdentity p2;
92 unsigned int found;
93
94 GNUNET_assert (GNUNET_NO ==
95 GNUNET_HELLO_builder_to_block (b,
96 &priv,
97 NULL,
98 &block_size,
99 NULL));
100 GNUNET_assert (GNUNET_NO ==
101 GNUNET_HELLO_builder_to_block (b,
102 &priv,
103 NULL,
104 &block_size,
105 NULL));
106 GNUNET_assert (0 != block_size);
107 block = GNUNET_malloc (block_size);
108 GNUNET_assert (GNUNET_OK ==
109 GNUNET_HELLO_builder_to_block (b,
110 &priv,
111 block,
112 &block_size,
113 NULL));
114 b2 = GNUNET_HELLO_builder_from_block (block,
115 block_size);
116 GNUNET_free (block);
117 GNUNET_assert (NULL != b2);
118 found = 0;
119 GNUNET_HELLO_builder_iterate (b2,
120 &p2,
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 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 GNUNET_HELLO_builder_iterate (b2,
143 &p2,
144 &check_uris,
145 &found);
146 GNUNET_assert (3 == found);
147 GNUNET_assert (0 ==
148 GNUNET_memcmp (&p2,
149 &pid));
150 GNUNET_HELLO_builder_free (b2);
151 }
152
153 {
154 struct GNUNET_MQ_Envelope *env;
155 struct GNUNET_HELLO_Builder *b2;
156 struct GNUNET_PeerIdentity p2;
157 unsigned int found;
158
159 env = GNUNET_HELLO_builder_to_env (b,
160 &priv,
161 NULL);
162 b2 = GNUNET_HELLO_builder_from_msg (GNUNET_MQ_env_get_msg (env));
163 GNUNET_free (env);
164 GNUNET_assert (NULL != b2);
165 found = 0;
166 GNUNET_HELLO_builder_iterate (b2,
167 &p2,
168 &check_uris,
169 &found);
170 GNUNET_assert (3 == found);
171 GNUNET_assert (0 ==
172 GNUNET_memcmp (&p2,
173 &pid));
174 GNUNET_HELLO_builder_free (b2);
175 }
176
177 GNUNET_HELLO_builder_free (b);
178
179 GNUNET_CRYPTO_mpi_print_unsigned (priv.d,
180 sizeof (priv.d),
181 GCRYMPI_CONST_ONE);
182 priv.d[0] &= 248;
183 priv.d[31] &= 127;
184 priv.d[31] |= 64;
185 {
186 char *buf;
187
188 buf = GNUNET_STRINGS_data_to_string_alloc (&priv,
189 sizeof (priv));
190 fprintf (stderr,
191 "PK: %s\n",
192 buf);
193 GNUNET_free (buf);
194 }
195 GNUNET_CRYPTO_eddsa_key_get_public (&priv,
196 &pid.public_key);
197 b = GNUNET_HELLO_builder_new (&pid);
198 GNUNET_assert (GNUNET_OK ==
199 GNUNET_HELLO_builder_add_address (b,
200 "a://first"));
201 GNUNET_assert (GNUNET_OK ==
202 GNUNET_HELLO_builder_add_address (b,
203 "b://second"));
204 {
205 char *url;
206
207 url = GNUNET_HELLO_builder_to_url (b,
208 &priv);
209 fprintf (stderr,
210 "TV: %s\n",
211 url);
212 GNUNET_free (url);
213 }
214 GNUNET_HELLO_builder_free (b);
215
216 return 0;
217}