diff --git a/.coveralls.yml b/.coveralls.yml deleted file mode 100644 index 5e6d9d7..0000000 --- a/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -repo_token: XyxRoyl77LZBeMVFP8GiM78qOqtXnQlXb diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index a369dad..3d906e1 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -34,8 +34,3 @@ jobs: file: ./coverage.xml name: codecov-umbrella fail_ci_if_error: true - - name: Coveralls - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - path-to-lcov: ./lcov.info diff --git a/tests/test_heuristics.rs b/tests/test_heuristics.rs index 9cb9b99..9f6a13b 100644 --- a/tests/test_heuristics.rs +++ b/tests/test_heuristics.rs @@ -207,3 +207,88 @@ fn heuristics_static_wildcard_request_with_dontfilter() -> Result<(), Box Result<(), Box> { + let srv = MockServer::start(); + let (tmp_dir, file) = setup_tmp_directory(&["LICENSE".to_string()], "wordlist")?; + + let mock = Mock::new() + .expect_method(GET) + .expect_path_matches(Regex::new("/[a-zA-Z0-9]{32}/").unwrap()) + .return_status(200) + .return_body("this is a testAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + .create_on(&srv); + + let mock2 = Mock::new() + .expect_method(GET) + .expect_path_matches(Regex::new("/[a-zA-Z0-9]{96}/").unwrap()) + .return_status(200) + .return_body("this is a testAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + .create_on(&srv); + + let cmd = Command::cargo_bin("feroxbuster") + .unwrap() + .arg("--url") + .arg(srv.url("/")) + .arg("--wordlist") + .arg(file.as_os_str()) + .arg("--addslash") + .unwrap(); + + teardown_tmp_directory(tmp_dir); + + cmd.assert().success().stdout( + predicate::str::contains("WLD") + .and(predicate::str::contains("Got")) + .and(predicate::str::contains("200")) + .and(predicate::str::contains("(url length: 32)")) + .and(predicate::str::contains("(url length: 96)")) + .and(predicate::str::contains("Wildcard response is static; auto-filtering 46")), + ); + + assert_eq!(mock.times_called(), 1); + assert_eq!(mock2.times_called(), 1); + Ok(()) +} + +#[test] +/// test finds a static wildcard and only reports the url to stdout +fn heuristics_wildcard_test_with_two_static_wildcards_with_quiet_enabled() -> Result<(), Box> { + let srv = MockServer::start(); + let (tmp_dir, file) = setup_tmp_directory(&["LICENSE".to_string()], "wordlist")?; + + let mock = Mock::new() + .expect_method(GET) + .expect_path_matches(Regex::new("/[a-zA-Z0-9]{32}/").unwrap()) + .return_status(200) + .return_body("this is a testAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + .create_on(&srv); + + let mock2 = Mock::new() + .expect_method(GET) + .expect_path_matches(Regex::new("/[a-zA-Z0-9]{96}/").unwrap()) + .return_status(200) + .return_body("this is a testAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + .create_on(&srv); + + let cmd = Command::cargo_bin("feroxbuster") + .unwrap() + .arg("--url") + .arg(srv.url("/")) + .arg("--wordlist") + .arg(file.as_os_str()) + .arg("--addslash") + .arg("-q") + .unwrap(); + + teardown_tmp_directory(tmp_dir); + + cmd.assert().success().stdout(predicate::str::is_empty()); + + + assert_eq!(mock.times_called(), 1); + assert_eq!(mock2.times_called(), 1); + Ok(()) +}