1 #![deny(warnings)]
2 extern crate pretty_env_logger;
3 extern crate warp;
4
5 use warp::Filter;
6
7 #[test]
exact()8 fn exact() {
9 let _ = pretty_env_logger::try_init();
10
11 let host = warp::header::exact("host", "localhost");
12
13 let req = warp::test::request().header("host", "localhost");
14
15 assert!(req.matches(&host));
16
17 let req = warp::test::request();
18 assert!(!req.matches(&host), "header missing");
19
20 let req = warp::test::request().header("host", "hyper.rs");
21 assert!(!req.matches(&host), "header value different");
22 }
23
24 #[test]
exact_rejections()25 fn exact_rejections() {
26 let _ = pretty_env_logger::try_init();
27
28 let host = warp::header::exact("host", "localhost").map(warp::reply);
29
30 let res = warp::test::request().header("host", "nope").reply(&host);
31
32 assert_eq!(res.status(), 400);
33 assert_eq!(res.body(), "Invalid request header 'host'");
34
35 let res = warp::test::request()
36 .header("not-even-a-host", "localhost")
37 .reply(&host);
38
39 assert_eq!(res.status(), 400);
40 assert_eq!(res.body(), "Missing request header 'host'");
41 }
42
43 #[test]
optional()44 fn optional() {
45 let _ = pretty_env_logger::try_init();
46
47 let con_len = warp::header::optional::<u64>("content-length");
48
49 let val = warp::test::request()
50 .filter(&con_len)
51 .expect("missing header matches");
52 assert_eq!(val, None);
53
54 let val = warp::test::request()
55 .header("content-length", "5")
56 .filter(&con_len)
57 .expect("existing header matches");
58
59 assert_eq!(val, Some(5));
60
61 assert!(
62 !warp::test::request()
63 .header("content-length", "boom")
64 .matches(&con_len),
65 "invalid optional header still rejects",
66 );
67 }
68