Skip to content

Commit 9d58388

Browse files
committed
feat(relay): enable HTTP compression using reqwest features that add an Accept-Encoding header by default.
1 parent 3740b2e commit 9d58388

File tree

4 files changed

+84
-1
lines changed

4 files changed

+84
-1
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-relay/Cargo.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ libp2p = { version = "0.54.1", features = [
3333
] }
3434
mithril-common = { path = "../mithril-common", features = ["full"] }
3535
mithril-doc = { path = "../internal/mithril-doc" }
36-
reqwest = { version = "0.12.12", features = ["json"] }
36+
reqwest = { version = "0.12.12", features = [
37+
"json",
38+
"gzip",
39+
"zstd",
40+
"deflate",
41+
"brotli"
42+
] }
3743
serde = { version = "1.0.217", features = ["derive"] }
3844
serde_json = "1.0.138"
3945
serde_yaml = "0.9.34"
@@ -48,6 +54,7 @@ tokio = { version = "1.43.0", features = ["full"] }
4854
warp = "0.3.7"
4955

5056
[dev-dependencies]
57+
httpmock = "0.7.0"
5158
slog-scope = "4.4.0"
5259
slog-term = "2.9.1"
5360

mithril-relay/src/relay/aggregator.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,42 @@ impl AggregatorRelay {
142142
self.peer.addr_peer.to_owned()
143143
}
144144
}
145+
146+
#[cfg(test)]
147+
mod tests {
148+
use httpmock::MockServer;
149+
150+
use crate::test_tools::TestLogger;
151+
152+
use super::*;
153+
154+
#[tokio::test]
155+
async fn sends_accept_encoding_header_with_correct_values() {
156+
let server = MockServer::start();
157+
server.mock(|when, then| {
158+
when.matches(|req| {
159+
let headers = req.headers.clone().expect("HTTP headers not found");
160+
let accept_encoding_header = headers
161+
.iter()
162+
.find(|(name, _values)| name.to_lowercase() == "accept-encoding")
163+
.expect("Accept-Encoding header not found");
164+
165+
let header_value = accept_encoding_header.clone().1;
166+
["gzip", "br", "deflate", "zstd"]
167+
.iter()
168+
.all(|&value| header_value.contains(value))
169+
});
170+
171+
then.status(201).body("ok");
172+
});
173+
let addr: Multiaddr = "/ip4/0.0.0.0/tcp/0".parse().unwrap();
174+
let relay = AggregatorRelay::start(&addr, &server.url(""), &TestLogger::stdout())
175+
.await
176+
.unwrap();
177+
178+
relay
179+
.notify_signature_to_aggregator(&RegisterSignatureMessage::dummy())
180+
.await
181+
.expect("Should succeed with Accept-Encoding header");
182+
}
183+
}

mithril-relay/src/relay/signer.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,3 +329,39 @@ mod handlers {
329329
}
330330
}
331331
}
332+
333+
#[cfg(test)]
334+
mod tests {
335+
use httpmock::MockServer;
336+
337+
use crate::test_tools::TestLogger;
338+
339+
use super::*;
340+
341+
#[tokio::test]
342+
async fn sends_accept_encoding_header_with_correct_values() {
343+
let server = MockServer::start();
344+
let mock = server.mock(|when, then| {
345+
when.matches(|req| {
346+
let headers = req.headers.clone().expect("HTTP headers not found");
347+
let accept_encoding_header = headers
348+
.iter()
349+
.find(|(name, _values)| name.to_lowercase() == "accept-encoding")
350+
.expect("Accept-Encoding header not found");
351+
352+
let header_value = accept_encoding_header.clone().1;
353+
["gzip", "br", "deflate", "zstd"]
354+
.iter()
355+
.all(|&value| header_value.contains(value))
356+
});
357+
358+
then.status(200).body("ok");
359+
});
360+
361+
handlers::aggregator_features_handler(TestLogger::stdout(), server.url(""))
362+
.await
363+
.unwrap();
364+
365+
mock.assert();
366+
}
367+
}

0 commit comments

Comments
 (0)