tii 0.0.6

A Low-Latency Web Server.
Documentation
use crate::mock_stream::MockStream;
use std::io;
use std::sync::atomic::AtomicUsize;
use tii::HttpVersion;
use tii::RequestContext;
use tii::ResponseBody;
use tii::ServerBuilder;
use tii::TiiResult;
use tii::{Response, StatusCode};

mod mock_stream;

static COUNTER: AtomicUsize = AtomicUsize::new(0);

fn dummy_route(ctx: &RequestContext) -> TiiResult<Response> {
  COUNTER.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
  assert_eq!(HttpVersion::Http11, ctx.get_version());
  assert_eq!(ctx.get_header("Hdr"), Some("test"));

  Response::new(StatusCode::OK)
    .with_body(ResponseBody::from_slice("Okay!"))
    .with_header("Connection", "Close")
}

#[test]
pub fn tc3() {
  let server =
    ServerBuilder::default().router(|rt| rt.route_any("/dummy", dummy_route)).expect("ERR").build();

  let stream = MockStream::with_str("GET /dummy HTTP/1.1\r\nHdr: test\r\n\r\n");
  let con = stream.to_stream();
  let err = server.handle_connection(con).unwrap_err();
  assert_eq!(COUNTER.load(std::sync::atomic::Ordering::SeqCst), 1);
  assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
  assert_eq!(err.to_string(), "Endpoint has set banned header 'Connection'");
  let data = stream.copy_written_data_to_string();
  assert_eq!(data, "");
}