Created
August 17, 2015 17:17
-
-
Save jonasfj/afff387249412e9c5e18 to your computer and use it in GitHub Desktop.
Not sure how to close a `hyper::server::Server` after I've started listening, ideas? I want to make test cases where I make a request and handle it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate hawk; | |
extern crate hyper; | |
use std::thread; | |
use hyper::server::{Server, Request, Response, Listening}; | |
use std::net::Ipv4Addr; | |
use hyper::status::StatusCode; | |
use std::io::Write; | |
static PHRASE: &'static [u8] = b"Hello World!"; | |
struct Handler { | |
listening: Option<Listening>, | |
} | |
impl hyper::server::Handler for Handler { | |
fn handle(&self, req: Request, mut res: Response) { | |
*res.status_mut() = StatusCode::Ok; | |
let mut res2 = res.start().unwrap(); | |
res2.write(PHRASE).unwrap(); | |
//self.listening.unwrap().close(); // <-- doesn't work | |
} | |
} | |
fn start_server() -> thread::JoinHandle<bool> { | |
return thread::spawn(|| { | |
match Server::http((Ipv4Addr::new(127, 0, 0, 0), 59132)) { | |
Err(_) => return false, | |
Ok(server) => { | |
let mut handler = Handler{listening: None}; | |
match server.handle_threads(handler, 1) { | |
Err(_) => return false, | |
Ok(l) => { | |
handler.listening = Some(l); | |
//l.close(); // <-- doesn't work | |
}, | |
}; | |
}, | |
}; | |
return true; | |
}); | |
} | |
#[test] | |
fn make_request() { | |
let handle = start_server(); | |
match handle.join() { | |
Ok(true) => {}, | |
_ => assert!(false, "Server has an issue"), | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment