|
|
@@ -38,7 +38,7 @@ func (suite *StatsTestSuite) TestNewStatsRecoverParameters() {
|
|
38
|
38
|
knownLambda := 100.0
|
|
39
|
39
|
|
|
40
|
40
|
samples := suite.GenWeibull(knownK, knownLambda, 5000, 42)
|
|
41
|
|
- stats := NewStats(samples)
|
|
|
41
|
+ stats := NewStats(samples, true)
|
|
42
|
42
|
|
|
43
|
43
|
suite.InDelta(knownK, stats.k, 0.1)
|
|
44
|
44
|
suite.InDelta(knownLambda, stats.lambda, 5.0)
|
|
|
@@ -50,7 +50,7 @@ func (suite *StatsTestSuite) TestNewStatsExponentialCase() {
|
|
50
|
50
|
knownLambda := 50.0
|
|
51
|
51
|
|
|
52
|
52
|
samples := suite.GenWeibull(knownK, knownLambda, 5000, 123)
|
|
53
|
|
- stats := NewStats(samples)
|
|
|
53
|
+ stats := NewStats(samples, true)
|
|
54
|
54
|
|
|
55
|
55
|
suite.InDelta(knownK, stats.k, 0.1)
|
|
56
|
56
|
suite.InDelta(knownLambda, stats.lambda, 5.0)
|
|
|
@@ -64,7 +64,7 @@ func (suite *StatsTestSuite) TestNewStatsSmallK() {
|
|
64
|
64
|
knownLambda := 100.0
|
|
65
|
65
|
|
|
66
|
66
|
samples := suite.GenWeibull(knownK, knownLambda, 10000, 99)
|
|
67
|
|
- stats := NewStats(samples)
|
|
|
67
|
+ stats := NewStats(samples, true)
|
|
68
|
68
|
|
|
69
|
69
|
suite.InDelta(knownK, stats.k, 0.05)
|
|
70
|
70
|
suite.InDelta(knownLambda, stats.lambda, 5.0)
|
|
|
@@ -76,7 +76,7 @@ func (suite *StatsTestSuite) TestNewStatsLargeK() {
|
|
76
|
76
|
knownLambda := 200.0
|
|
77
|
77
|
|
|
78
|
78
|
samples := suite.GenWeibull(knownK, knownLambda, 5000, 77)
|
|
79
|
|
- stats := NewStats(samples)
|
|
|
79
|
+ stats := NewStats(samples, true)
|
|
80
|
80
|
|
|
81
|
81
|
suite.InDelta(knownK, stats.k, 0.3)
|
|
82
|
82
|
suite.InDelta(knownLambda, stats.lambda, 5.0)
|
|
|
@@ -121,7 +121,7 @@ func (suite *StatsTestSuite) TestNewStatsRoundTrip() {
|
|
121
|
121
|
knownLambda := 80.0
|
|
122
|
122
|
|
|
123
|
123
|
samples := suite.GenWeibull(knownK, knownLambda, 5000, 555)
|
|
124
|
|
- stats := NewStats(samples)
|
|
|
124
|
+ stats := NewStats(samples, true)
|
|
125
|
125
|
|
|
126
|
126
|
n := 50000
|
|
127
|
127
|
sum := 0.0
|
|
|
@@ -138,16 +138,17 @@ func (suite *StatsTestSuite) TestNewStatsRoundTrip() {
|
|
138
|
138
|
}
|
|
139
|
139
|
|
|
140
|
140
|
func (suite *StatsTestSuite) TestSizeStartPhase() {
|
|
141
|
|
- stats := &Stats{k: 1.0, lambda: 1.0}
|
|
|
141
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: true}
|
|
142
|
142
|
|
|
143
|
143
|
for range TLSCounterAccelAfter {
|
|
144
|
144
|
size := stats.Size()
|
|
145
|
|
- suite.Equal(TLSRecordSizeStart, size)
|
|
|
145
|
+ suite.GreaterOrEqual(size, TLSRecordSizeStart-DRSNoise)
|
|
|
146
|
+ suite.LessOrEqual(size, TLSRecordSizeStart)
|
|
146
|
147
|
}
|
|
147
|
148
|
}
|
|
148
|
149
|
|
|
149
|
150
|
func (suite *StatsTestSuite) TestSizeAccelPhase() {
|
|
150
|
|
- stats := &Stats{k: 1.0, lambda: 1.0}
|
|
|
151
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: true}
|
|
151
|
152
|
|
|
152
|
153
|
for range TLSCounterAccelAfter {
|
|
153
|
154
|
stats.Size()
|
|
|
@@ -155,12 +156,13 @@ func (suite *StatsTestSuite) TestSizeAccelPhase() {
|
|
155
|
156
|
|
|
156
|
157
|
for range TLSCounterMaxAfter - TLSCounterAccelAfter {
|
|
157
|
158
|
size := stats.Size()
|
|
158
|
|
- suite.Equal(TLSRecordSizeAccel, size)
|
|
|
159
|
+ suite.GreaterOrEqual(size, TLSRecordSizeAccel-DRSNoise)
|
|
|
160
|
+ suite.LessOrEqual(size, TLSRecordSizeAccel)
|
|
159
|
161
|
}
|
|
160
|
162
|
}
|
|
161
|
163
|
|
|
162
|
164
|
func (suite *StatsTestSuite) TestSizeMaxPhase() {
|
|
163
|
|
- stats := &Stats{k: 1.0, lambda: 1.0}
|
|
|
165
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: true}
|
|
164
|
166
|
|
|
165
|
167
|
for range TLSCounterMaxAfter {
|
|
166
|
168
|
stats.Size()
|
|
|
@@ -173,7 +175,7 @@ func (suite *StatsTestSuite) TestSizeMaxPhase() {
|
|
173
|
175
|
}
|
|
174
|
176
|
|
|
175
|
177
|
func (suite *StatsTestSuite) TestSizeResetsAfterInactivity() {
|
|
176
|
|
- stats := &Stats{k: 1.0, lambda: 1.0}
|
|
|
178
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: true}
|
|
177
|
179
|
|
|
178
|
180
|
// Advance past start phase.
|
|
179
|
181
|
for range TLSCounterMaxAfter {
|
|
|
@@ -185,7 +187,30 @@ func (suite *StatsTestSuite) TestSizeResetsAfterInactivity() {
|
|
185
|
187
|
// Simulate inactivity by backdating sizeLastRequested.
|
|
186
|
188
|
stats.sizeLastRequested = time.Now().Add(-TLSRecordSizeResetAfter - time.Millisecond)
|
|
187
|
189
|
|
|
188
|
|
- suite.Equal(TLSRecordSizeStart, stats.Size())
|
|
|
190
|
+ size := stats.Size()
|
|
|
191
|
+ suite.GreaterOrEqual(size, TLSRecordSizeStart-DRSNoise)
|
|
|
192
|
+ suite.LessOrEqual(size, TLSRecordSizeStart)
|
|
|
193
|
+}
|
|
|
194
|
+
|
|
|
195
|
+func (suite *StatsTestSuite) TestSizeNoDRSAlwaysMax() {
|
|
|
196
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: false}
|
|
|
197
|
+
|
|
|
198
|
+ for range TLSCounterMaxAfter + 20 {
|
|
|
199
|
+ suite.Equal(TLSRecordSizeMax, stats.Size())
|
|
|
200
|
+ }
|
|
|
201
|
+}
|
|
|
202
|
+
|
|
|
203
|
+func (suite *StatsTestSuite) TestSizeNoDRSIgnoresCounter() {
|
|
|
204
|
+ stats := &Stats{k: 1.0, lambda: 1.0, drs: false}
|
|
|
205
|
+
|
|
|
206
|
+ // Even after many calls, always returns max.
|
|
|
207
|
+ for range 200 {
|
|
|
208
|
+ suite.Equal(TLSRecordSizeMax, stats.Size())
|
|
|
209
|
+ }
|
|
|
210
|
+
|
|
|
211
|
+ // Inactivity has no effect either.
|
|
|
212
|
+ stats.sizeLastRequested = time.Now().Add(-TLSRecordSizeResetAfter - time.Millisecond)
|
|
|
213
|
+ suite.Equal(TLSRecordSizeMax, stats.Size())
|
|
189
|
214
|
}
|
|
190
|
215
|
|
|
191
|
216
|
func TestStats(t *testing.T) {
|