|
@@ -1,6 +1,7 @@
|
|
|
#define TOR_CHANNEL_INTERNAL_
|
|
|
#define MAIN_PRIVATE
|
|
|
#define NETWORKSTATUS_PRIVATE
|
|
|
+#define TOR_TIMERS_PRIVATE
|
|
|
#include "or.h"
|
|
|
#include "test.h"
|
|
|
#include "testsupport.h"
|
|
@@ -29,6 +30,8 @@ void test_channelpadding_decide_to_pad_channel(void *arg);
|
|
|
|
|
|
void dummy_nop_timer(void);
|
|
|
|
|
|
+#define NSEC_PER_MSEC (1000*1000)
|
|
|
+
|
|
|
|
|
|
static int fake_tortls = 0;
|
|
|
|
|
@@ -350,6 +353,7 @@ test_channelpadding_consensus(void *arg)
|
|
|
channelpadding_decision_t decision;
|
|
|
or_options_t *options = get_options_mutable();
|
|
|
int64_t val;
|
|
|
+ int64_t new_time;
|
|
|
(void)arg;
|
|
|
|
|
|
tor_libevent_postfork();
|
|
@@ -372,7 +376,9 @@ test_channelpadding_consensus(void *arg)
|
|
|
*/
|
|
|
channel_t *chan;
|
|
|
routerstatus_t *relay = tor_malloc_zero(sizeof(routerstatus_t));
|
|
|
- monotime_init();
|
|
|
+ monotime_enable_test_mocking();
|
|
|
+ monotime_set_mock_time_nsec(1);
|
|
|
+ monotime_coarse_set_mock_time_nsec(1);
|
|
|
timers_initialize();
|
|
|
|
|
|
connection_array = smartlist_new();
|
|
@@ -399,7 +405,10 @@ test_channelpadding_consensus(void *arg)
|
|
|
tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED);
|
|
|
|
|
|
|
|
|
- event_base_loop(tor_libevent_get_base(), 0);
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 1);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
|
|
|
@@ -452,7 +461,10 @@ test_channelpadding_consensus(void *arg)
|
|
|
tt_i64_op(val, OP_LE, 200);
|
|
|
|
|
|
|
|
|
- event_base_loop(tor_libevent_get_base(), 0);
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+201)*NSEC_PER_MSEC;
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 1);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
|
|
|
@@ -555,6 +567,7 @@ test_channelpadding_consensus(void *arg)
|
|
|
tor_free(current_ns_consensus);
|
|
|
|
|
|
timers_shutdown();
|
|
|
+ monotime_disable_test_mocking();
|
|
|
channel_free_all();
|
|
|
|
|
|
return;
|
|
@@ -725,12 +738,16 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
* + We should not send padding
|
|
|
*/
|
|
|
channel_t *chan;
|
|
|
+ int64_t new_time;
|
|
|
connection_array = smartlist_new();
|
|
|
(void)arg;
|
|
|
|
|
|
tor_libevent_postfork();
|
|
|
|
|
|
monotime_init();
|
|
|
+ monotime_enable_test_mocking();
|
|
|
+ monotime_set_mock_time_nsec(1);
|
|
|
+ monotime_coarse_set_mock_time_nsec(1);
|
|
|
timers_initialize();
|
|
|
setup_full_capture_of_logs(LOG_WARN);
|
|
|
channelpadding_new_consensus_params(NULL);
|
|
@@ -762,7 +779,10 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 0);
|
|
|
|
|
|
|
|
|
- event_base_loop(tor_libevent_get_base(), 0);
|
|
|
+ new_time = (monotime_coarse_absolute_msec() + 1000)*NSEC_PER_MSEC;
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 1);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
|
|
|
@@ -779,7 +799,10 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED);
|
|
|
|
|
|
|
|
|
- event_base_loop(tor_libevent_get_base(), 0);
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 1);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
|
|
|
@@ -811,7 +834,11 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
channel_timestamp_active(chan);
|
|
|
|
|
|
|
|
|
- dummy_nop_timer();
|
|
|
+
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 0);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
@@ -828,7 +855,10 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
chan->state = CHANNEL_STATE_MAINT;
|
|
|
|
|
|
|
|
|
- dummy_nop_timer();
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 0);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
@@ -843,7 +873,11 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 0);
|
|
|
|
|
|
|
|
|
- event_base_loop(tor_libevent_get_base(), 0);
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
+
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 1);
|
|
|
tt_assert(!chan->pending_padding_callback);
|
|
|
|
|
@@ -870,7 +904,10 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
free_fake_channeltls((channel_tls_t*)chan);
|
|
|
|
|
|
|
|
|
- dummy_nop_timer();
|
|
|
+ new_time = (monotime_coarse_absolute_msec()+101)*NSEC_PER_MSEC;
|
|
|
+ monotime_coarse_set_mock_time_nsec(new_time);
|
|
|
+ monotime_set_mock_time_nsec(new_time);
|
|
|
+ timers_run_pending();
|
|
|
|
|
|
tt_int_op(tried_to_write_cell, OP_EQ, 0);
|
|
|
|
|
@@ -878,6 +915,7 @@ test_channelpadding_decide_to_pad_channel(void *arg)
|
|
|
smartlist_free(connection_array);
|
|
|
|
|
|
teardown_capture_of_logs();
|
|
|
+ monotime_disable_test_mocking();
|
|
|
timers_shutdown();
|
|
|
channel_free_all();
|
|
|
|