Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 8 additions & 18 deletions tonic/src/transport/channel/service/user_agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,20 +63,10 @@ where
}

fn call(&mut self, mut req: Request<ReqBody>) -> Self::Future {
if let Ok(Some(user_agent)) = req
.headers_mut()
.try_insert(USER_AGENT, self.user_agent.clone())
{
// The User-Agent header has already been set on the request. Let's
// append our user agent to the end.
let mut buf = Vec::new();
buf.extend(user_agent.as_bytes());
buf.push(b' ');
buf.extend(self.user_agent.as_bytes());
req.headers_mut().insert(
USER_AGENT,
HeaderValue::from_bytes(&buf).expect("user-agent should be valid"),
);
// Only set user-agent if not already present on the request.
if !req.headers().contains_key(USER_AGENT) {
req.headers_mut()
.insert(USER_AGENT, self.user_agent.clone());
}

self.inner.call(req)
Expand Down Expand Up @@ -150,12 +140,12 @@ mod tests {
}

#[tokio::test]
async fn appends_default_user_agent_to_request_user_agent() {
async fn preserves_request_user_agent_with_default() {
let mut req = Request::default();
req.headers_mut()
.insert(USER_AGENT, HeaderValue::from_static("request-ua/x.y"));

let expected_user_agent = format!("request-ua/x.y {TONIC_USER_AGENT}");
let expected_user_agent = "request-ua/x.y".to_string();
let mut ua = UserAgent::new(
TestSvc {
expected_user_agent,
Expand All @@ -166,12 +156,12 @@ mod tests {
}

#[tokio::test]
async fn appends_custom_user_agent_to_request_user_agent() {
async fn preserves_request_user_agent_with_custom() {
let mut req = Request::default();
req.headers_mut()
.insert(USER_AGENT, HeaderValue::from_static("request-ua/x.y"));

let expected_user_agent = format!("request-ua/x.y Greeter 1.1 {TONIC_USER_AGENT}");
let expected_user_agent = "request-ua/x.y".to_string();
let mut ua = UserAgent::new(
TestSvc {
expected_user_agent,
Expand Down
Loading