Fix test prob distr parameters that caused warnings.

They were causing the following warnings in circuitpadding/circuitpadding_sample_distribution:

     src/lib/math/prob_distr.c:1311:17: runtime error: division by zero
     SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/lib/math/prob_distr.c:1311:17 in
     src/lib/math/prob_distr.c:1219:49: runtime error: division by zero
     SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/lib/math/prob_distr.c:1219:49 in

because the distributions were called with erroneous parameters (e.g. geometric
distribution with p=0).

We now defined these test probability distributions with more realistic
parameters.

As far as the circuitpadding_sample_distribution() test is concerned, it
doesn't matter if the distributions return values outside of [0,10] since we
already restrict the values into that interval using min=0 and max=10 (and RTT
estimate is disabled).
This commit is contained in:
George Kadianakis
2019-02-25 14:59:28 +02:00
committed by Nick Mathewson
parent 18de065cbb
commit a71999462b
3 changed files with 31 additions and 17 deletions
+16 -14
View File
@@ -2096,6 +2096,7 @@ helper_circpad_circ_distribution_machine_setup(int min, int max)
circpad_state_t *zero_st = &circ_client_machine.states[0];
zero_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 1;
zero_st->iat_dist.type = CIRCPAD_DIST_UNIFORM;
/* param2 is upper bound, param1 is lower */
zero_st->iat_dist.param1 = min;
zero_st->iat_dist.param2 = max;
zero_st->dist_added_shift_usec = min;
@@ -2104,48 +2105,50 @@ helper_circpad_circ_distribution_machine_setup(int min, int max)
circpad_state_t *first_st = &circ_client_machine.states[1];
first_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 2;
first_st->iat_dist.type = CIRCPAD_DIST_LOGISTIC;
first_st->iat_dist.param1 = min;
first_st->iat_dist.param2 = max;
/* param1 is Mu, param2 is sigma. */
first_st->iat_dist.param1 = 9;
first_st->iat_dist.param2 = 3;
first_st->dist_added_shift_usec = min;
first_st->dist_max_sample_usec = max;
circpad_state_t *second_st = &circ_client_machine.states[2];
second_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 3;
second_st->iat_dist.type = CIRCPAD_DIST_LOG_LOGISTIC;
second_st->iat_dist.param1 = min;
second_st->iat_dist.param2 = max;
/* param1 is Alpha, param2 is 1.0/Beta */
second_st->iat_dist.param1 = 1;
second_st->iat_dist.param2 = 0.5;
second_st->dist_added_shift_usec = min;
second_st->dist_max_sample_usec = max;
circpad_state_t *third_st = &circ_client_machine.states[3];
third_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 4;
third_st->iat_dist.type = CIRCPAD_DIST_GEOMETRIC;
third_st->iat_dist.param1 = min;
third_st->iat_dist.param2 = max;
/* param1 is 'p' (success probability) */
third_st->iat_dist.param1 = 0.2;
third_st->dist_added_shift_usec = min;
third_st->dist_max_sample_usec = max;
circpad_state_t *fourth_st = &circ_client_machine.states[4];
fourth_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 5;
fourth_st->iat_dist.type = CIRCPAD_DIST_WEIBULL;
fourth_st->iat_dist.param1 = min;
fourth_st->iat_dist.param2 = max;
/* param1 is k, param2 is Lambda */
fourth_st->iat_dist.param1 = 1.5;
fourth_st->iat_dist.param2 = 1;
fourth_st->dist_added_shift_usec = min;
fourth_st->dist_max_sample_usec = max;
circpad_state_t *fifth_st = &circ_client_machine.states[5];
fifth_st->next_state[CIRCPAD_EVENT_NONPADDING_RECV] = 6;
fifth_st->iat_dist.type = CIRCPAD_DIST_PARETO;
fifth_st->iat_dist.param1 = min;
fifth_st->iat_dist.param2 = max;
/* param1 is sigma, param2 is xi */
fifth_st->iat_dist.param1 = 1;
fifth_st->iat_dist.param2 = 5;
fifth_st->dist_added_shift_usec = min;
fifth_st->dist_max_sample_usec = max;
}
/** Simple test that the padding delays sampled from a uniform distribution
* actually faill within the uniform distribution range. */
/* TODO: Upgrade this test so that each state tests a different prob
* distribution */
static void
test_circuitpadding_sample_distribution(void *arg)
{
@@ -2159,8 +2162,7 @@ test_circuitpadding_sample_distribution(void *arg)
MOCK(circpad_machine_schedule_padding,
circpad_machine_schedule_padding_mock);
/* Initialize a machine with multiple probability distributions that should
* return values between 0 and 5 */
/* Initialize a machine with multiple probability distributions */
circpad_machines_init();
helper_circpad_circ_distribution_machine_setup(0, 10);