aboutsummaryrefslogtreecommitdiff
path: root/src/service/messenger/test_messenger.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/messenger/test_messenger.c')
-rw-r--r--src/service/messenger/test_messenger.c58
1 files changed, 47 insertions, 11 deletions
diff --git a/src/service/messenger/test_messenger.c b/src/service/messenger/test_messenger.c
index 660e6473c..4d85e984f 100644
--- a/src/service/messenger/test_messenger.c
+++ b/src/service/messenger/test_messenger.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2020--2021 GNUnet e.V. 3 Copyright (C) 2020--2023 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 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 6 under the terms of the GNU Affero General Public License as published
@@ -45,14 +45,23 @@ static int status = 1;
45 45
46static struct GNUNET_SCHEDULER_Task *die_task = NULL; 46static struct GNUNET_SCHEDULER_Task *die_task = NULL;
47static struct GNUNET_SCHEDULER_Task *op_task = NULL; 47static struct GNUNET_SCHEDULER_Task *op_task = NULL;
48static struct GNUNET_SCHEDULER_Task *it_task = NULL;
48 49
49struct GNUNET_MESSENGER_Handle *messenger = NULL; 50struct GNUNET_MESSENGER_Handle *messenger = NULL;
50 51
52static struct GNUNET_CRYPTO_PrivateKey identity;
53
51static void 54static void
52end (void *cls) 55end (void *cls)
53{ 56{
54 die_task = NULL; 57 die_task = NULL;
55 58
59 if (it_task)
60 {
61 GNUNET_SCHEDULER_cancel (it_task);
62 it_task = NULL;
63 }
64
56 if (op_task) 65 if (op_task)
57 { 66 {
58 GNUNET_SCHEDULER_cancel (op_task); 67 GNUNET_SCHEDULER_cancel (op_task);
@@ -68,6 +77,7 @@ end (void *cls)
68 status = 0; 77 status = 0;
69} 78}
70 79
80
71static void 81static void
72end_badly (void *cls) 82end_badly (void *cls)
73{ 83{
@@ -77,12 +87,15 @@ end_badly (void *cls)
77 status = 1; 87 status = 1;
78} 88}
79 89
90
80static void 91static void
81end_operation (void *cls) 92end_operation (void *cls)
82{ 93{
83 op_task = NULL; 94 op_task = NULL;
84 95
85 fprintf (stderr, "Testcase failed (operation: '%s').\n", cls ? (const char*) cls : "unknown"); 96 fprintf (stderr, "Testcase failed (operation: '%s').\n", cls ? (const
97 char*) cls :
98 "unknown");
86 99
87 if (die_task) 100 if (die_task)
88 GNUNET_SCHEDULER_cancel (die_task); 101 GNUNET_SCHEDULER_cancel (die_task);
@@ -91,6 +104,7 @@ end_operation (void *cls)
91 status = 1; 104 status = 1;
92} 105}
93 106
107
94static int identity_counter = 0; 108static int identity_counter = 0;
95 109
96/** 110/**
@@ -100,9 +114,11 @@ static int identity_counter = 0;
100 * @param handle Handle of messenger service 114 * @param handle Handle of messenger service
101 */ 115 */
102static void 116static void
103on_identity (void *cls, 117on_iteration (void *cls)
104 struct GNUNET_MESSENGER_Handle *handle)
105{ 118{
119 struct GNUNET_MESSENGER_Handle *handle = cls;
120 it_task = NULL;
121
106 if (op_task) 122 if (op_task)
107 { 123 {
108 GNUNET_SCHEDULER_cancel (op_task); 124 GNUNET_SCHEDULER_cancel (op_task);
@@ -111,15 +127,23 @@ on_identity (void *cls,
111 127
112 const char *name = GNUNET_MESSENGER_get_name (handle); 128 const char *name = GNUNET_MESSENGER_get_name (handle);
113 129
114 if (0 != strcmp (name, TESTER_NAME)) 130 if ((! name) || (0 != strcmp (name, TESTER_NAME)))
115 { 131 {
116 op_task = GNUNET_SCHEDULER_add_now (&end_operation, "name"); 132 op_task = GNUNET_SCHEDULER_add_now (&end_operation, "name");
117 return; 133 return;
118 } 134 }
119 135
120 const struct GNUNET_CRYPTO_PublicKey *key = GNUNET_MESSENGER_get_key (handle); 136 const struct GNUNET_CRYPTO_PublicKey *key = GNUNET_MESSENGER_get_key (
137 handle);
121 138
122 if (((!identity_counter) && (key)) || ((identity_counter) && (!key))) 139 struct GNUNET_CRYPTO_PublicKey pubkey;
140 GNUNET_CRYPTO_key_get_public (&identity, &pubkey);
141
142 if (((! identity_counter) && (key)) || ((identity_counter) && ((! key) ||
143 (0 !=
144 GNUNET_memcmp (
145 key,
146 &pubkey)))))
123 { 147 {
124 op_task = GNUNET_SCHEDULER_add_now (&end_operation, "key"); 148 op_task = GNUNET_SCHEDULER_add_now (&end_operation, "key");
125 return; 149 return;
@@ -139,10 +163,13 @@ on_identity (void *cls,
139 return; 163 return;
140 } 164 }
141 165
142 GNUNET_MESSENGER_update (messenger); 166 GNUNET_MESSENGER_set_key (handle, &identity);
143 identity_counter++; 167 identity_counter++;
168
169 it_task = GNUNET_SCHEDULER_add_now (&on_iteration, handle);
144} 170}
145 171
172
146/** 173/**
147 * Main function for testcase. 174 * Main function for testcase.
148 * 175 *
@@ -159,10 +186,18 @@ run (void *cls,
159 186
160 identity_counter = 0; 187 identity_counter = 0;
161 188
162 op_task = GNUNET_SCHEDULER_add_delayed (BASE_TIMEOUT, &end_operation, "connect"); 189 op_task = GNUNET_SCHEDULER_add_delayed (BASE_TIMEOUT, &end_operation,
163 messenger = GNUNET_MESSENGER_connect (cfg, TESTER_NAME, &on_identity, NULL, NULL, NULL); 190 "connect");
191 messenger = GNUNET_MESSENGER_connect (cfg, TESTER_NAME, NULL, NULL, NULL);
192
193 identity.type = htonl (GNUNET_PUBLIC_KEY_TYPE_ECDSA);
194 GNUNET_CRYPTO_ecdsa_key_create (&(identity.ecdsa_key));
195
196 if (messenger)
197 it_task = GNUNET_SCHEDULER_add_now (&on_iteration, messenger);
164} 198}
165 199
200
166/** 201/**
167 * The main function. 202 * The main function.
168 * 203 *
@@ -174,7 +209,8 @@ int
174main (int argc, 209main (int argc,
175 char **argv) 210 char **argv)
176{ 211{
177 if (0 != GNUNET_TESTING_peer_run ("test-messenger", "test_messenger_api.conf", &run, NULL)) 212 if (0 != GNUNET_TESTING_peer_run ("test-messenger", "test_messenger_api.conf",
213 &run, NULL))
178 return 1; 214 return 1;
179 215
180 return status; 216 return status;