subscan 1.3.0

A subdomain enumeration tool leveraging diverse techniques, designed for advanced pentesting operations
Documentation
use std::{path::PathBuf, str::FromStr};

use clap::Parser;
use subscan::{
    cli::Cli,
    constants::{
        DEFAULT_HTTP_TIMEOUT, DEFAULT_RESOLVER_CONCURRENCY, DEFAULT_RESOLVER_TIMEOUT,
        DEFAULT_USER_AGENT,
    },
};

#[tokio::test]
#[should_panic]
async fn module_run_parse_error_test() {
    Cli::try_parse_from(vec!["subscan", "module", "run", "-x"]).unwrap();
}

#[tokio::test]
async fn module_run_default_args_test() {
    let args = vec!["subscan", "module", "run", "foo", "-d", "bar.com"];
    let cli = Cli::try_parse_from(args).unwrap();

    match cli.command {
        subscan::cli::commands::Commands::Module(sub) => match sub.command {
            subscan::cli::commands::module::ModuleSubCommands::Run(args) => {
                assert!(!args.resolver_disabled);

                assert_eq!(args.domain, "bar.com");
                assert_eq!(args.name, "foo");
                assert_eq!(args.user_agent, DEFAULT_USER_AGENT);
                assert_eq!(args.proxy, None);
                assert_eq!(args.http_timeout, DEFAULT_HTTP_TIMEOUT.as_secs());
                assert_eq!(args.resolver_concurrency, DEFAULT_RESOLVER_CONCURRENCY);
                assert_eq!(
                    args.resolver_timeout,
                    DEFAULT_RESOLVER_TIMEOUT.as_millis() as u64
                );
            }
            _ => panic!("Expected ModuleSubCommands::Run"),
        },
        _ => panic!("Expected Commands::Module"),
    }
}

#[tokio::test]
async fn module_run_args_test() {
    #[rustfmt::skip]
    let args = vec![
        "subscan",
        "module",
        "run", "foo",
        "-d", "bar.com",
        "--user-agent", "foobar",
        "--proxy", "baz",
        "--http-timeout", "120",
        "--disable-ip-resolve",
        "--resolver-concurrency", "100",
        "--resolver-timeout", "10",
        "--resolver-list", "resolverlist.txt",
    ];

    let cli = Cli::try_parse_from(args).unwrap();

    match cli.command {
        subscan::cli::commands::Commands::Module(sub) => match sub.command {
            subscan::cli::commands::module::ModuleSubCommands::Run(args) => {
                assert!(args.resolver_disabled);

                assert_eq!(args.domain, "bar.com");
                assert_eq!(args.name, "foo");
                assert_eq!(args.user_agent, "foobar");
                assert_eq!(args.proxy, Some("baz".into()));
                assert_eq!(args.http_timeout, 120);
                assert_eq!(args.resolver_concurrency, 100);
                assert_eq!(args.resolver_timeout, 10);
                assert_eq!(
                    args.resolver_list,
                    Some(PathBuf::from_str("resolverlist.txt").unwrap())
                )
            }
            _ => panic!("Expected ModuleSubCommands::Run"),
        },
        _ => panic!("Expected Commands::Module"),
    }
}