diff options
Diffstat (limited to 'src/rps/test_rps.c')
-rw-r--r-- | src/rps/test_rps.c | 129 |
1 files changed, 120 insertions, 9 deletions
diff --git a/src/rps/test_rps.c b/src/rps/test_rps.c index 92d8c12ea..63a6007ae 100644 --- a/src/rps/test_rps.c +++ b/src/rps/test_rps.c | |||
@@ -190,6 +190,11 @@ struct RPSPeer | |||
190 | struct GNUNET_RPS_Handle *rps_handle; | 190 | struct GNUNET_RPS_Handle *rps_handle; |
191 | 191 | ||
192 | /** | 192 | /** |
193 | * Handle to stream requests | ||
194 | */ | ||
195 | struct GNUNET_RPS_StreamRequestHandle *rps_srh; | ||
196 | |||
197 | /** | ||
193 | * ID of the peer. | 198 | * ID of the peer. |
194 | */ | 199 | */ |
195 | struct GNUNET_PeerIdentity *peer_id; | 200 | struct GNUNET_PeerIdentity *peer_id; |
@@ -673,6 +678,13 @@ ids_to_file (char *file_name, | |||
673 | } */ | 678 | } */ |
674 | 679 | ||
675 | /** | 680 | /** |
681 | * Task run on timeout to collect statistics and potentially shut down. | ||
682 | */ | ||
683 | static void | ||
684 | post_test_op (void *cls); | ||
685 | |||
686 | |||
687 | /** | ||
676 | * Test the success of a single test | 688 | * Test the success of a single test |
677 | */ | 689 | */ |
678 | static int | 690 | static int |
@@ -732,6 +744,8 @@ static int check_statistics_collect_completed_single_peer ( | |||
732 | } | 744 | } |
733 | return GNUNET_YES; | 745 | return GNUNET_YES; |
734 | } | 746 | } |
747 | |||
748 | |||
735 | /** | 749 | /** |
736 | * @brief Checks if all peers already received their statistics value from the | 750 | * @brief Checks if all peers already received their statistics value from the |
737 | * statistics service. | 751 | * statistics service. |
@@ -758,6 +772,7 @@ static int check_statistics_collect_completed () | |||
758 | return GNUNET_YES; | 772 | return GNUNET_YES; |
759 | } | 773 | } |
760 | 774 | ||
775 | |||
761 | /** | 776 | /** |
762 | * Task run on timeout to shut everything down. | 777 | * Task run on timeout to shut everything down. |
763 | */ | 778 | */ |
@@ -765,6 +780,7 @@ static void | |||
765 | shutdown_op (void *cls) | 780 | shutdown_op (void *cls) |
766 | { | 781 | { |
767 | unsigned int i; | 782 | unsigned int i; |
783 | (void) cls; | ||
768 | 784 | ||
769 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 785 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
770 | "Shutdown task scheduled, going down.\n"); | 786 | "Shutdown task scheduled, going down.\n"); |
@@ -772,6 +788,7 @@ shutdown_op (void *cls) | |||
772 | if (NULL != post_test_task) | 788 | if (NULL != post_test_task) |
773 | { | 789 | { |
774 | GNUNET_SCHEDULER_cancel (post_test_task); | 790 | GNUNET_SCHEDULER_cancel (post_test_task); |
791 | post_test_op (NULL); | ||
775 | } | 792 | } |
776 | if (NULL != churn_task) | 793 | if (NULL != churn_task) |
777 | { | 794 | { |
@@ -799,6 +816,7 @@ static void | |||
799 | post_test_op (void *cls) | 816 | post_test_op (void *cls) |
800 | { | 817 | { |
801 | unsigned int i; | 818 | unsigned int i; |
819 | (void) cls; | ||
802 | 820 | ||
803 | post_test_task = NULL; | 821 | post_test_task = NULL; |
804 | post_test = GNUNET_YES; | 822 | post_test = GNUNET_YES; |
@@ -811,16 +829,16 @@ post_test_op (void *cls) | |||
811 | } | 829 | } |
812 | for (i = 0; i < num_peers; i++) | 830 | for (i = 0; i < num_peers; i++) |
813 | { | 831 | { |
814 | if (NULL != rps_peers[i].op) | ||
815 | { | ||
816 | GNUNET_TESTBED_operation_done (rps_peers[i].op); | ||
817 | rps_peers[i].op = NULL; | ||
818 | } | ||
819 | if (NULL != cur_test_run.post_test) | 832 | if (NULL != cur_test_run.post_test) |
820 | { | 833 | { |
821 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Executing post_test for peer %u\n", i); | 834 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Executing post_test for peer %u\n", i); |
822 | cur_test_run.post_test (&rps_peers[i]); | 835 | cur_test_run.post_test (&rps_peers[i]); |
823 | } | 836 | } |
837 | if (NULL != rps_peers[i].op) | ||
838 | { | ||
839 | GNUNET_TESTBED_operation_done (rps_peers[i].op); | ||
840 | rps_peers[i].op = NULL; | ||
841 | } | ||
824 | } | 842 | } |
825 | /* If we do not collect statistics, shut down directly */ | 843 | /* If we do not collect statistics, shut down directly */ |
826 | if (NO_COLLECT_STATISTICS == cur_test_run.have_collect_statistics || | 844 | if (NO_COLLECT_STATISTICS == cur_test_run.have_collect_statistics || |
@@ -905,6 +923,7 @@ info_cb (void *cb_cls, | |||
905 | const char *emsg) | 923 | const char *emsg) |
906 | { | 924 | { |
907 | struct OpListEntry *entry = (struct OpListEntry *) cb_cls; | 925 | struct OpListEntry *entry = (struct OpListEntry *) cb_cls; |
926 | (void) op; | ||
908 | 927 | ||
909 | if (GNUNET_YES == in_shutdown || GNUNET_YES == post_test) | 928 | if (GNUNET_YES == in_shutdown || GNUNET_YES == post_test) |
910 | { | 929 | { |
@@ -1070,6 +1089,9 @@ stat_complete_cb (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
1070 | { | 1089 | { |
1071 | //struct GNUNET_STATISTICS_Handle *sh = ca_result; | 1090 | //struct GNUNET_STATISTICS_Handle *sh = ca_result; |
1072 | //struct RPSPeer *peer = (struct RPSPeer *) cls; | 1091 | //struct RPSPeer *peer = (struct RPSPeer *) cls; |
1092 | (void) cls; | ||
1093 | (void) op; | ||
1094 | (void) ca_result; | ||
1073 | 1095 | ||
1074 | if (NULL != emsg) | 1096 | if (NULL != emsg) |
1075 | { | 1097 | { |
@@ -1098,6 +1120,12 @@ rps_disconnect_adapter (void *cls, | |||
1098 | { | 1120 | { |
1099 | struct RPSPeer *peer = cls; | 1121 | struct RPSPeer *peer = cls; |
1100 | struct GNUNET_RPS_Handle *h = op_result; | 1122 | struct GNUNET_RPS_Handle *h = op_result; |
1123 | |||
1124 | if (NULL != peer->rps_srh) | ||
1125 | { | ||
1126 | GNUNET_RPS_stream_cancel (peer->rps_srh); | ||
1127 | peer->rps_srh = NULL; | ||
1128 | } | ||
1101 | GNUNET_assert (NULL != peer); | 1129 | GNUNET_assert (NULL != peer); |
1102 | GNUNET_RPS_disconnect (h); | 1130 | GNUNET_RPS_disconnect (h); |
1103 | peer->rps_handle = NULL; | 1131 | peer->rps_handle = NULL; |
@@ -1441,6 +1469,7 @@ seed_big_cb (struct RPSPeer *rps_peer) | |||
1441 | static void | 1469 | static void |
1442 | single_peer_seed_cb (struct RPSPeer *rps_peer) | 1470 | single_peer_seed_cb (struct RPSPeer *rps_peer) |
1443 | { | 1471 | { |
1472 | (void) rps_peer; | ||
1444 | // TODO | 1473 | // TODO |
1445 | } | 1474 | } |
1446 | 1475 | ||
@@ -1525,6 +1554,63 @@ churn_test_cb (struct RPSPeer *rps_peer) | |||
1525 | } | 1554 | } |
1526 | 1555 | ||
1527 | /*********************************** | 1556 | /*********************************** |
1557 | * SUB | ||
1558 | ***********************************/ | ||
1559 | |||
1560 | static void | ||
1561 | got_stream_peer_cb (void *cls, | ||
1562 | uint64_t num_peers, | ||
1563 | const struct GNUNET_PeerIdentity *peers) | ||
1564 | { | ||
1565 | const struct RPSPeer *rps_peer = cls; | ||
1566 | |||
1567 | for (uint64_t i = 0; i < num_peers; i++) | ||
1568 | { | ||
1569 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1570 | "Peer %" PRIu32 " received [%s] from stream.\n", | ||
1571 | rps_peer->index, | ||
1572 | GNUNET_i2s (&peers[i])); | ||
1573 | if (0 != rps_peer->index && | ||
1574 | 0 == memcmp (&peers[i], | ||
1575 | &rps_peers[0].peer_id, | ||
1576 | sizeof (struct GNUNET_PeerIdentity))) | ||
1577 | { | ||
1578 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Received a peer id outside sub\n"); | ||
1579 | ok = 1; | ||
1580 | } | ||
1581 | else if (0 == rps_peer->index && | ||
1582 | 0 != memcmp (&peers[i], | ||
1583 | &rps_peers[0].peer_id, | ||
1584 | sizeof (struct GNUNET_PeerIdentity))) | ||
1585 | { | ||
1586 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Received a peer id outside sub (lonely)\n"); | ||
1587 | ok = 1; | ||
1588 | } | ||
1589 | } | ||
1590 | } | ||
1591 | |||
1592 | |||
1593 | static void | ||
1594 | sub_post (struct RPSPeer *rps_peer) | ||
1595 | { | ||
1596 | if (0 != rps_peer->index) GNUNET_RPS_sub_stop (rps_peer->rps_handle, "test"); | ||
1597 | else GNUNET_RPS_sub_stop (rps_peer->rps_handle, "lonely"); | ||
1598 | } | ||
1599 | |||
1600 | |||
1601 | static void | ||
1602 | sub_pre (struct RPSPeer *rps_peer, struct GNUNET_RPS_Handle *h) | ||
1603 | { | ||
1604 | (void) rps_peer; | ||
1605 | |||
1606 | if (0 != rps_peer->index) GNUNET_RPS_sub_start (h, "test"); | ||
1607 | else GNUNET_RPS_sub_start (h, "lonely"); /* have a group of one */ | ||
1608 | rps_peer->rps_srh = GNUNET_RPS_stream_request (h, | ||
1609 | &got_stream_peer_cb, | ||
1610 | rps_peer); | ||
1611 | } | ||
1612 | |||
1613 | /*********************************** | ||
1528 | * PROFILER | 1614 | * PROFILER |
1529 | ***********************************/ | 1615 | ***********************************/ |
1530 | 1616 | ||
@@ -1540,6 +1626,7 @@ churn_cb (void *cls, | |||
1540 | struct GNUNET_TESTBED_Operation *op, | 1626 | struct GNUNET_TESTBED_Operation *op, |
1541 | const char *emsg) | 1627 | const char *emsg) |
1542 | { | 1628 | { |
1629 | (void) op; | ||
1543 | // FIXME | 1630 | // FIXME |
1544 | struct OpListEntry *entry = cls; | 1631 | struct OpListEntry *entry = cls; |
1545 | 1632 | ||
@@ -1670,6 +1757,7 @@ manage_service_wrapper (unsigned int i, unsigned int j, | |||
1670 | static void | 1757 | static void |
1671 | churn (void *cls) | 1758 | churn (void *cls) |
1672 | { | 1759 | { |
1760 | (void) cls; | ||
1673 | unsigned int i; | 1761 | unsigned int i; |
1674 | unsigned int j; | 1762 | unsigned int j; |
1675 | double portion_online; | 1763 | double portion_online; |
@@ -1832,6 +1920,8 @@ profiler_cb (struct RPSPeer *rps_peer) | |||
1832 | int | 1920 | int |
1833 | file_name_cb (void *cls, const char *filename) | 1921 | file_name_cb (void *cls, const char *filename) |
1834 | { | 1922 | { |
1923 | (void) cls; | ||
1924 | |||
1835 | if (NULL != strstr (filename, "sampler_el")) | 1925 | if (NULL != strstr (filename, "sampler_el")) |
1836 | { | 1926 | { |
1837 | struct RPS_SamplerElement *s_elem; | 1927 | struct RPS_SamplerElement *s_elem; |
@@ -2501,6 +2591,8 @@ stat_iterator (void *cls, | |||
2501 | uint64_t value, | 2591 | uint64_t value, |
2502 | int is_persistent) | 2592 | int is_persistent) |
2503 | { | 2593 | { |
2594 | (void) subsystem; | ||
2595 | (void) is_persistent; | ||
2504 | const struct STATcls *stat_cls = (const struct STATcls *) cls; | 2596 | const struct STATcls *stat_cls = (const struct STATcls *) cls; |
2505 | struct RPSPeer *rps_peer = (struct RPSPeer *) stat_cls->rps_peer; | 2597 | struct RPSPeer *rps_peer = (struct RPSPeer *) stat_cls->rps_peer; |
2506 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got stat value: %s - %" PRIu64 "\n", | 2598 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got stat value: %s - %" PRIu64 "\n", |
@@ -2635,6 +2727,9 @@ run (void *cls, | |||
2635 | unsigned int links_succeeded, | 2727 | unsigned int links_succeeded, |
2636 | unsigned int links_failed) | 2728 | unsigned int links_failed) |
2637 | { | 2729 | { |
2730 | (void) cls; | ||
2731 | (void) h; | ||
2732 | (void) links_failed; | ||
2638 | unsigned int i; | 2733 | unsigned int i; |
2639 | struct OpListEntry *entry; | 2734 | struct OpListEntry *entry; |
2640 | 2735 | ||
@@ -2711,8 +2806,6 @@ run (void *cls, | |||
2711 | timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, | 2806 | timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, |
2712 | (timeout_s * 1.2) + 0.1 * num_peers); | 2807 | (timeout_s * 1.2) + 0.1 * num_peers); |
2713 | shutdown_task = GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL); | 2808 | shutdown_task = GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL); |
2714 | shutdown_task = GNUNET_SCHEDULER_add_shutdown (shutdown_op, NULL); | ||
2715 | |||
2716 | } | 2809 | } |
2717 | 2810 | ||
2718 | 2811 | ||
@@ -2727,6 +2820,7 @@ int | |||
2727 | main (int argc, char *argv[]) | 2820 | main (int argc, char *argv[]) |
2728 | { | 2821 | { |
2729 | int ret_value; | 2822 | int ret_value; |
2823 | (void) argc; | ||
2730 | 2824 | ||
2731 | /* Defaults for tests */ | 2825 | /* Defaults for tests */ |
2732 | num_peers = 5; | 2826 | num_peers = 5; |
@@ -2748,6 +2842,7 @@ main (int argc, char *argv[]) | |||
2748 | cur_test_run.pre_test = mal_pre; | 2842 | cur_test_run.pre_test = mal_pre; |
2749 | cur_test_run.main_test = mal_cb; | 2843 | cur_test_run.main_test = mal_cb; |
2750 | cur_test_run.init_peer = mal_init_peer; | 2844 | cur_test_run.init_peer = mal_init_peer; |
2845 | timeout_s = 40; | ||
2751 | 2846 | ||
2752 | if (strstr (argv[0], "_1") != NULL) | 2847 | if (strstr (argv[0], "_1") != NULL) |
2753 | { | 2848 | { |
@@ -2843,7 +2938,22 @@ main (int argc, char *argv[]) | |||
2843 | cur_test_run.eval_cb = default_eval_cb; | 2938 | cur_test_run.eval_cb = default_eval_cb; |
2844 | cur_test_run.have_churn = HAVE_NO_CHURN; | 2939 | cur_test_run.have_churn = HAVE_NO_CHURN; |
2845 | cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT; | 2940 | cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT; |
2846 | timeout_s = 10; | 2941 | timeout_s = 40; |
2942 | } | ||
2943 | |||
2944 | else if (strstr (argv[0], "_sub") != NULL) | ||
2945 | { | ||
2946 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test subs\n"); | ||
2947 | cur_test_run.name = "test-rps-sub"; | ||
2948 | num_peers = 5; | ||
2949 | //cur_test_run.init_peer = &default_init_peer; | ||
2950 | cur_test_run.pre_test = &sub_pre; | ||
2951 | cur_test_run.main_test = &single_req_cb; | ||
2952 | //cur_test_run.reply_handle = default_reply_handle; | ||
2953 | cur_test_run.post_test = &sub_post; | ||
2954 | //cur_test_run.eval_cb = default_eval_cb; | ||
2955 | cur_test_run.have_churn = HAVE_NO_CHURN; | ||
2956 | cur_test_run.have_quick_quit = HAVE_QUICK_QUIT; | ||
2847 | } | 2957 | } |
2848 | 2958 | ||
2849 | else if (strstr (argv[0], "profiler") != NULL) | 2959 | else if (strstr (argv[0], "profiler") != NULL) |
@@ -2916,7 +3026,7 @@ main (int argc, char *argv[]) | |||
2916 | } | 3026 | } |
2917 | 3027 | ||
2918 | ret_value = cur_test_run.eval_cb(); | 3028 | ret_value = cur_test_run.eval_cb(); |
2919 | 3029 | ||
2920 | if (NO_COLLECT_VIEW == cur_test_run.have_collect_view) | 3030 | if (NO_COLLECT_VIEW == cur_test_run.have_collect_view) |
2921 | { | 3031 | { |
2922 | GNUNET_array_grow (rps_peers->cur_view, | 3032 | GNUNET_array_grow (rps_peers->cur_view, |
@@ -2929,4 +3039,5 @@ main (int argc, char *argv[]) | |||
2929 | return ret_value; | 3039 | return ret_value; |
2930 | } | 3040 | } |
2931 | 3041 | ||
3042 | |||
2932 | /* end of test_rps.c */ | 3043 | /* end of test_rps.c */ |