@@ -35,6 +35,11 @@ pub fn speed_test_tui(
35
35
36
36
// Run download tests
37
37
if options. should_download ( ) {
38
+ let _ = event_sender. send ( TestEvent :: TestPhaseStarted (
39
+ TestType :: Download ,
40
+ options. nr_tests ,
41
+ payload_sizes. clone ( ) ,
42
+ ) ) ;
38
43
measurements. extend ( run_tests_tui (
39
44
& client,
40
45
test_download,
@@ -48,6 +53,11 @@ pub fn speed_test_tui(
48
53
49
54
// Run upload tests
50
55
if options. should_upload ( ) {
56
+ let _ = event_sender. send ( TestEvent :: TestPhaseStarted (
57
+ TestType :: Upload ,
58
+ options. nr_tests ,
59
+ payload_sizes. clone ( ) ,
60
+ ) ) ;
51
61
measurements. extend ( run_tests_tui (
52
62
& client,
53
63
test_upload,
@@ -62,14 +72,20 @@ pub fn speed_test_tui(
62
72
let _ = event_sender. send ( TestEvent :: AllTestsCompleted ) ;
63
73
measurements
64
74
}
65
-
66
75
pub fn run_latency_test_tui (
67
76
client : & Client ,
68
77
nr_latency_tests : u32 ,
69
78
event_sender : Sender < TestEvent > ,
70
79
) -> ( Vec < f64 > , f64 ) {
71
80
let mut measurements: Vec < f64 > = Vec :: new ( ) ;
72
81
82
+ // Set latency phase
83
+ let _ = event_sender. send ( TestEvent :: TestPhaseStarted (
84
+ TestType :: Download , // Use Download as placeholder for latency
85
+ nr_latency_tests + 1 ,
86
+ vec ! [ 0 ] , // Single "payload size" for latency
87
+ ) ) ;
88
+
73
89
for _i in 0 ..=nr_latency_tests {
74
90
let latency = test_latency ( client) ;
75
91
measurements. push ( latency) ;
@@ -86,7 +102,6 @@ pub fn run_latency_test_tui(
86
102
let avg_latency = measurements. iter ( ) . sum :: < f64 > ( ) / measurements. len ( ) as f64 ;
87
103
( measurements, avg_latency)
88
104
}
89
-
90
105
pub fn run_tests_tui (
91
106
client : & Client ,
92
107
test_fn : fn ( & Client , usize , OutputFormat ) -> f64 ,
@@ -98,16 +113,22 @@ pub fn run_tests_tui(
98
113
) -> Vec < Measurement > {
99
114
let mut measurements: Vec < Measurement > = Vec :: new ( ) ;
100
115
101
- for payload_size in payload_sizes {
102
- let _ = event_sender. send ( TestEvent :: TestStarted ( test_type, payload_size) ) ;
116
+ for ( payload_index, payload_size) in payload_sizes. iter ( ) . enumerate ( ) {
117
+ let _ = event_sender. send ( TestEvent :: PayloadSizeStarted (
118
+ test_type,
119
+ * payload_size,
120
+ payload_index,
121
+ ) ) ;
103
122
104
123
let start = Instant :: now ( ) ;
105
124
for _i in 0 ..nr_tests {
106
- let mbit = test_fn ( client, payload_size, OutputFormat :: None ) ;
125
+ let _ = event_sender. send ( TestEvent :: TestStarted ( test_type, * payload_size) ) ;
126
+
127
+ let mbit = test_fn ( client, * payload_size, OutputFormat :: None ) ;
107
128
108
129
let measurement = Measurement {
109
130
test_type,
110
- payload_size,
131
+ payload_size : * payload_size ,
111
132
mbit,
112
133
} ;
113
134
measurements. push ( measurement. clone ( ) ) ;
@@ -116,23 +137,36 @@ pub fn run_tests_tui(
116
137
timestamp : Instant :: now ( ) ,
117
138
speed : mbit,
118
139
test_type,
119
- payload_size,
140
+ payload_size : * payload_size ,
120
141
} ) ) ;
121
142
122
- let _ = event_sender. send ( TestEvent :: TestCompleted ( test_type, payload_size) ) ;
143
+ let _ = event_sender. send ( TestEvent :: TestCompleted ( test_type, * payload_size) ) ;
123
144
124
145
// Small delay to make the UI updates visible
125
146
thread:: sleep ( Duration :: from_millis ( 100 ) ) ;
126
147
}
127
148
149
+ let _ = event_sender. send ( TestEvent :: PayloadSizeCompleted ( test_type, * payload_size) ) ;
150
+
128
151
let duration = start. elapsed ( ) ;
129
152
130
153
// Check time threshold for dynamic payload sizing
131
154
if !disable_dynamic_max_payload_size && duration > TIME_THRESHOLD {
132
155
log:: info!( "Exceeded threshold" ) ;
156
+ let _ = event_sender. send ( TestEvent :: TestsSkipped (
157
+ test_type,
158
+ "time limit exceeded" . to_string ( ) ,
159
+ ) ) ;
133
160
break ;
134
161
}
135
162
}
136
163
164
+ // Calculate average speed for this test type
165
+ if !measurements. is_empty ( ) {
166
+ let total_speed: f64 = measurements. iter ( ) . map ( |m| m. mbit ) . sum ( ) ;
167
+ let average_speed = total_speed / measurements. len ( ) as f64 ;
168
+ let _ = event_sender. send ( TestEvent :: TestPhaseCompleted ( test_type, average_speed) ) ;
169
+ }
170
+
137
171
measurements
138
172
}
0 commit comments