123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /* Copyright (c) 2014-2018, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- #include "core/or/or.h"
- #include "test/test.h"
- #define HIBERNATE_PRIVATE
- #include "feature/hibernate/hibernate.h"
- #include "app/config/config.h"
- #define STATEFILE_PRIVATE
- #include "app/config/statefile.h"
- #include "app/config/or_state_st.h"
- #define NS_MODULE accounting
- #define NS_SUBMODULE limits
- /*
- * Test to make sure accounting triggers hibernation
- * correctly with both sum or max rules set
- */
- static or_state_t *or_state;
- NS_DECL(or_state_t *, get_or_state, (void));
- static or_state_t *
- NS(get_or_state)(void)
- {
- return or_state;
- }
- static void
- test_accounting_limits(void *arg)
- {
- or_options_t *options = get_options_mutable();
- time_t fake_time = time(NULL);
- (void) arg;
- NS_MOCK(get_or_state);
- or_state = or_state_new();
- options->AccountingMax = 100;
- options->AccountingRule = ACCT_MAX;
- tor_assert(accounting_is_enabled(options));
- configure_accounting(fake_time);
- accounting_add_bytes(10, 0, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 0);
- accounting_add_bytes(90, 0, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 1);
- options->AccountingMax = 200;
- options->AccountingRule = ACCT_SUM;
- accounting_add_bytes(0, 10, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 0);
- accounting_add_bytes(0, 90, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 1);
- options->AccountingRule = ACCT_OUT;
- accounting_add_bytes(100, 10, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 0);
- accounting_add_bytes(0, 90, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 1);
- options->AccountingMax = 300;
- options->AccountingRule = ACCT_IN;
- accounting_add_bytes(10, 100, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 0);
- accounting_add_bytes(90, 0, 1);
- fake_time += 1;
- consider_hibernation(fake_time);
- tor_assert(we_are_hibernating() == 1);
- goto done;
- done:
- NS_UNMOCK(get_or_state);
- or_state_free(or_state);
- }
- #undef NS_SUBMODULE
- struct testcase_t accounting_tests[] = {
- { "bwlimits", test_accounting_limits, TT_FORK, NULL, NULL },
- END_OF_TESTCASES
- };
|