mirror of
https://github.com/rwf2/Rocket.git
synced 2025-01-05 17:22:36 +00:00
68b244ebdc
This changes core routing so that panics in all handlers are handled by emitting a long message explaining that panics are bad and invoking the 500 error catcher. If the 500 error catcher fails, Rocket's default 500 catcher is used.
57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
#[macro_use] extern crate rocket;
|
|
|
|
use rocket::Rocket;
|
|
use rocket::http::Status;
|
|
use rocket::local::blocking::Client;
|
|
|
|
#[get("/panic")]
|
|
fn panic_route() -> &'static str {
|
|
panic!("Panic in route")
|
|
}
|
|
|
|
#[catch(404)]
|
|
fn panic_catcher() -> &'static str {
|
|
panic!("Panic in catcher")
|
|
}
|
|
|
|
#[catch(500)]
|
|
fn ise() -> &'static str {
|
|
"Hey, sorry! :("
|
|
}
|
|
|
|
#[catch(500)]
|
|
fn double_panic() {
|
|
panic!("so, so sorry...")
|
|
}
|
|
|
|
fn rocket() -> Rocket {
|
|
rocket::ignite()
|
|
.mount("/", routes![panic_route])
|
|
.register(catchers![panic_catcher, ise])
|
|
}
|
|
|
|
#[test]
|
|
fn catches_route_panic() {
|
|
let client = Client::untracked(rocket()).unwrap();
|
|
let response = client.get("/panic").dispatch();
|
|
assert_eq!(response.status(), Status::InternalServerError);
|
|
assert_eq!(response.into_string().unwrap(), "Hey, sorry! :(");
|
|
|
|
}
|
|
#[test]
|
|
fn catches_catcher_panic() {
|
|
let client = Client::untracked(rocket()).unwrap();
|
|
let response = client.get("/noroute").dispatch();
|
|
assert_eq!(response.status(), Status::InternalServerError);
|
|
assert_eq!(response.into_string().unwrap(), "Hey, sorry! :(");
|
|
}
|
|
|
|
#[test]
|
|
fn catches_double_panic() {
|
|
let rocket = rocket().register(catchers![double_panic]);
|
|
let client = Client::untracked(rocket).unwrap();
|
|
let response = client.get("/noroute").dispatch();
|
|
assert_eq!(response.status(), Status::InternalServerError);
|
|
assert!(!response.into_string().unwrap().contains(":("));
|
|
}
|