diff options
Diffstat (limited to 'test_brandt.c')
-rw-r--r-- | test_brandt.c | 182 |
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; } |