[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] test: Fix unit tests with latest scheduler changes
commit 0d0b677b6427573b87736da00e638911fac7ef7d
Author: David Goulet <dgoulet@xxxxxxxxxxxxxx>
Date: Thu Sep 14 15:26:12 2017 -0400
test: Fix unit tests with latest scheduler changes
Signed-off-by: David Goulet <dgoulet@xxxxxxxxxxxxxx>
---
src/or/scheduler.c | 10 +++++++++
src/test/test_options.c | 3 ++-
src/test/test_scheduler.c | 54 +++++++++++++++++++++++++++++++++++++++++------
3 files changed, 59 insertions(+), 8 deletions(-)
diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index af4d9e5f6..acb6801ab 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -273,6 +273,16 @@ select_scheduler(void)
{
const char *chosen_sched_type = NULL;
+#ifdef TOR_UNIT_TESTS
+ /* This is hella annoying to set in the options for every test that passes
+ * through the scheduler and there are many so if we don't explicitely have
+ * a list of types set, just put the vanilla one. */
+ if (get_options()->SchedulerTypes_ == NULL) {
+ the_scheduler = get_vanilla_scheduler();
+ return;
+ }
+#endif
+
/* This list is ordered that is first entry has the first priority. Thus, as
* soon as we find a scheduler type that we can use, we use it and stop. */
SMARTLIST_FOREACH_BEGIN(get_options()->SchedulerTypes_, int *, type) {
diff --git a/src/test/test_options.c b/src/test/test_options.c
index 507fc6b9e..9a899d910 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -401,7 +401,8 @@ fixed_get_uname(void)
"ClientUseIPv4 1\n" \
"VirtualAddrNetworkIPv4 127.192.0.0/10\n" \
"VirtualAddrNetworkIPv6 [FE80::]/10\n" \
- "UseEntryGuards 1\n"
+ "UseEntryGuards 1\n" \
+ "Schedulers Vanilla\n"
typedef struct {
or_options_t *old_opt;
diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c
index 633a08922..963c7927a 100644
--- a/src/test/test_scheduler.c
+++ b/src/test/test_scheduler.c
@@ -43,8 +43,32 @@ mock_get_options(void)
}
static void
+cleanup_scheduler_options(void)
+{
+ if (mocked_options.SchedulerTypes_) {
+ SMARTLIST_FOREACH(mocked_options.SchedulerTypes_, int *, i, tor_free(i));
+ smartlist_free(mocked_options.SchedulerTypes_);
+ mocked_options.SchedulerTypes_ = NULL;
+ }
+}
+
+static void
+set_scheduler_options(int val)
+{
+ int *type;
+
+ if (mocked_options.SchedulerTypes_ == NULL) {
+ mocked_options.SchedulerTypes_ = smartlist_new();
+ }
+ type = tor_malloc_zero(sizeof(int));
+ *type = val;
+ smartlist_add(mocked_options.SchedulerTypes_, type);
+}
+
+static void
clear_options(void)
{
+ cleanup_scheduler_options();
memset(&mocked_options, 0, sizeof(mocked_options));
}
@@ -385,7 +409,7 @@ update_socket_info_impl_mock(socket_table_ent_t *ent)
}
static void
-perform_channel_state_tests(int KISTSchedRunInterval)
+perform_channel_state_tests(int KISTSchedRunInterval, int sched_type)
{
channel_t *ch1 = NULL, *ch2 = NULL;
int old_count;
@@ -394,6 +418,7 @@ perform_channel_state_tests(int KISTSchedRunInterval)
MOCK(get_options, mock_get_options);
clear_options();
mocked_options.KISTSchedRunInterval = KISTSchedRunInterval;
+ set_scheduler_options(sched_type);
/* Set up libevent and scheduler */
mock_event_init();
@@ -501,6 +526,7 @@ perform_channel_state_tests(int KISTSchedRunInterval)
UNMOCK(scheduler_compare_channels);
UNMOCK(tor_libevent_get_base);
UNMOCK(get_options);
+ cleanup_scheduler_options();
return;
}
@@ -600,6 +626,7 @@ test_scheduler_loop_vanilla(void *arg)
/* setup options so we're sure about what sched we are running */
MOCK(get_options, mock_get_options);
clear_options();
+ set_scheduler_options(SCHEDULER_VANILLA);
mocked_options.KISTSchedRunInterval = -1;
/* Set up libevent and scheduler */
@@ -761,6 +788,7 @@ test_scheduler_loop_vanilla(void *arg)
done:
tor_free(ch1);
tor_free(ch2);
+ cleanup_scheduler_options();
UNMOCK(channel_flush_some_cells);
UNMOCK(scheduler_compare_channels);
@@ -772,6 +800,11 @@ static void
test_scheduler_loop_kist(void *arg)
{
(void) arg;
+
+#ifndef HAVE_KIST_SUPPORT
+ return;
+#endif
+
channel_t *ch1 = new_fake_channel(), *ch2 = new_fake_channel();
/* setup options so we're sure about what sched we are running */
@@ -783,6 +816,7 @@ test_scheduler_loop_kist(void *arg)
MOCK(update_socket_info_impl, update_socket_info_impl_mock);
clear_options();
mocked_options.KISTSchedRunInterval = 11;
+ set_scheduler_options(SCHEDULER_KIST);
scheduler_init();
tt_assert(ch1);
@@ -844,9 +878,10 @@ static void
test_scheduler_channel_states(void *arg)
{
(void)arg;
- perform_channel_state_tests(-1); // vanilla
+ perform_channel_state_tests(-1, SCHEDULER_VANILLA);
+ perform_channel_state_tests(11, SCHEDULER_KIST_LITE);
#ifdef HAVE_KIST_SUPPORT
- perform_channel_state_tests(11); // kist
+ perform_channel_state_tests(11, SCHEDULER_KIST);
#endif
}
@@ -860,6 +895,10 @@ test_scheduler_initfree(void *arg)
mock_event_init();
MOCK(tor_libevent_get_base, tor_libevent_get_base_mock);
+ MOCK(get_options, mock_get_options);
+ set_scheduler_options(SCHEDULER_KIST);
+ set_scheduler_options(SCHEDULER_KIST_LITE);
+ set_scheduler_options(SCHEDULER_VANILLA);
scheduler_init();
@@ -867,11 +906,7 @@ test_scheduler_initfree(void *arg)
tt_ptr_op(run_sched_ev, !=, NULL);
/* We have specified nothing in the torrc and there's no consensus so the
* KIST scheduler is what should be in use */
-#ifdef HAVE_KIST_SUPPORT
tt_ptr_op(the_scheduler, ==, get_kist_scheduler());
-#else
- tt_ptr_op(the_scheduler, ==, get_vanilla_scheduler());
-#endif
tt_int_op(sched_run_interval, ==, 10);
scheduler_free_all();
@@ -883,6 +918,8 @@ test_scheduler_initfree(void *arg)
tt_ptr_op(run_sched_ev, ==, NULL);
done:
+ UNMOCK(get_options);
+ cleanup_scheduler_options();
return;
}
@@ -971,6 +1008,8 @@ test_scheduler_ns_changed(void *arg)
MOCK(get_options, mock_get_options);
clear_options();
+ set_scheduler_options(SCHEDULER_KIST);
+ set_scheduler_options(SCHEDULER_VANILLA);
tt_ptr_op(the_scheduler, ==, NULL);
@@ -1012,6 +1051,7 @@ test_scheduler_ns_changed(void *arg)
done:
UNMOCK(get_options);
+ cleanup_scheduler_options();
return;
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits