aboutsummaryrefslogtreecommitdiff
path: root/src/rps/test_rps.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rps/test_rps.c')
-rw-r--r--src/rps/test_rps.c129
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 */
683static void
684post_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 */
678static int 690static 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
765shutdown_op (void *cls) 780shutdown_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
799post_test_op (void *cls) 816post_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)
1441static void 1469static void
1442single_peer_seed_cb (struct RPSPeer *rps_peer) 1470single_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
1560static void
1561got_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
1593static void
1594sub_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
1601static void
1602sub_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,
1670static void 1757static void
1671churn (void *cls) 1758churn (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)
1832int 1920int
1833file_name_cb (void *cls, const char *filename) 1921file_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
2727main (int argc, char *argv[]) 2820main (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 */