summaryrefslogtreecommitdiff
path: root/tests/t_clean.c
diff options
context:
space:
mode:
authorDirk Engling <erdgeist@erdgeist.org>2026-11-07 16:54:36 +0100
committerDirk Engling <erdgeist@erdgeist.org>2026-11-07 16:54:36 +0100
commit1e7248b330bde4c70528ccf91535391e19294dc3 (patch)
treef650bc5090227578602de43b3f1ea6dfa3c8e5b5 /tests/t_clean.c
parentcfbe53da5d9ef8dad1bb3276c0b33ec2ab6e974b (diff)
Add a knob to help reducing memory consumption. This time: empty torrents may expire sooner
Diffstat (limited to 'tests/t_clean.c')
-rw-r--r--tests/t_clean.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/t_clean.c b/tests/t_clean.c
index 2fadd03..0237cc6 100644
--- a/tests/t_clean.c
+++ b/tests/t_clean.c
@@ -122,6 +122,41 @@ static void case_an_idle_swarm_still_ages_out(void) {
122 workstruct_deinit(&ws); 122 workstruct_deinit(&ws);
123} 123}
124 124
125static void case_empty_torrent_timeout_bounds_a_counter_only_torrent(void) {
126 struct ot_workstruct ws;
127 ot_hash hash;
128 ot_torrent *torrent;
129 ot_time saved = g_empty_torrent_timeout;
130
131 test_case("the empty torrent timeout bounds a counter-only torrent's life");
132 memset(hash, 0x33, sizeof(hash));
133 CHECK_INT(workstruct_init(&ws, G_INBUF_SIZE), 0);
134
135 announce(&ws, &hash, 7, 1);
136 torrent = torrent_of(&hash);
137 CHECK(torrent != NULL);
138 torrent->down_count = 1; /* one completed download to remember it by */
139
140 /* Age the only peer out: the torrent falls empty but keeps its count */
141 step_clock_back(torrent, -OT_PEER_TIMEOUT);
142 CHECK_INT(clean_single_torrent(torrent), 0);
143 CHECK_INT(peers_in(&hash), 0);
144
145 /* Carry it a little past a short empty-torrent timeout */
146 step_clock_back(torrent, -10);
147
148 /* The default, matching the torrent timeout, still holds it for the count */
149 g_empty_torrent_timeout = OT_TORRENT_TIMEOUT;
150 CHECK_INT(clean_single_torrent(torrent), 0);
151
152 /* A timeout it has now exceeded lets the next sweep drop it */
153 g_empty_torrent_timeout = OT_PEER_TIMEOUT + 5;
154 CHECK_INT(clean_single_torrent(torrent), 1);
155
156 g_empty_torrent_timeout = saved;
157 workstruct_deinit(&ws);
158}
159
125void test_clean(void) { 160void test_clean(void) {
126 sigset_t hup; 161 sigset_t hup;
127 162
@@ -134,5 +169,6 @@ void test_clean(void) {
134 trackerlogic_init(); 169 trackerlogic_init();
135 case_a_clock_that_went_back_keeps_the_swarm(); 170 case_a_clock_that_went_back_keeps_the_swarm();
136 case_an_idle_swarm_still_ages_out(); 171 case_an_idle_swarm_still_ages_out();
172 case_empty_torrent_timeout_bounds_a_counter_only_torrent();
137 trackerlogic_deinit(); 173 trackerlogic_deinit();
138} 174}