Skip to content

Instantly share code, notes, and snippets.

@jonasfj
Created August 17, 2015 17:17
Show Gist options
  • Save jonasfj/afff387249412e9c5e18 to your computer and use it in GitHub Desktop.
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.
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