aboutsummaryrefslogtreecommitdiff
path: root/test_brandt.c
diff options
context:
space:
mode:
authorMarkus Teich <markus.teich@stusta.mhn.de>2016-08-31 14:37:22 +0200
committerMarkus Teich <markus.teich@stusta.mhn.de>2016-08-31 14:37:22 +0200
commit9f0e72f1e8615c9c03222372b2c579471bcce602 (patch)
treea7fd357b79a9f939de5d5f67de1a030b59ff4418 /test_brandt.c
parent0d3b32b24881cb9ce89d0b6689ada53f88d0008e (diff)
temporary dump for discussion
Diffstat (limited to 'test_brandt.c')
-rw-r--r--test_brandt.c182
1 files changed, 140 insertions, 42 deletions
diff --git a/test_brandt.c b/test_brandt.c
index fa49007..274762d 100644
--- a/test_brandt.c
+++ b/test_brandt.c
@@ -30,70 +30,160 @@
#include "util.h"
+struct msg
+{
+ uint16_t sender;
+ uint16_t receiver;
+ void *buf;
+ size_t buf_len;
+};
+
+
+static uint16_t *id;
+static struct BRANDT_Auction **ad;
+static uint16_t bidders = 3;
+static uint16_t prizes = 8;
+
+
+static void
+bidder_start (void *arg)
+{
+ uint16_t i = *(uint16_t *)arg;
+
+ weprintf("starting bidder %d", i);
+ BRANDT_bidder_start (ad[i], i, bidders);
+}
+
+
+static void
+transfer_message (void *arg)
+{
+ struct msg *m = (struct msg *)arg;
+ struct msg_head *h = (struct msg_head *)m->buf;
+
+ weprintf("xfer msg %d %x from %d to %d", ntohl(h->msg_type), arg, m->sender, m->receiver);
+ BRANDT_got_message (ad[m->receiver], m->sender, m->buf, m->buf_len);
+ free (arg);
+}
+
+
+static uint16_t
+cb_start (void *auction_closure)
+{
+ uint16_t *s = (uint16_t *)auction_closure;
+ if (!s || bidders != *s)
+ {
+ weprintf ("start callback called from bidder");
+ _exit (1);
+ }
+
+ for (uint16_t i = 0; i < bidders; i++)
+ GNUNET_SCHEDULER_add_now (&bidder_start, &id[i]);
+
+ return bidders;
+}
+
+
+static int
+cb_broadcast (void *auction_closure,
+ const void *msg,
+ size_t msg_len)
+{
+ uint16_t *s = (uint16_t *)auction_closure;
+ struct msg *m;
+ for (uint16_t i = 0; i <= bidders; i++)
+ {
+ if (i == *s)
+ continue;
+ m = GNUNET_new (struct msg);
+ m->sender = *s;
+ m->receiver = i;
+ m->buf = GNUNET_new_array (msg_len, unsigned char);
+ memcpy (m->buf, msg, msg_len);
+ m->buf_len = msg_len;
+ GNUNET_SCHEDULER_add_now (&transfer_message, m);
+ }
+ return 0;
+}
+
+
+static int
+cb_unicast (void *auction_closure,
+ const void *msg,
+ size_t msg_len)
+{
+}
+
+
+static void
+cb_result (void *auction_closure,
+ struct BRANDT_Result results[],
+ uint16_t results_len)
+{
+}
+
+
static void
run_new_join (void *arg)
{
int *ret = arg;
const char description[] = "test description for test_new_join";
- struct BRANDT_Auction *ad_seller;
- struct BRANDT_Auction *ad_bidder;
void *desc;
size_t desc_len;
- ad_seller = BRANDT_new (NULL,
- NULL,
- NULL,
- NULL,
+ ad = GNUNET_new_array (bidders + 1, struct BRANDT_Auction *);
+
+ ad[bidders] = BRANDT_new (&cb_result,
+ &cb_broadcast,
+ &cb_start,
+ &id[bidders],
&desc,
&desc_len,
description,
sizeof (description),
GNUNET_TIME_absolute_get (),
GNUNET_TIME_UNIT_MINUTES,
- 8,
- 0,
+ prizes, /* amount of possible prizes */
+ 0, /* m */
1);
- if (!ad_seller)
+ if (!ad[bidders])
{
weprintf ("BRANDT_new() failed.");
- *ret = 0;
- return;
- }
-
-
- ad_bidder = BRANDT_join (NULL,
- NULL,
- NULL,
- NULL,
- desc,
- desc_len,
- description,
- sizeof (description));
- if (!ad_bidder)
- {
- weprintf ("BRANDT_join() failed.");
- *ret = 0;
- return;
+ _exit (1);
}
- if (ad_seller->k != ad_bidder->k ||
- ad_seller->m != ad_bidder->m ||
- ad_seller->outcome_public != ad_bidder->outcome_public ||
- ad_seller->time_start.abs_value_us
- != ad_bidder->time_start.abs_value_us ||
- ad_seller->time_round.rel_value_us
- != ad_bidder->time_round.rel_value_us ||
- !ad_seller->seller_mode ||
- ad_bidder->seller_mode)
+ for (uint16_t i = 0; i < bidders; i++)
{
- weprintf ("error/mismatch in basic auction data");
- *ret = 0;
- return;
+ ad[i] = BRANDT_join (&cb_result,
+ &cb_broadcast,
+ &cb_unicast,
+ &id[i],
+ desc,
+ desc_len,
+ description,
+ sizeof (description),
+ 3); /* bid */
+ if (!ad[i])
+ {
+ weprintf ("BRANDT_join() failed.");
+ _exit (1);
+ }
+
+ if (ad[bidders]->k != ad[i]->k ||
+ ad[bidders]->m != ad[i]->m ||
+ ad[bidders]->outcome_public != ad[i]->outcome_public ||
+ ad[bidders]->time_start.abs_value_us
+ != ad[i]->time_start.abs_value_us ||
+ ad[bidders]->time_round.rel_value_us
+ != ad[i]->time_round.rel_value_us ||
+ !ad[bidders]->seller_mode || /* todo: split out */
+ ad[i]->seller_mode)
+ {
+ weprintf ("error/mismatch in basic auction data");
+ _exit (1);
+ }
}
- BRANDT_destroy (ad_seller);
- BRANDT_destroy (ad_bidder);
-
*ret = 1;
}
@@ -103,7 +193,15 @@ test_new_join ()
{
int ret = 0;
+ id = GNUNET_new_array (bidders + 1, uint16_t);
+ for (uint16_t i = 0; i <= bidders; i++)
+ id[i] = i;
+
GNUNET_SCHEDULER_run (&run_new_join, &ret);
+
+ for (uint16_t i = 0; i <= bidders; i++)
+ BRANDT_destroy (ad[i]);
+
return ret;
}