aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2012-03-02 21:07:39 +0000
committerMartin Schanzenbach <mschanzenbach@posteo.de>2012-03-02 21:07:39 +0000
commita6a79444fe668dcef85a6ca272daca3eb3e80540 (patch)
tree0d0005e6dbeb303788364280b48318d41af6441f /src
parent17955c9f953051ca4bcccdbe42864573eac5400a (diff)
downloadgnunet-a6a79444fe668dcef85a6ca272daca3eb3e80540.tar.gz
gnunet-a6a79444fe668dcef85a6ca272daca3eb3e80540.zip
-new test, fixes, config
Diffstat (limited to 'src')
-rw-r--r--src/gns/Makefile.am25
-rw-r--r--src/gns/gns.conf.in9
-rw-r--r--src/gns/gnunet-service-gns.c47
-rw-r--r--src/gns/proxy/proxy.py10
-rw-r--r--src/gns/test_gns_simple_lookup.c294
-rw-r--r--src/gns/test_gns_simple_lookup.conf81
6 files changed, 407 insertions, 59 deletions
diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am
index 993aac2a1..d5753290c 100644
--- a/src/gns/Makefile.am
+++ b/src/gns/Makefile.am
@@ -16,7 +16,7 @@ pkgcfg_DATA = \
16 gns.conf 16 gns.conf
17 17
18lib_LTLIBRARIES = \ 18lib_LTLIBRARIES = \
19 libgnunetgns.la libgnunetnamestore.la 19 libgnunetgns.la
20 20
21bin_PROGRAMS = \ 21bin_PROGRAMS = \
22 gnunet-service-gns 22 gnunet-service-gns
@@ -28,19 +28,30 @@ check_SCRIPTS = \
28 test_gnunet_gns.sh 28 test_gnunet_gns.sh
29 29
30check_PROGRAMS = \ 30check_PROGRAMS = \
31 test_gns_twopeer 31 test_gns_simple_lookup
32 32
33 33
34plugin_LTLIBRARIES = \ 34plugin_LTLIBRARIES = \
35 libgnunet_plugin_block_gns.la 35 libgnunet_plugin_block_gns.la
36 36
37test_gns_twopeer_SOURCES = \ 37#test_gns_twopeer_SOURCES = \
38 test_gns_twopeer.c 38# test_gns_twopeer.c
39test_gns_twopeer_LDADD = \ 39#test_gns_twopeer_LDADD = \
40# $(top_builddir)/src/util/libgnunetutil.la \
41# $(top_builddir)/src/namestore/libgnunetnamestore.la \
42# $(top_builddir)/src/testing/libgnunettesting.la
43#test_gns_twopeer_DEPENDENCIES = \
44# $(top_builddir)/src/util/libgnunetutil.la \
45# $(top_builddir)/src/namestore/libgnunetnamestore.la \
46# $(top_builddir)/src/testing/libgnunettesting.la
47
48test_gns_simple_lookup_SOURCES = \
49 test_gns_simple_lookup.c
50test_gns_simple_lookup_LDADD = \
40 $(top_builddir)/src/util/libgnunetutil.la \ 51 $(top_builddir)/src/util/libgnunetutil.la \
41 $(top_builddir)/src/namestore/libgnunetnamestore.la \ 52 $(top_builddir)/src/namestore/libgnunetnamestore.la \
42 $(top_builddir)/src/testing/libgnunettesting.la 53 $(top_builddir)/src/testing/libgnunettesting.la
43test_gns_twopeer_DEPENDENCIES = \ 54test_gns_simple_lookup_DEPENDENCIES = \
44 $(top_builddir)/src/util/libgnunetutil.la \ 55 $(top_builddir)/src/util/libgnunetutil.la \
45 $(top_builddir)/src/namestore/libgnunetnamestore.la \ 56 $(top_builddir)/src/namestore/libgnunetnamestore.la \
46 $(top_builddir)/src/testing/libgnunettesting.la 57 $(top_builddir)/src/testing/libgnunettesting.la
@@ -114,4 +125,4 @@ endif
114 125
115EXTRA_DIST = \ 126EXTRA_DIST = \
116 $(check_SCRIPTS) \ 127 $(check_SCRIPTS) \
117 test_gns_twopeer.conf 128 test_gns_simple_lookup.conf
diff --git a/src/gns/gns.conf.in b/src/gns/gns.conf.in
index 422efdbb7..674d78be1 100644
--- a/src/gns/gns.conf.in
+++ b/src/gns/gns.conf.in
@@ -5,13 +5,6 @@ HOME = $SERVICEHOME
5CONFIG = $DEFAULTCONFIG 5CONFIG = $DEFAULTCONFIG
6BINARY = gnunet-service-gns 6BINARY = gnunet-service-gns
7UNIXPATH = /tmp/gnunet-service-gns.sock 7UNIXPATH = /tmp/gnunet-service-gns.sock
8ZONEKEY = /tmp/zonekey 8ZONEKEY = $SERVICEHOME/zonekey
9TRUSTED = bob:/tmp/bobkey
10HIJACK_DNS = YES 9HIJACK_DNS = YES
11OPTIONS = -L INFO 10OPTIONS = -L INFO
12
13# Access to this service can compromise all DNS queries in this
14# system. Thus access should be restricted to the same UID.
15# (see https://gnunet.org/gnunet-access-control-model)
16UNIX_MATCH_UID = YES
17UNIX_MATCH_GID = YES
diff --git a/src/gns/gnunet-service-gns.c b/src/gns/gnunet-service-gns.c
index 2a31e5e61..af5468eba 100644
--- a/src/gns/gnunet-service-gns.c
+++ b/src/gns/gnunet-service-gns.c
@@ -158,7 +158,8 @@ static void
158shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 158shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
159{ 159{
160 /* Kill zone task for it may make the scheduler hang */ 160 /* Kill zone task for it may make the scheduler hang */
161 GNUNET_SCHEDULER_cancel(zone_update_taskid); 161 if (zone_update_taskid)
162 GNUNET_SCHEDULER_cancel(zone_update_taskid);
162 163
163 GNUNET_DNS_disconnect(dns_handle); 164 GNUNET_DNS_disconnect(dns_handle);
164 GNUNET_NAMESTORE_disconnect(namestore_handle, 1); 165 GNUNET_NAMESTORE_disconnect(namestore_handle, 1);
@@ -1356,48 +1357,6 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
1356 return; 1357 return;
1357 } 1358 }
1358 1359
1359 char* trusted_start;
1360 char* trusted_name;
1361 char *trusted_key;
1362 int trusted_len;
1363 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (c, "gns",
1364 "TRUSTED",
1365 &trusted_entities))
1366 {
1367 trusted_start = trusted_entities;
1368 trusted_len = strlen(trusted_entities);
1369 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
1370 "Found trusted entities in config file, importing\n");
1371 while ((trusted_entities-trusted_start) < trusted_len)
1372 {
1373 trusted_name = trusted_entities;
1374 while (*trusted_entities != ':')
1375 trusted_entities++;
1376 *trusted_entities = '\0';
1377 trusted_entities++;
1378 trusted_key = trusted_entities;
1379 while (*trusted_entities != ',' && (*trusted_entities != '\0'))
1380 trusted_entities++;
1381 *trusted_entities = '\0';
1382 trusted_entities++;
1383
1384 if (GNUNET_YES == GNUNET_DISK_file_test (trusted_key))
1385 {
1386 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Adding %s:%s to root zone\n",
1387 trusted_name,
1388 trusted_key);
1389 put_trusted(trusted_name, trusted_key);
1390 }
1391 else
1392 {
1393 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Keyfile %s does not exist!\n",
1394 trusted_key);
1395 //put_trusted(trusted_name, trusted_key); //FIXME for testing
1396 }
1397 }
1398
1399 }
1400
1401 /** 1360 /**
1402 * handle to the dht 1361 * handle to the dht
1403 */ 1362 */
@@ -1408,7 +1367,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
1408 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Could not connect to DHT!\n"); 1367 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Could not connect to DHT!\n");
1409 } 1368 }
1410 1369
1411 put_some_records(); //FIXME for testing 1370 //put_some_records(); //FIXME for testing
1412 1371
1413 /** 1372 /**
1414 * Schedule periodic put 1373 * Schedule periodic put
diff --git a/src/gns/proxy/proxy.py b/src/gns/proxy/proxy.py
index ee5eb41ec..ffa47ee9f 100644
--- a/src/gns/proxy/proxy.py
+++ b/src/gns/proxy/proxy.py
@@ -1,5 +1,15 @@
1#!/usr/bin/python 1#!/usr/bin/python
2 2
3"""
4Copyright (c) 2001 SUZUKI Hisao
5
6Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
7
8The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9
10THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11"""
12
3__doc__ = """Tiny HTTP Proxy. 13__doc__ = """Tiny HTTP Proxy.
4 14
5This module implements GET, HEAD, POST, PUT and DELETE methods 15This module implements GET, HEAD, POST, PUT and DELETE methods
diff --git a/src/gns/test_gns_simple_lookup.c b/src/gns/test_gns_simple_lookup.c
new file mode 100644
index 000000000..d58c5ff65
--- /dev/null
+++ b/src/gns/test_gns_simple_lookup.c
@@ -0,0 +1,294 @@
1/*
2 This file is part of GNUnet.
3 (C) 2009 Christian Grothoff (and other contributing authors)
4
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 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 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20/**
21 * @file gns/test_gns_twopeer.c
22 * @brief base testcase for testing DHT service with
23 * two running peers.
24 *
25 * This testcase starts peers using the GNUNET_TESTING_daemons_start
26 * function call. On peer start, connects to the peers DHT service
27 * by calling GNUNET_DHT_connected. Once notified about all peers
28 * being started (by the peers_started_callback function), calls
29 * GNUNET_TESTING_connect_topology, which connects the peers in a
30 * "straight line" topology. On notification that all peers have
31 * been properly connected, calls the do_get function which initiates
32 * a GNUNET_DHT_get from the *second* peer. Once the GNUNET_DHT_get
33 * function starts, runs the do_put function to insert data at the first peer.
34 * If the GET is successful, schedules finish_testing
35 * to stop the test and shut down peers. If GET is unsuccessful
36 * after GET_TIMEOUT seconds, prints an error message and shuts down
37 * the peers.
38 */
39#include "platform.h"
40#include "gnunet_testing_lib.h"
41#include "gnunet_core_service.h"
42#include "block_dns.h"
43#include "gnunet_signatures.h"
44#include "gnunet_namestore_service.h"
45#include "gnunet_dnsparser_lib.h"
46#include "gnunet_gns_service.h"
47
48/* DEFINES */
49#define VERBOSE GNUNET_YES
50
51/* Timeout for entire testcase */
52#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 10)
53
54/* If number of peers not in config file, use this number */
55#define DEFAULT_NUM_PEERS 2
56
57/* test records to resolve */
58#define TEST_DOMAIN "www.gnunet"
59#define TEST_IP
60#define TEST_RECORD_NAME "www"
61
62/* Globals */
63
64/**
65 * Directory to store temp data in, defined in config file
66 */
67static char *test_directory;
68
69struct GNUNET_TESTING_Daemon *d1;
70
71
72/* Task handle to use to schedule test failure */
73GNUNET_SCHEDULER_TaskIdentifier die_task;
74
75/* Global return value (0 for success, anything else for failure) */
76static int ok;
77
78static struct GNUNUET_NAMESTORE_Handle *namestore_handle;
79
80const struct GNUNET_CONFIGURATION_Handle *cfg;
81
82/**
83 * Check whether peers successfully shut down.
84 */
85void
86shutdown_callback (void *cls, const char *emsg)
87{
88 if (emsg != NULL)
89 {
90 if (ok == 0)
91 ok = 2;
92 }
93
94 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "done(ret=%d)!\n", ok);
95}
96
97/**
98 * Function scheduled to be run on the successful completion of this
99 * testcase. Specifically, called when our get request completes.
100 */
101static void
102finish_testing (void *cls, int32_t success, const char *emsg)
103{
104 struct hostent *he;
105 struct in_addr a;
106 char* addr;
107
108 GNUNET_NAMESTORE_disconnect(namestore_handle, GNUNET_YES);
109
110 he = gethostbyname (TEST_DOMAIN);
111
112 if (!he)
113 {
114 ok = 2;
115 }
116 else
117 {
118 ok = 1;
119 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "name: %s\n", he->h_name);
120 while (*he->h_addr_list)
121 {
122 memcpy(&a, *he->h_addr_list++, sizeof(a));
123 addr = inet_ntoa(a);
124 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "address: %s\n", addr);
125 if (0 == strcmp(addr, TEST_IP))
126 {
127 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
128 "%s correctly resolved to %s!\n", TEST_DOMAIN, addr);
129 ok = 0;
130 }
131 else
132 {
133 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "No resolution!\n");
134 }
135 }
136 }
137 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n");
138 GNUNET_TESTING_daemon_stop (d1, TIMEOUT, &shutdown_callback, NULL,
139 GNUNET_YES, GNUNET_NO);
140}
141
142/**
143 * Continuation for the GNUNET_DHT_get_stop call, so that we don't shut
144 * down the peers without freeing memory associated with GET request.
145 */
146static void
147end_badly_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
148{
149
150 if (d1 != NULL)
151 GNUNET_TESTING_daemon_stop (d1, TIMEOUT, &shutdown_callback, NULL,
152 GNUNET_YES, GNUNET_NO);
153 GNUNET_SCHEDULER_cancel (die_task);
154}
155
156/**
157 * Check if the get_handle is being used, if so stop the request. Either
158 * way, schedule the end_badly_cont function which actually shuts down the
159 * test.
160 */
161static void
162end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
163{
164 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Failing test with error: `%s'!\n",
165 (char *) cls);
166 GNUNET_SCHEDULER_add_now (&end_badly_cont, NULL);
167 ok = 1;
168}
169
170static void
171do_lookup(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
172{
173 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded alice_pkey;
174 struct GNUNET_CRYPTO_RsaPrivateKey *alice_key;
175 char* alice_keyfile;
176
177 GNUNET_SCHEDULER_cancel (die_task);
178
179 /* put records into namestore */
180 namestore_handle = GNUNET_NAMESTORE_connect(cfg);
181 if (NULL == namestore_handle)
182 {
183 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to connect to namestore\n");
184 ok = -1;
185 return;
186 }
187
188 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "gns",
189 "ZONEKEY",
190 &alice_keyfile))
191 {
192 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to get alice's key from cfg\n");
193 ok = -1;
194 return;
195 }
196
197 alice_key = GNUNET_CRYPTO_rsa_key_create_from_file (alice_keyfile);
198
199 GNUNET_CRYPTO_rsa_key_get_public (alice_key, &alice_pkey);
200
201 struct GNUNET_NAMESTORE_RecordData rd;
202 char* ip = TEST_IP;
203 struct in_addr *web = GNUNET_malloc(sizeof(struct in_addr));
204 rd.expiration = GNUNET_TIME_absolute_get_forever ();
205 GNUNET_assert(1 == inet_pton (AF_INET, ip, web));
206 rd.data_size = sizeof(struct in_addr);
207 rd.data = web;
208 rd.record_type = GNUNET_DNSPARSER_TYPE_A;
209
210 GNUNET_NAMESTORE_record_create (namestore_handle,
211 alice_key,
212 TEST_RECORD_NAME,
213 &rd,
214 &finish_testing,
215 NULL);
216
217}
218
219static void
220run (void *cls, char *const *args, const char *cfgfile,
221 const struct GNUNET_CONFIGURATION_Handle *c)
222{
223 cfg = c;
224 /* Get path from configuration file */
225 if (GNUNET_YES !=
226 GNUNET_CONFIGURATION_get_value_string (cfg, "paths", "servicehome",
227 &test_directory))
228 {
229 ok = 404;
230 return;
231 }
232
233
234 /* Set up a task to end testing if peer start fails */
235 die_task =
236 GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly,
237 "didn't start all daemons in reasonable amount of time!!!");
238
239 /* Start alice */
240 d1 = GNUNET_TESTING_daemon_start(cfg, TIMEOUT, GNUNET_NO, NULL, NULL, 0,
241 NULL, NULL, NULL, &do_lookup, NULL);
242}
243
244static int
245check ()
246{
247 int ret;
248
249 /* Arguments for GNUNET_PROGRAM_run */
250 char *const argv[] = { "test-gns-simple-lookup", /* Name to give running binary */
251 "-c",
252 "test_gns_simple_lookup.conf", /* Config file to use */
253#if VERBOSE
254 "-L", "DEBUG",
255#endif
256 NULL
257 };
258 struct GNUNET_GETOPT_CommandLineOption options[] = {
259 GNUNET_GETOPT_OPTION_END
260 };
261 /* Run the run function as a new program */
262 ret =
263 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
264 "test-gns-simple-lookup", "nohelp", options, &run,
265 &ok);
266 if (ret != GNUNET_OK)
267 {
268 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
269 "`test-gns-simple-lookup': Failed with error code %d\n", ret);
270 }
271 return ok;
272}
273
274int
275main (int argc, char *argv[])
276{
277 int ret;
278
279 GNUNET_log_setup ("test-gns-simple-lookup",
280#if VERBOSE
281 "DEBUG",
282#else
283 "WARNING",
284#endif
285 NULL);
286 ret = check ();
287 /**
288 * Need to remove base directory, subdirectories taken care
289 * of by the testing framework.
290 */
291 return ret;
292}
293
294/* end of test_gns_twopeer.c */
diff --git a/src/gns/test_gns_simple_lookup.conf b/src/gns/test_gns_simple_lookup.conf
new file mode 100644
index 000000000..cce30fc42
--- /dev/null
+++ b/src/gns/test_gns_simple_lookup.conf
@@ -0,0 +1,81 @@
1[fs]
2AUTOSTART = NO
3
4[resolver]
5AUTOSTART = NO
6HOSTNAME = localhost
7
8[dht]
9DEBUG = NO
10AUTOSTART = YES
11ACCEPT_FROM6 = ::1;
12ACCEPT_FROM = 127.0.0.1;
13HOSTNAME = localhost
14PORT = 2100
15BINARY = gnunet-service-dht
16
17[block]
18plugins = dht test gns
19
20[dhtcache]
21QUOTA = 1 MB
22DATABASE = sqlite
23
24[transport]
25PLUGINS = tcp
26DEBUG = NO
27ACCEPT_FROM6 = ::1;
28ACCEPT_FROM = 127.0.0.1;
29NEIGHBOUR_LIMIT = 50
30PORT = 12365
31
32[ats]
33WAN_QUOTA_IN = 1 GB
34WAN_QUOTA_OUT = 1 GB
35
36[core]
37PORT = 12092
38
39[arm]
40DEFAULTSERVICES = core namestore gns
41PORT = 12366
42DEBUG = NO
43
44[transport-tcp]
45TIMEOUT = 300 s
46PORT = 12368
47BINDTO = 127.0.0.1
48
49[TESTING]
50WEAKRANDOM = YES
51
52[gnunetd]
53HOSTKEY = $SERVICEHOME/.hostkey
54
55[PATHS]
56DEFAULTCONFIG = gns.conf
57SERVICEHOME = /tmp/test-gnunetd-gns-peer-1/
58
59
60[nat]
61DISABLEV6 = YES
62ENABLE_UPNP = NO
63BEHIND_NAT = NO
64ALLOW_NAT = NO
65INTERNAL_ADDRESS = 127.0.0.1
66EXTERNAL_ADDRESS = 127.0.0.1
67USE_LOCALADDR = NO
68
69[dns]
70AUTOSTART = YES
71
72[gns]
73AUTOSTART = YES
74BINARY = gnunet-service-gns
75ZONEKEY = $SERVICEHOME/alicekey
76
77
78[nse]
79AUTOSTART = NO
80
81