aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-09-15 13:00:17 +0000
committerNathan S. Evans <evans@in.tum.de>2010-09-15 13:00:17 +0000
commit64c5f1d08aae376fb74286b084e8c048715f8485 (patch)
treebe5c871cc81f652b0c7c9a7f1bf70c1c5e325827 /src
parentc8910059aebeb20e7359b2d780be751323a80e74 (diff)
downloadgnunet-64c5f1d08aae376fb74286b084e8c048715f8485.tar.gz
gnunet-64c5f1d08aae376fb74286b084e8c048715f8485.zip
add retry attempts to test_dht_twopeer, remove core from defaultservices to ensure that the dht gets started before core... Otherwise the test can fail because the data being searched for is the other peers public key, which is only known once connected.
Diffstat (limited to 'src')
-rw-r--r--src/dht/test_dht_multipeer_data.conf2
-rw-r--r--src/dht/test_dht_twopeer.c62
-rw-r--r--src/dht/test_dht_twopeer_data.conf2
-rw-r--r--src/dht/test_dhtlog_data.conf2
4 files changed, 64 insertions, 4 deletions
diff --git a/src/dht/test_dht_multipeer_data.conf b/src/dht/test_dht_multipeer_data.conf
index 8c4c903ff..be8578e8a 100644
--- a/src/dht/test_dht_multipeer_data.conf
+++ b/src/dht/test_dht_multipeer_data.conf
@@ -47,7 +47,7 @@ PORT = 12092
47DEBUG = NO 47DEBUG = NO
48 48
49[arm] 49[arm]
50DEFAULTSERVICES = core dht 50DEFAULTSERVICES = dht
51ACCEPT_FROM6 = ::1; 51ACCEPT_FROM6 = ::1;
52ACCEPT_FROM = 127.0.0.1; 52ACCEPT_FROM = 127.0.0.1;
53BINARY = gnunet-service-arm 53BINARY = gnunet-service-arm
diff --git a/src/dht/test_dht_twopeer.c b/src/dht/test_dht_twopeer.c
index 095bc7cb7..f3f9e4cbd 100644
--- a/src/dht/test_dht_twopeer.c
+++ b/src/dht/test_dht_twopeer.c
@@ -30,6 +30,8 @@
30/* DEFINES */ 30/* DEFINES */
31#define VERBOSE GNUNET_YES 31#define VERBOSE GNUNET_YES
32 32
33#define MAX_GET_ATTEMPTS 10
34
33#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 5) 35#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 5)
34 36
35#define DEFAULT_NUM_PEERS 2 37#define DEFAULT_NUM_PEERS 2
@@ -43,6 +45,10 @@ struct PeerGetContext
43 struct GNUNET_DHT_Handle *dht_handle; 45 struct GNUNET_DHT_Handle *dht_handle;
44 46
45 struct GNUNET_DHT_GetHandle *get_handle; 47 struct GNUNET_DHT_GetHandle *get_handle;
48
49 unsigned int get_attempts;
50
51 GNUNET_SCHEDULER_TaskIdentifier retry_task;
46}; 52};
47 53
48/* Globals */ 54/* Globals */
@@ -116,11 +122,17 @@ end_badly_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
116 122
117 if (pg != NULL) 123 if (pg != NULL)
118 GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL); 124 GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
125
126 if (curr_get_ctx.retry_task != GNUNET_SCHEDULER_NO_TASK)
127 GNUNET_SCHEDULER_cancel(sched, curr_get_ctx.retry_task);
119} 128}
120 129
121static void 130static void
122end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc) 131end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
123{ 132{
133 if (curr_get_ctx.retry_task != GNUNET_SCHEDULER_NO_TASK)
134 GNUNET_SCHEDULER_cancel(sched, curr_get_ctx.retry_task);
135
124 if (curr_get_ctx.get_handle != NULL) 136 if (curr_get_ctx.get_handle != NULL)
125 { 137 {
126 GNUNET_DHT_get_stop(curr_get_ctx.get_handle, &end_badly_cont, NULL); 138 GNUNET_DHT_get_stop(curr_get_ctx.get_handle, &end_badly_cont, NULL);
@@ -152,6 +164,7 @@ void get_result_iterator (void *cls,
152 const void *data) 164 const void *data)
153{ 165{
154 struct PeerGetContext *get_context = cls; 166 struct PeerGetContext *get_context = cls;
167
155 if (0 != memcmp(&get_context->peer->hashPubKey, key, sizeof (GNUNET_HashCode))) 168 if (0 != memcmp(&get_context->peer->hashPubKey, key, sizeof (GNUNET_HashCode)))
156 { 169 {
157 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Key returned is not the same key as was searched for!\n"); 170 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Key returned is not the same key as was searched for!\n");
@@ -160,6 +173,12 @@ void get_result_iterator (void *cls,
160 return; 173 return;
161 } 174 }
162 175
176 if (get_context->retry_task != GNUNET_SCHEDULER_NO_TASK)
177 {
178 GNUNET_SCHEDULER_cancel(sched, get_context->retry_task);
179 get_context->retry_task = GNUNET_SCHEDULER_NO_TASK;
180 }
181
163 if (get_context->peer == &peer2id) 182 if (get_context->peer == &peer2id)
164 { 183 {
165 get_context->peer = &peer1id; 184 get_context->peer = &peer1id;
@@ -174,7 +193,43 @@ void get_result_iterator (void *cls,
174 GNUNET_DHT_get_stop(get_context->get_handle, &finish_testing, NULL); 193 GNUNET_DHT_get_stop(get_context->get_handle, &finish_testing, NULL);
175 } 194 }
176 195
196}
197
198static void
199stop_retry_get (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc);
200
201static void
202get_stop_finished (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
203{
204 struct PeerGetContext *get_context = cls;
177 205
206 if (get_context->get_attempts < MAX_GET_ATTEMPTS)
207 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Get attempt %u failed, retrying request!\n", get_context->get_attempts);
208 else
209 {
210 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Too many attempts failed, ending test!\n", get_context->get_attempts);
211 GNUNET_SCHEDULER_cancel(sched, die_task);
212 GNUNET_SCHEDULER_add_now(sched, &end_badly, "key mismatch in get response!\n");
213 return;
214 }
215 get_context->get_attempts++;
216 get_context->retry_task = GNUNET_SCHEDULER_add_delayed(sched,
217 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 10),
218 &stop_retry_get, get_context);
219 get_context->get_handle = GNUNET_DHT_get_start(get_context->dht_handle, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5),
220 0, &get_context->peer->hashPubKey, &get_result_iterator, get_context, NULL, NULL);
221}
222
223static void
224stop_retry_get (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
225{
226 struct PeerGetContext *get_context = cls;
227 get_context->retry_task = GNUNET_SCHEDULER_NO_TASK;
228 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Get attempt %u failed, canceling request!\n", get_context->get_attempts);
229 //if (get_context->get_sent == GNUNET_YES)
230 GNUNET_DHT_get_stop(get_context->get_handle, &get_stop_finished, get_context);
231 //else
232 // GNUNET_SCHEDULER_add_now(sched, &get_stop_finished, get_context);
178} 233}
179 234
180static void 235static void
@@ -182,7 +237,12 @@ do_get (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
182{ 237{
183 struct PeerGetContext *get_context = cls; 238 struct PeerGetContext *get_context = cls;
184 239
185 get_context->get_handle = GNUNET_DHT_get_start(get_context->dht_handle, GNUNET_TIME_relative_get_forever(), 0, &get_context->peer->hashPubKey, &get_result_iterator, get_context, NULL, NULL); 240 get_context->retry_task = GNUNET_SCHEDULER_add_delayed(sched,
241 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 10),
242 &stop_retry_get, get_context);
243
244 get_context->get_handle = GNUNET_DHT_get_start(get_context->dht_handle, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5),
245 0, &get_context->peer->hashPubKey, &get_result_iterator, get_context, NULL, NULL);
186} 246}
187 247
188 248
diff --git a/src/dht/test_dht_twopeer_data.conf b/src/dht/test_dht_twopeer_data.conf
index ae76b4ddb..06ad96212 100644
--- a/src/dht/test_dht_twopeer_data.conf
+++ b/src/dht/test_dht_twopeer_data.conf
@@ -25,7 +25,7 @@ HOSTNAME = localhost
25PORT = 12092 25PORT = 12092
26 26
27[arm] 27[arm]
28DEFAULTSERVICES = core dht 28DEFAULTSERVICES = dht
29PORT = 12366 29PORT = 12366
30DEBUG = NO 30DEBUG = NO
31 31
diff --git a/src/dht/test_dhtlog_data.conf b/src/dht/test_dhtlog_data.conf
index 609a0b383..2cb9af38a 100644
--- a/src/dht/test_dhtlog_data.conf
+++ b/src/dht/test_dhtlog_data.conf
@@ -17,7 +17,7 @@ TOTAL_QUOTA_IN = 3932160
17PORT = 12092 17PORT = 12092
18 18
19[arm] 19[arm]
20DEFAULTSERVICES = core dht 20DEFAULTSERVICES = dht
21PORT = 12366 21PORT = 12366
22DEBUG = NO 22DEBUG = NO
23 23