mirror of
https://github.com/ivre/masscanned.git
synced 2025-10-02 14:48:22 +00:00
Move HTTP tests into a module
This commit is contained in:
parent
dfb4707577
commit
c116c7bfdb
1 changed files with 117 additions and 112 deletions
|
@ -267,122 +267,127 @@ WWW-Authenticate: Basic realm=\"Access to admin page\"
|
||||||
Some(repl_data)
|
Some(repl_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[cfg(test)]
|
||||||
fn test_http_verb() {
|
mod tests {
|
||||||
/* all at once */
|
use super::*;
|
||||||
for verb in HTTP_VERBS.iter() {
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
http_parse(&mut pstate, &verb.as_bytes());
|
|
||||||
assert!(pstate.state == HTTP_STATE_SPACE);
|
|
||||||
assert!(pstate.smack_id == (HttpField::Verb as usize));
|
|
||||||
assert!(pstate.http_verb == verb.as_bytes());
|
|
||||||
}
|
|
||||||
/* byte by byte */
|
|
||||||
for verb in HTTP_VERBS.iter() {
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
for i in 0..verb.len() {
|
|
||||||
if i > 0 {
|
|
||||||
assert!(pstate.state == HTTP_STATE_VERB);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
}
|
|
||||||
http_parse(&mut pstate, &verb.as_bytes()[i..i + 1]);
|
|
||||||
}
|
|
||||||
assert!(pstate.state == HTTP_STATE_SPACE);
|
|
||||||
assert!(pstate.smack_id == (HttpField::Verb as usize));
|
|
||||||
assert!(pstate.http_verb == verb.as_bytes());
|
|
||||||
}
|
|
||||||
/* KO test: XXX */
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
http_parse(&mut pstate, "XXX".as_bytes());
|
|
||||||
assert!(pstate.state == HTTP_STATE_FAIL);
|
|
||||||
assert!(pstate.smack_state == UNANCHORED_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
/* KO test: XGET */
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
http_parse(&mut pstate, "XGET".as_bytes());
|
|
||||||
assert!(pstate.state == HTTP_STATE_FAIL);
|
|
||||||
assert!(pstate.smack_state == UNANCHORED_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
/* KO test: GEX */
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
http_parse(&mut pstate, "GEX".as_bytes());
|
|
||||||
assert!(pstate.state == HTTP_STATE_FAIL);
|
|
||||||
assert!(pstate.smack_state == UNANCHORED_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
/* KO test: GE T */
|
|
||||||
let mut pstate = ProtocolState::new();
|
|
||||||
assert!(pstate.state == HTTP_STATE_START);
|
|
||||||
assert!(pstate.smack_state == BASE_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
http_parse(&mut pstate, "GE T".as_bytes());
|
|
||||||
assert!(pstate.state == HTTP_STATE_FAIL);
|
|
||||||
assert!(pstate.smack_state == UNANCHORED_STATE);
|
|
||||||
assert!(pstate.smack_id == NO_MATCH);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_http_request_line() {
|
fn test_http_verb() {
|
||||||
let mut pstate = ProtocolState::new();
|
/* all at once */
|
||||||
let data = "GET /index.php HTTP/1.1\r\n".as_bytes();
|
for verb in HTTP_VERBS.iter() {
|
||||||
for i in 0..data.len() {
|
let mut pstate = ProtocolState::new();
|
||||||
http_parse(&mut pstate, &data[i..i + 1]);
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
if i < 2 {
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
assert!(pstate.state == HTTP_STATE_VERB);
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
} else if i == 2 {
|
http_parse(&mut pstate, &verb.as_bytes());
|
||||||
assert!(pstate.state == HTTP_STATE_SPACE);
|
assert!(pstate.state == HTTP_STATE_SPACE);
|
||||||
} else if 3 <= i && i <= 13 {
|
assert!(pstate.smack_id == (HttpField::Verb as usize));
|
||||||
assert!(pstate.state == HTTP_STATE_URI);
|
assert!(pstate.http_verb == verb.as_bytes());
|
||||||
} else if 14 <= i && i <= 19 {
|
}
|
||||||
assert!(pstate.state == HTTP_STATE_H + (i - 14));
|
/* byte by byte */
|
||||||
} else if i == 20 {
|
for verb in HTTP_VERBS.iter() {
|
||||||
assert!(pstate.state == HTTP_STATE_VERSION_MAJ);
|
let mut pstate = ProtocolState::new();
|
||||||
} else if 21 <= i && i <= 23 {
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
assert!(pstate.state == HTTP_STATE_VERSION_MIN);
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
} else if i == 24 {
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
for i in 0..verb.len() {
|
||||||
|
if i > 0 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_VERB);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
}
|
||||||
|
http_parse(&mut pstate, &verb.as_bytes()[i..i + 1]);
|
||||||
|
}
|
||||||
|
assert!(pstate.state == HTTP_STATE_SPACE);
|
||||||
|
assert!(pstate.smack_id == (HttpField::Verb as usize));
|
||||||
|
assert!(pstate.http_verb == verb.as_bytes());
|
||||||
|
}
|
||||||
|
/* KO test: XXX */
|
||||||
|
let mut pstate = ProtocolState::new();
|
||||||
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
http_parse(&mut pstate, "XXX".as_bytes());
|
||||||
|
assert!(pstate.state == HTTP_STATE_FAIL);
|
||||||
|
assert!(pstate.smack_state == UNANCHORED_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
/* KO test: XGET */
|
||||||
|
let mut pstate = ProtocolState::new();
|
||||||
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
http_parse(&mut pstate, "XGET".as_bytes());
|
||||||
|
assert!(pstate.state == HTTP_STATE_FAIL);
|
||||||
|
assert!(pstate.smack_state == UNANCHORED_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
/* KO test: GEX */
|
||||||
|
let mut pstate = ProtocolState::new();
|
||||||
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
http_parse(&mut pstate, "GEX".as_bytes());
|
||||||
|
assert!(pstate.state == HTTP_STATE_FAIL);
|
||||||
|
assert!(pstate.smack_state == UNANCHORED_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
/* KO test: GE T */
|
||||||
|
let mut pstate = ProtocolState::new();
|
||||||
|
assert!(pstate.state == HTTP_STATE_START);
|
||||||
|
assert!(pstate.smack_state == BASE_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
http_parse(&mut pstate, "GE T".as_bytes());
|
||||||
|
assert!(pstate.state == HTTP_STATE_FAIL);
|
||||||
|
assert!(pstate.smack_state == UNANCHORED_STATE);
|
||||||
|
assert!(pstate.smack_id == NO_MATCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_http_request_line() {
|
||||||
|
let mut pstate = ProtocolState::new();
|
||||||
|
let data = "GET /index.php HTTP/1.1\r\n".as_bytes();
|
||||||
|
for i in 0..data.len() {
|
||||||
|
http_parse(&mut pstate, &data[i..i + 1]);
|
||||||
|
if i < 2 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_VERB);
|
||||||
|
} else if i == 2 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_SPACE);
|
||||||
|
} else if 3 <= i && i <= 13 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_URI);
|
||||||
|
} else if 14 <= i && i <= 19 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_H + (i - 14));
|
||||||
|
} else if i == 20 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_VERSION_MAJ);
|
||||||
|
} else if 21 <= i && i <= 23 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_VERSION_MIN);
|
||||||
|
} else if i == 24 {
|
||||||
|
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_http_request_field() {
|
fn test_http_request_field() {
|
||||||
let mut pstate = ProtocolState::new();
|
let mut pstate = ProtocolState::new();
|
||||||
let req = "POST /index.php HTTP/2.0\r\n".as_bytes();
|
let req = "POST /index.php HTTP/2.0\r\n".as_bytes();
|
||||||
http_parse(&mut pstate, req);
|
http_parse(&mut pstate, req);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
||||||
let field = b"Content-Length";
|
let field = b"Content-Length";
|
||||||
http_parse(&mut pstate, field);
|
http_parse(&mut pstate, field);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_NAME);
|
assert!(pstate.state == HTTP_STATE_FIELD_NAME);
|
||||||
let dot = b": ";
|
let dot = b": ";
|
||||||
http_parse(&mut pstate, dot);
|
http_parse(&mut pstate, dot);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_VALUE);
|
assert!(pstate.state == HTTP_STATE_FIELD_VALUE);
|
||||||
let value = b": 0\r\n";
|
let value = b": 0\r\n";
|
||||||
http_parse(&mut pstate, value);
|
http_parse(&mut pstate, value);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_http_request_no_field() {
|
fn test_http_request_no_field() {
|
||||||
let mut pstate = ProtocolState::new();
|
let mut pstate = ProtocolState::new();
|
||||||
let req = "POST /index.php HTTP/2.0\r\n".as_bytes();
|
let req = "POST /index.php HTTP/2.0\r\n".as_bytes();
|
||||||
http_parse(&mut pstate, req);
|
http_parse(&mut pstate, req);
|
||||||
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
assert!(pstate.state == HTTP_STATE_FIELD_START);
|
||||||
let crlf = "\r\n".as_bytes();
|
let crlf = "\r\n".as_bytes();
|
||||||
http_parse(&mut pstate, crlf);
|
http_parse(&mut pstate, crlf);
|
||||||
assert!(pstate.state == HTTP_STATE_CONTENT);
|
assert!(pstate.state == HTTP_STATE_CONTENT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue