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