mirror of
https://github.com/rwf2/Rocket.git
synced 2025-01-04 16:52:36 +00:00
5d9035ddc1
In brief, this commit: * Updates to the latest upstream 'cookie', fixing a memory leak. * Make changes to 'CookieJar' observable only through 'pending()'. * Deprecates 'Client::new()' in favor of 'Client::tracked()'. * Makes 'dispatch()' on tracked 'Client's synchronize on cookies. * Makes 'Client::untracked()' actually untracked. This commit updates to the latest 'cookie' which removes support for 'Sync' cookie jars. Instead of relying on 'cookie', this commit implements an op-log based 'CookieJar' which internally keeps track of changes. The API is such that changes are only observable through specialized '_pending()' methods.
54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
#[macro_use] extern crate rocket;
|
|
|
|
use rocket::local::blocking::Client;
|
|
|
|
// Test that manual/auto ranking works as expected.
|
|
|
|
#[get("/<_number>")]
|
|
fn get0(_number: u8) -> &'static str { "0" }
|
|
|
|
#[get("/<_number>", rank = 1)]
|
|
fn get1(_number: u16) -> &'static str { "1" }
|
|
|
|
#[get("/<_number>", rank = 2)]
|
|
fn get2(_number: u32) -> &'static str { "2" }
|
|
|
|
#[get("/<_number>", rank = 3)]
|
|
fn get3(_number: u64) -> &'static str { "3" }
|
|
|
|
#[test]
|
|
fn test_ranking() {
|
|
let rocket = rocket::ignite().mount("/", routes![get0, get1, get2, get3]);
|
|
let client = Client::tracked(rocket).unwrap();
|
|
|
|
let response = client.get("/0").dispatch();
|
|
assert_eq!(response.into_string().unwrap(), "0");
|
|
|
|
let response = client.get(format!("/{}", 1 << 8)).dispatch();
|
|
assert_eq!(response.into_string().unwrap(), "1");
|
|
|
|
let response = client.get(format!("/{}", 1 << 16)).dispatch();
|
|
assert_eq!(response.into_string().unwrap(), "2");
|
|
|
|
let response = client.get(format!("/{}", 1u64 << 32)).dispatch();
|
|
assert_eq!(response.into_string().unwrap(), "3");
|
|
}
|
|
|
|
// Test a collision due to same auto rank.
|
|
|
|
#[get("/<_n>")]
|
|
fn get0b(_n: u8) { }
|
|
|
|
#[test]
|
|
fn test_rank_collision() {
|
|
use rocket::error::LaunchErrorKind;
|
|
|
|
let rocket = rocket::ignite().mount("/", routes![get0, get0b]);
|
|
let client_result = Client::tracked(rocket);
|
|
match client_result.as_ref().map_err(|e| e.kind()) {
|
|
Err(LaunchErrorKind::Collision(..)) => { /* o.k. */ },
|
|
Ok(_) => panic!("client succeeded unexpectedly"),
|
|
Err(e) => panic!("expected collision, got {}", e)
|
|
}
|
|
}
|