mirror of
https://github.com/laramies/theHarvester.git
synced 2026-08-22 05:42:22 +02:00
92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
from argparse import Namespace
|
|
|
|
import pytest
|
|
|
|
from theHarvester.lib.enumeration import (
|
|
DEFAULT_DNS_RECURSIVE_QUERY_LIMIT,
|
|
DEFAULT_DNS_RECURSIVE_RUNTIME_SECONDS,
|
|
DEFAULT_RESULT_LIMIT,
|
|
DEFAULT_SOURCE_WORKERS,
|
|
EnumerationOptions,
|
|
)
|
|
from theHarvester.lib.source_catalog import selected_action_names
|
|
|
|
|
|
def test_enumeration_options_fill_the_shared_execution_defaults() -> None:
|
|
options = EnumerationOptions.from_namespace(Namespace(domain='example.com', source='crtsh'))
|
|
|
|
assert options == EnumerationOptions(domain='example.com', source='crtsh')
|
|
assert options.limit == DEFAULT_RESULT_LIMIT == 500
|
|
assert options.start == 0
|
|
assert options.dns_recursive_query_limit == DEFAULT_DNS_RECURSIVE_QUERY_LIMIT is None
|
|
assert options.dns_recursive_runtime_seconds == DEFAULT_DNS_RECURSIVE_RUNTIME_SECONDS is None
|
|
assert options.source_workers == DEFAULT_SOURCE_WORKERS == 3
|
|
|
|
|
|
def test_enumeration_options_preserve_explicit_transport_values() -> None:
|
|
options = EnumerationOptions.from_namespace(
|
|
Namespace(
|
|
domain='example.com',
|
|
source='crtsh',
|
|
limit=25,
|
|
start=5,
|
|
proxies=True,
|
|
quiet=True,
|
|
screenshot='/tmp/managed-screenshots',
|
|
source_workers=7,
|
|
)
|
|
)
|
|
|
|
assert options.limit == 25
|
|
assert options.start == 5
|
|
assert options.proxies is True
|
|
assert options.quiet is True
|
|
assert options.screenshot == '/tmp/managed-screenshots'
|
|
assert options.source_workers == 7
|
|
|
|
|
|
def test_routeviews_is_an_explicit_passive_action_independent_of_source_limits() -> None:
|
|
options = EnumerationOptions.from_namespace(Namespace(domain='example.com', source=None, limit=25, routeviews=True))
|
|
|
|
assert options.routeviews is True
|
|
assert options.limit == 25
|
|
assert selected_action_names({'routeviews': True, 'limit': 1}) == ('routeviews',)
|
|
assert selected_action_names({'limit': 10_000}) == ()
|
|
|
|
|
|
def test_enumeration_options_preserve_virtual_host_inputs() -> None:
|
|
options = EnumerationOptions.from_namespace(
|
|
Namespace(
|
|
domain='example.com',
|
|
vhost=True,
|
|
vhost_endpoint='https://192.0.2.10/',
|
|
vhost_candidates=['admin.example.com', 'portal.example.com'],
|
|
vhost_request_limit=25,
|
|
vhost_runtime_seconds=10.0,
|
|
vhost_timeout_seconds=2.0,
|
|
vhost_concurrency=3,
|
|
vhost_insecure=True,
|
|
)
|
|
)
|
|
|
|
assert options.vhost is True
|
|
assert options.vhost_endpoint == 'https://192.0.2.10/'
|
|
assert options.vhost_candidates == ('admin.example.com', 'portal.example.com')
|
|
assert options.vhost_request_limit == 25
|
|
assert options.vhost_runtime_seconds == 10.0
|
|
assert options.vhost_timeout_seconds == 2.0
|
|
assert options.vhost_concurrency == 3
|
|
assert options.vhost_insecure is True
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'selection',
|
|
[
|
|
{'vhost': True},
|
|
{'vhost_endpoint': 'https://192.0.2.10/'},
|
|
{'vhost_candidates': ['admin.example.com']},
|
|
],
|
|
)
|
|
def test_virtual_host_inputs_select_the_direct_action(selection: dict[str, object]) -> None:
|
|
assert selected_action_names(selection) == ('vhost',)
|