mirror of
https://github.com/epi052/feroxbuster.git
synced 2026-05-29 18:51:12 -03:00
added recursive scan test
This commit is contained in:
@@ -8,6 +8,7 @@ use utils::{setup_tmp_directory, teardown_tmp_directory};
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_single_request_scan() -> Result<(), Box<dyn std::error::Error>> {
|
fn test_single_request_scan() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
env_logger::init();
|
||||||
let srv = MockServer::start();
|
let srv = MockServer::start();
|
||||||
let (tmp_dir, file) = setup_tmp_directory(&["LICENSE".to_string()])?;
|
let (tmp_dir, file) = setup_tmp_directory(&["LICENSE".to_string()])?;
|
||||||
|
|
||||||
@@ -24,6 +25,7 @@ fn test_single_request_scan() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
.arg(srv.url("/"))
|
.arg(srv.url("/"))
|
||||||
.arg("--wordlist")
|
.arg("--wordlist")
|
||||||
.arg(file.as_os_str())
|
.arg(file.as_os_str())
|
||||||
|
.arg("-vvvv")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
cmd.assert().success().stdout(
|
cmd.assert().success().stdout(
|
||||||
@@ -36,3 +38,70 @@ fn test_single_request_scan() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
teardown_tmp_directory(tmp_dir);
|
teardown_tmp_directory(tmp_dir);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn scanner_recursive_request_scan() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
env_logger::init();
|
||||||
|
let srv = MockServer::start();
|
||||||
|
let urls = [
|
||||||
|
"js".to_string(),
|
||||||
|
"prod".to_string(),
|
||||||
|
"dev".to_string(),
|
||||||
|
"file.js".to_string(),
|
||||||
|
];
|
||||||
|
let (tmp_dir, file) = setup_tmp_directory(&urls)?;
|
||||||
|
|
||||||
|
let js_mock = Mock::new()
|
||||||
|
.expect_method(GET)
|
||||||
|
.expect_path("/js")
|
||||||
|
.return_status(301)
|
||||||
|
.return_header("Location", &srv.url("/js/"))
|
||||||
|
.create_on(&srv);
|
||||||
|
|
||||||
|
let js_prod_mock = Mock::new()
|
||||||
|
.expect_method(GET)
|
||||||
|
.expect_path("/js/prod")
|
||||||
|
.return_status(301)
|
||||||
|
.return_header("Location", &srv.url("/js/prod/"))
|
||||||
|
.create_on(&srv);
|
||||||
|
|
||||||
|
let js_dev_mock = Mock::new()
|
||||||
|
.expect_method(GET)
|
||||||
|
.expect_path("/js/dev")
|
||||||
|
.return_status(301)
|
||||||
|
.return_header("Location", &srv.url("/js/dev/"))
|
||||||
|
.create_on(&srv);
|
||||||
|
|
||||||
|
let js_dev_file_mock = Mock::new()
|
||||||
|
.expect_method(GET)
|
||||||
|
.expect_path("/js/dev/file.js")
|
||||||
|
.return_status(200)
|
||||||
|
.return_body("this is a test and is more bytes than other ones")
|
||||||
|
.create_on(&srv);
|
||||||
|
|
||||||
|
let cmd = Command::cargo_bin("feroxbuster")
|
||||||
|
.unwrap()
|
||||||
|
.arg("--url")
|
||||||
|
.arg(srv.url("/"))
|
||||||
|
.arg("--wordlist")
|
||||||
|
.arg(file.as_os_str())
|
||||||
|
.arg("-vvvv")
|
||||||
|
.arg("-t")
|
||||||
|
.arg("1")
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
cmd.assert().success().stdout(
|
||||||
|
predicate::str::is_match("301.*js")
|
||||||
|
.unwrap()
|
||||||
|
.and(predicate::str::is_match("301.*js/prod").unwrap())
|
||||||
|
.and(predicate::str::is_match("301.*js/dev").unwrap())
|
||||||
|
.and(predicate::str::is_match("200.*js/dev/file.js").unwrap()),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(js_mock.times_called(), 1);
|
||||||
|
assert_eq!(js_prod_mock.times_called(), 1);
|
||||||
|
assert_eq!(js_dev_mock.times_called(), 1);
|
||||||
|
assert_eq!(js_dev_file_mock.times_called(), 1);
|
||||||
|
teardown_tmp_directory(tmp_dir);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user