def test_force_timout_for_collector_whoishost(self):
     """
     whoishost is a collector that has timeout, delay_min, and delay_max set. if a user specifies a default timeout,
     then the collector's default timeout is overwritten.
     """
     self.init_db()
     workspace = "unittest"
     # Initialize collector producer
     commands_queue = queue.Queue()
     producer = CollectorProducer(self._engine, commands_queue)
     parser = CollectorProducer.get_argument_parser(description="")
     collector_group = CollectorProducer.add_collector_argument_group(
         parser)
     producer.add_argparser_arguments(collector_group)
     # create database
     with self._engine.session_scope() as session:
         self.create_workspace(session=session, workspace=workspace)
     args = parser.parse_args(["-w", workspace, "--whoishost", "-T", "60"])
     arguments = vars(args)
     producer.init(arguments)
     # Check configuration
     self.assertEqual(1, len(producer._selected_collectors))
     self.assertEqual("whoishost", producer._selected_collectors[0].name)
     self.assertEqual(510,
                      producer._selected_collectors[0].instance.priority)
     self.assertEqual(60,
                      producer._selected_collectors[0].instance._timeout)
     self.assertEqual("whoishost",
                      producer._selected_collectors[0].instance._name)
     self.assertFalse(
         producer._selected_collectors[0].instance._active_collector)
     self.assertIsNone(
         producer._selected_collectors[0].instance._output_dir)
     self.assertEqual(
         1, producer._selected_collectors[0].instance._number_of_threads)
     self.assertFalse(producer._selected_collectors[0].instance._hashes)
     self.assertIsNone(
         producer._selected_collectors[0].instance._http_proxy)
     self.assertListEqual(
         [], producer._selected_collectors[0].instance._cookies)
     self.assertEqual(2,
                      producer._selected_collectors[0].instance._min_delay)
     self.assertEqual(5,
                      producer._selected_collectors[0].instance._max_delay)
     self.assertEqual(
         1, producer._selected_collectors[0].instance._max_threads)
     self.assertIsNone(
         producer._selected_collectors[0].instance._dns_server)
     self.assertIsNone(
         producer._selected_collectors[0].instance._user_agent)
     self.assertIsNone(producer._selected_collectors[0].instance._password)
     self.assertIsNone(
         producer._selected_collectors[0].instance._password_file)
     self.assertIsNone(producer._selected_collectors[0].instance._user)
     self.assertIsNone(producer._selected_collectors[0].instance._domain)
     self.assertIsNone(producer._selected_collectors[0].instance._user_file)
     self.assertIsNone(
         producer._selected_collectors[0].instance._combo_file)
     self.assertFalse(
         producer._selected_collectors[0].instance._proxychains)
     self.assertFalse(producer._selected_collectors[0].instance._analyze)
     self.assertListEqual(
         [], producer._selected_collectors[0].instance._whitelist_filter)
     self.assertListEqual(
         [], producer._selected_collectors[0].instance._blacklist_filter)
     self.assertFalse(producer._selected_collectors[0].instance._scan_tld)
     self.assertListEqual(
         [], producer._selected_collectors[0].instance._wordlist_files)
     self.assertFalse(
         producer._selected_collectors[0].instance._print_commands)
     self.assertEqual(
         "nobody",
         producer._selected_collectors[0].instance.exec_user.pw_name)
from database.config import Collector
from database.config import BaseConfig
from view.console import KisCollectConsole
from database.utils import Engine
from database.utils import DeclarativeBase
from collectors.os.collector import CollectorProducer
from database.model import DatabaseVersionMismatchError
from database.model import DatabaseUninitializationError


if __name__ == "__main__":
    try:
        engine = Engine()
        DeclarativeBase.metadata.bind = engine.engine
        commands_queue = queue.Queue()
        producer = CollectorProducer(engine, commands_queue)
        epilog='''---- USE CASES ----

use cases can be obtained from the following wiki page:

https://github.com/chopicalqui/KaliIntelligenceSuite/wiki/KIS-Use-Cases#kiscollect
'''
        parser = CollectorProducer.get_argument_parser(description=__doc__, epilog=epilog)
        collector_group = CollectorProducer.add_collector_argument_group(parser)
        producer.add_argparser_arguments(collector_group)

        args = parser.parse_args()
        # Check KIS' database status and version
        engine.perform_preflight_check(appy_patches=True, ask_user=True)
        if os.geteuid() != 0 and not args.print_commands:
            config = Collector()