Skip to content

Commit 8757966

Browse files
committed
test(http-client): verify auth headers are sent on the wire
1 parent 84ae901 commit 8757966

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

dstack/http-client/src/lib.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,62 @@ mod tests {
140140
);
141141
Ok(())
142142
}
143+
144+
#[tokio::test]
145+
async fn http_transport_sends_extra_headers() -> Result<(), Box<dyn Error>> {
146+
let listener = TcpListener::bind("127.0.0.1:0").await?;
147+
let addr = listener.local_addr()?;
148+
let server = tokio::spawn(async move {
149+
let (mut socket, _) = listener.accept().await?;
150+
let mut buf = [0u8; 1024];
151+
let n = socket.read(&mut buf).await?;
152+
let request = String::from_utf8_lossy(&buf[..n]).into_owned();
153+
socket
154+
.write_all(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok")
155+
.await?;
156+
Ok::<_, std::io::Error>(request)
157+
});
158+
159+
let (status, _body) = http_request_with_headers(
160+
"POST",
161+
&format!("http://{addr}"),
162+
"/prpc/Status",
163+
b"{}",
164+
&[("Authorization", "Bearer secret-token")],
165+
)
166+
.await?;
167+
assert_eq!(status, 200);
168+
let request = server.await??;
169+
assert!(
170+
request.contains("authorization: Bearer secret-token")
171+
|| request.contains("Authorization: Bearer secret-token"),
172+
"request is missing the Authorization header: {request:?}"
173+
);
174+
Ok(())
175+
}
176+
177+
#[tokio::test]
178+
async fn http_transport_omits_headers_when_none() -> Result<(), Box<dyn Error>> {
179+
let listener = TcpListener::bind("127.0.0.1:0").await?;
180+
let addr = listener.local_addr()?;
181+
let server = tokio::spawn(async move {
182+
let (mut socket, _) = listener.accept().await?;
183+
let mut buf = [0u8; 1024];
184+
let n = socket.read(&mut buf).await?;
185+
let request = String::from_utf8_lossy(&buf[..n]).into_owned();
186+
socket
187+
.write_all(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nok")
188+
.await?;
189+
Ok::<_, std::io::Error>(request)
190+
});
191+
192+
let (status, _body) = http_request("GET", &format!("http://{addr}"), "/x", b"").await?;
193+
assert_eq!(status, 200);
194+
let request = server.await??;
195+
assert!(
196+
!request.to_lowercase().contains("authorization:"),
197+
"unexpected Authorization header: {request:?}"
198+
);
199+
Ok(())
200+
}
143201
}

0 commit comments

Comments
 (0)