1
//! Test helpers.
2

            
3
#[cfg(test)]
4
use super::{rtt::RoundtripTimeEstimator, CongestionWindow};
5

            
6
// Make a new RTT estimator.
7
#[cfg(test)]
8
10
pub(crate) fn new_rtt_estimator() -> RoundtripTimeEstimator {
9
10
    RoundtripTimeEstimator::new(&params::build_rtt_params())
10
10
}
11

            
12
// Make a new congestion window.
13
#[cfg(test)]
14
28
pub(crate) fn new_cwnd() -> CongestionWindow {
15
28
    CongestionWindow::new(&params::build_cwnd_params())
16
28
}
17

            
18
#[cfg(test)]
19
pub(crate) mod params {
20
    use tor_units::Percentage;
21

            
22
    use crate::ccparams::{
23
        Algorithm, CongestionControlParams, CongestionControlParamsBuilder, CongestionWindowParams,
24
        CongestionWindowParamsBuilder, FixedWindowParams, FixedWindowParamsBuilder,
25
        RoundTripEstimatorParams, RoundTripEstimatorParamsBuilder, VegasParamsBuilder,
26
    };
27

            
28
452
    fn build_fixed_params() -> FixedWindowParams {
29
452
        FixedWindowParamsBuilder::default()
30
452
            .circ_window_start(1000)
31
452
            .circ_window_min(100)
32
452
            .circ_window_max(1000)
33
452
            .build()
34
452
            .expect("Unable to build fixed window params")
35
452
    }
36

            
37
10
    pub(crate) fn build_cc_vegas_params() -> CongestionControlParams {
38
10
        // Following values are the default from the proposal. They likely differ from what the
39
10
        // consensus uses today.
40
10
        let params = VegasParamsBuilder::default()
41
10
            .cell_in_queue_params((186, 248, 310, 186, 600).into())
42
10
            .ss_cwnd_max(5000)
43
10
            .cwnd_full_gap(4)
44
10
            .cwnd_full_min_pct(Percentage::new(25))
45
10
            .cwnd_full_per_cwnd(1)
46
10
            .build()
47
10
            .expect("Unable to build Vegas params");
48
10
        CongestionControlParamsBuilder::default()
49
10
            .rtt_params(build_rtt_params())
50
10
            .cwnd_params(build_cwnd_params())
51
10
            .alg(Algorithm::Vegas(params.clone()))
52
10
            .fallback_alg(Algorithm::FixedWindow(build_fixed_params()))
53
10
            .build()
54
10
            .expect("Unable to build CC params")
55
10
    }
56

            
57
442
    pub(crate) fn build_cc_fixed_params() -> CongestionControlParams {
58
442
        let params = build_fixed_params();
59
442
        CongestionControlParamsBuilder::default()
60
442
            .rtt_params(build_rtt_params())
61
442
            .cwnd_params(build_cwnd_params())
62
442
            .alg(Algorithm::FixedWindow(params.clone()))
63
442
            .fallback_alg(Algorithm::FixedWindow(params))
64
442
            .build()
65
442
            .expect("Unable to build CC params")
66
442
    }
67

            
68
    // Build the round trip estimator parameters. with good enough values for tests.
69
462
    pub(crate) fn build_rtt_params() -> RoundTripEstimatorParams {
70
462
        RoundTripEstimatorParamsBuilder::default()
71
462
            .ewma_cwnd_pct(Percentage::new(50))
72
462
            .ewma_max(10)
73
462
            .ewma_ss_max(2)
74
462
            .rtt_reset_pct(Percentage::new(100))
75
462
            .build()
76
462
            .expect("Unable to build RTT parameters")
77
462
    }
78

            
79
    // Build the congestion window parameters. with good enough values for tests.
80
480
    pub(crate) fn build_cwnd_params() -> CongestionWindowParams {
81
480
        // Values taken from the prop324.
82
480
        CongestionWindowParamsBuilder::default()
83
480
            .cwnd_init(124)
84
480
            .cwnd_inc_pct_ss(Percentage::new(100))
85
480
            .cwnd_inc(1)
86
480
            .cwnd_inc_rate(31)
87
480
            .cwnd_min(124)
88
480
            .cwnd_max(u32::MAX)
89
480
            .sendme_inc(31)
90
480
            .build()
91
480
            .expect("Unable to build congestion window parameters")
92
480
    }
93
}