chore(crimp): Prepare for depot merge
This commit is contained in:
parent
448cc5e1d4
commit
48c738b1b5
9 changed files with 0 additions and 150 deletions
152
net/crimp/src/tests.rs
Normal file
152
net/crimp/src/tests.rs
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
// All tests expect an httpbin instance to be available at
|
||||
// `http://localhost:4662`.
|
||||
//
|
||||
// This is easily spun up using Docker by running:
|
||||
//
|
||||
// docker run --rm -p 4662:80 kennethreitz/httpbin
|
||||
|
||||
use super::*;
|
||||
use serde_json::{Value, json};
|
||||
|
||||
// These tests check whether the correct HTTP method is used in the
|
||||
// requests.
|
||||
|
||||
#[test]
|
||||
fn test_http_get() {
|
||||
let resp = Request::get("http://127.0.0.1:4662/get")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert!(resp.is_success(), "request should have succeeded");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_http_delete() {
|
||||
let resp = Request::delete("http://127.0.0.1:4662/delete")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert_eq!(200, resp.status, "response status should be 200 OK");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_http_put() {
|
||||
let resp = Request::put("http://127.0.0.1:4662/put")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert_eq!(200, resp.status, "response status should be 200 OK");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_http_patch() {
|
||||
let resp = Request::patch("http://127.0.0.1:4662/patch")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert_eq!(200, resp.status, "response status should be 200 OK");
|
||||
}
|
||||
|
||||
// These tests perform various requests with different body payloads
|
||||
// and verify that those were received correctly by the remote side.
|
||||
|
||||
#[test]
|
||||
fn test_http_post() {
|
||||
let body = "test body";
|
||||
let response = Request::post("http://127.0.0.1:4662/post")
|
||||
.user_agent("crimp test suite").expect("failed to set user-agent")
|
||||
.timeout(Duration::from_secs(5)).expect("failed to set request timeout")
|
||||
.body("text/plain", &body.as_bytes())
|
||||
.send().expect("failed to send request")
|
||||
.as_json::<Value>().expect("failed to deserialize response");
|
||||
|
||||
let data = response.body;
|
||||
|
||||
assert_eq!(200, response.status, "response status should be 200 OK");
|
||||
|
||||
assert_eq!(data.get("data").unwrap(), &json!("test body"),
|
||||
"test body should have been POSTed");
|
||||
|
||||
assert_eq!(
|
||||
data.get("headers").unwrap().get("Content-Type").unwrap(),
|
||||
&json!("text/plain"),
|
||||
"Content-Type should be `text/plain`",
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(feature = "json")] #[test]
|
||||
fn test_http_post_json() {
|
||||
let body = json!({
|
||||
"purpose": "testing!"
|
||||
});
|
||||
|
||||
let response = Request::post("http://127.0.0.1:4662/post")
|
||||
.user_agent("crimp test suite").expect("failed to set user-agent")
|
||||
.timeout(Duration::from_secs(5)).expect("failed to set request timeout")
|
||||
.json(&body).expect("request serialization failed")
|
||||
.send().expect("failed to send request")
|
||||
.as_json::<Value>().expect("failed to deserialize response");
|
||||
|
||||
|
||||
let data = response.body;
|
||||
|
||||
assert_eq!(200, response.status, "response status should be 200 OK");
|
||||
|
||||
assert_eq!(data.get("json").unwrap(), &body,
|
||||
"test body should have been POSTed");
|
||||
|
||||
assert_eq!(
|
||||
data.get("headers").unwrap().get("Content-Type").unwrap(),
|
||||
&json!("application/json"),
|
||||
"Content-Type should be `application/json`",
|
||||
);
|
||||
}
|
||||
|
||||
// Tests for different authentication methods that are supported
|
||||
// out-of-the-box:
|
||||
|
||||
#[test]
|
||||
fn test_bearer_auth() {
|
||||
let response = Request::get("http://127.0.0.1:4662/bearer")
|
||||
.bearer_auth("some-token").expect("failed to set auth header")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert!(response.is_success(), "authorized request should succeed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_basic_auth() {
|
||||
let request = Request::get("http://127.0.0.1:4662/basic-auth/alan_watts/oneness");
|
||||
|
||||
let response = request
|
||||
.basic_auth("alan_watts", "oneness").expect("failed to set auth header")
|
||||
.send().expect("failed to send request");
|
||||
|
||||
assert!(response.is_success(), "authorized request should succeed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_large_body() {
|
||||
// By default cURL buffers seem to be 2^16 bytes in size. The test
|
||||
// size is therefore 2^16+1.
|
||||
const BODY_SIZE: usize = 65537;
|
||||
|
||||
let resp = Request::post("http://127.0.0.1:4662/post")
|
||||
.body("application/octet-stream", &[0; BODY_SIZE])
|
||||
.send().expect("sending request")
|
||||
.as_json::<Value>().expect("JSON deserialisation");
|
||||
|
||||
// httpbin returns the uploaded data as a string in the `data`
|
||||
// field.
|
||||
let data = resp.body.get("data").unwrap().as_str().unwrap();
|
||||
|
||||
assert_eq!(BODY_SIZE, data.len(), "uploaded data length should be correct");
|
||||
}
|
||||
|
||||
// Tests for various other features.
|
||||
|
||||
#[test]
|
||||
fn test_error_for_status() {
|
||||
let response = Request::get("http://127.0.0.1:4662/patch")
|
||||
.send().expect("failed to send request")
|
||||
.error_for_status(|resp| format!("Response error code: {}", resp.status));
|
||||
|
||||
assert_eq!(Err("Response error code: 405".into()), response,
|
||||
"returned error should be converted into Result::Err");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue