コード例 #1
0
async def test_copy(tmpdir):
    config = TriblerConfig(state_dir=tmpdir, file=tmpdir / '1.txt')
    config.api.http_port = 42

    cloned = config.copy()
    assert cloned.api.http_port == 42
    assert cloned.state_dir == tmpdir
    assert cloned.file == tmpdir / '1.txt'
コード例 #2
0
    async def setUp(self):
        """
        Create a new TriblerConfig instance
        """
        await super(TestTriblerConfig, self).setUp()

        self.tribler_config = TriblerConfig(self.getRootStateDir())

        self.assertIsNotNone(self.tribler_config)
コード例 #3
0
 def test_write_load(self):
     """
     When writing and reading a config the options should remain the same.
     """
     port = 4444
     self.tribler_config.set_anon_listen_port(port)
     self.tribler_config.write()
     path = self.tribler_config.get_state_dir() / CONFIG_FILENAME
     read_config = TriblerConfig(self.root_state_dir, config_file=path)
     self.assertEqual(read_config.get_anon_listen_port(), port)
コード例 #4
0
def test_write_load(tribler_config):
    """
    When writing and reading a config the options should remain the same.
    """
    port = 4444
    tribler_config.set_anon_listen_port(port)
    tribler_config.write()
    path = tribler_config.get_state_dir() / CONFIG_FILENAME
    read_config = TriblerConfig(path, config_file=path)
    assert read_config.get_anon_listen_port() == port
コード例 #5
0
async def test_load_write_nonascii(tmpdir):
    config = TriblerConfig(state_dir=tmpdir)
    filename = 'test_read_write.ini'

    config.download_defaults.saveas = 'ыюя'

    assert not config.file
    config.write(tmpdir / filename)
    assert config.file == tmpdir / filename

    config = TriblerConfig.load(file=tmpdir / filename, state_dir=tmpdir)

    assert config.download_defaults.saveas == 'ыюя'
    assert config.file == tmpdir / filename
コード例 #6
0
ファイル: extract_swagger.py プロジェクト: xoriole/tribler
async def extract_swagger(destination_fn):
    config = TriblerConfig()
    config.api.key = 'apikey'
    config.api.http_enabled = False
    config.api.https_enabled = False

    root_endpoint = RootEndpoint(
        middlewares=[ApiKeyMiddleware(config.api.key), error_middleware])
    api_manager = RESTManager(config=config.api,
                              root_endpoint=root_endpoint,
                              state_dir=config.state_dir)
    await api_manager.start()

    fp = StringIO()
    proto = aiohttp.web_protocol.RequestHandler(api_manager.runner._server,
                                                loop=get_event_loop())
    proto.connection_made(
        Mock(is_closing=lambda: False, write=lambda b: fp.write(b.decode())))
    proto.data_received(b'GET /docs/swagger.json HTTP/1.1\r\n'
                        b'Connection: close\r\n\r\n')
    await proto.start()
    api_spec = json.loads(fp.getvalue().split('\r\n\r\n')[1])

    # All responses should have a description
    for _, path in api_spec['paths'].items():
        for _, spec in path.items():
            for _, response in spec['responses'].items():
                if 'description' not in response:
                    response['description'] = ''
    # Convert to yaml
    with open(destination_fn, 'w') as destination_fp:
        destination_fp.write(yaml.dump(api_spec))
コード例 #7
0
ファイル: test_session.py プロジェクト: wsxy162/tribler
async def test_config_error_notification(tmpdir):
    """
    Test if config error is notified on session startup.
    """

    # 1. Setup corrupted config
    shutil.copy2(CONFIG_PATH / 'corrupt-triblerd.conf',
                 tmpdir / 'triblerd.conf')
    tribler_config = TriblerConfig(tmpdir,
                                   config_file=tmpdir / 'triblerd.conf',
                                   reset_config_on_error=True)

    # 2. Initialize session with corrupted config, disable upgrader for simplicity.
    # By mocking the notifier, we can check if the notify was called with correct parameters
    session = Session(tribler_config)
    session.upgrader_enabled = False
    session.notifier = Mock()

    # 3. Start the session which should internally call the notifier.
    await session.start()
    # Notifier uses asyncio loop internally, so we must wait at least a single loop cycle
    await asyncio.sleep(0)

    # 4. There could be multiple notify calls but we are only interested in the config error
    # so using 'assert_any_call' here to check if the notify was called.
    session.notifier.notify.assert_any_call(NTFY.REPORT_CONFIG_ERROR,
                                            tribler_config.config_error)

    # 5. Always shutdown the session at the end.
    await session.shutdown()
コード例 #8
0
def upgrade_state_dir(root_state_dir: Path,
                      update_status_callback=None,
                      interrupt_upgrade_event=None):
    # Before any upgrade, prepare a separate state directory for the update version so it does not
    # affect the older version state directory. This allows for safe rollback.
    version_history = VersionHistory(root_state_dir)
    version_history.fork_state_directory_if_necessary()
    version_history.save_if_necessary()
    state_dir = version_history.code_version.directory
    if not state_dir.exists():
        return

    config = TriblerConfig.load(file=state_dir / CONFIG_FILE_NAME,
                                state_dir=state_dir,
                                reset_config_on_error=True)
    channels_dir = config.chant.get_path_as_absolute('channels_dir',
                                                     config.state_dir)

    primary_private_key_path = config.state_dir / KeyComponent.get_private_key_filename(
        config)
    primary_public_key_path = config.state_dir / config.trustchain.ec_keypair_pubfilename
    primary_key = KeyComponent.load_or_create(primary_private_key_path,
                                              primary_public_key_path)

    upgrader = TriblerUpgrader(state_dir,
                               channels_dir,
                               primary_key,
                               update_status_callback=update_status_callback,
                               interrupt_upgrade_event=interrupt_upgrade_event)
    upgrader.run()
コード例 #9
0
def run_tribler_core_session(api_port,
                             api_key,
                             state_dir,
                             gui_test_mode=False):
    """
    This method will start a new Tribler session.
    Note that there is no direct communication between the GUI process and the core: all communication is performed
    through the HTTP API.
    """
    logger.info(f'Start tribler core. API port: "{api_port}". '
                f'API key: "{api_key}". State dir: "{state_dir}". '
                f'Core test mode: "{gui_test_mode}"')

    config = TriblerConfig.load(file=state_dir / CONFIG_FILE_NAME,
                                state_dir=state_dir,
                                reset_config_on_error=True)
    config.gui_test_mode = gui_test_mode

    if SentryReporter.is_in_test_mode():
        default_core_exception_handler.sentry_reporter.global_strategy = SentryStrategy.SEND_ALLOWED

    config.api.http_port = int(api_port)
    # If the API key is set to an empty string, it will remain disabled
    if config.api.key not in ('', api_key):
        config.api.key = api_key
        config.write(
        )  # Immediately write the API key so other applications can use it
    config.api.http_enabled = True

    priority_order = config.resource_monitor.cpu_priority
    set_process_priority(pid=os.getpid(), priority_order=priority_order)

    # Enable tracer if --trace-debug or --trace-exceptions flag is present in sys.argv
    log_dir = config.general.get_path_as_absolute('log_dir', config.state_dir)
    trace_logger = check_and_enable_code_tracing('core', log_dir)

    logging.getLogger('asyncio').setLevel(logging.WARNING)

    if sys.platform.startswith('win'):
        # TODO for the moment being, we use the SelectorEventLoop on Windows, since with the ProactorEventLoop, ipv8
        # peer discovery becomes unstable. Also see issue #5485.
        asyncio.set_event_loop(asyncio.SelectorEventLoop())

    loop = asyncio.get_event_loop()
    exception_handler = default_core_exception_handler
    loop.set_exception_handler(exception_handler.unhandled_error_observer)

    try:
        loop.run_until_complete(
            core_session(config, components=list(components_gen(config))))
    finally:
        if trace_logger:
            trace_logger.close()

        # Flush the logs to the file before exiting
        for handler in logging.getLogger().handlers:
            handler.flush()
コード例 #10
0
async def test_load_write(tmpdir):
    config = TriblerConfig(state_dir=tmpdir)
    filename = 'test_read_write.ini'

    config.general.log_dir = '1'
    config.general.version_checker_enabled = False
    config.libtorrent.port = None
    config.libtorrent.proxy_type = 2

    assert not config.file
    config.write(tmpdir / filename)
    assert config.file == tmpdir / filename

    config = TriblerConfig.load(file=tmpdir / filename, state_dir=tmpdir)
    assert config.general.log_dir == '1'
    assert config.general.version_checker_enabled is False
    assert config.libtorrent.port is None
    assert config.libtorrent.proxy_type == 2
    assert config.file == tmpdir / filename
コード例 #11
0
async def test_invalid_config_recovers(tmpdir):
    default_config_file = tmpdir / 'triblerd.conf'
    shutil.copy2(CONFIG_PATH / 'corrupt-triblerd.conf', default_config_file)

    # By default, recover_error set to False when loading the config file so
    # if the config file is corrupted, it should raise a ParseError.
    with pytest.raises(ParseError):
        TriblerConfig.load(file=default_config_file, state_dir=tmpdir)

    # If recover_error is set to True, the config should successfully load using
    # the default config in case of corrupted config file and the error is saved.
    config = TriblerConfig.load(file=default_config_file,
                                state_dir=tmpdir,
                                reset_config_on_error=True)
    assert "configobj.ParseError: Invalid line" in config.error

    # Since the config should be saved on previous recovery, subsequent instantiation of TriblerConfig
    # should work without the reset flag.
    config = TriblerConfig.load(file=default_config_file, state_dir=tmpdir)
    assert not config.error
コード例 #12
0
def make_config(options) -> TriblerConfig:
    # Determine ipv8 port
    ipv8_port = options.ipv8_port
    if ipv8_port == -1:
        if "HELPER_INDEX" in os.environ and "HELPER_BASE" in os.environ:
            base_port = int(os.environ["HELPER_BASE"])
            ipv8_port = base_port + int(os.environ["HELPER_INDEX"]) * 5
        else:
            raise ValueError(
                'ipv8_port option is not set, and HELPER_BASE/HELPER_INDEX env vars are not defined'
            )

    statedir = Path(
        os.path.join(get_root_state_directory(), "tunnel-%d") % ipv8_port)
    config = TriblerConfig.load(file=statedir / 'triblerd.conf',
                                state_dir=statedir)
    config.tunnel_community.random_slots = options.random_slots
    config.tunnel_community.competing_slots = options.competing_slots
    config.torrent_checking.enabled = False
    config.ipv8.enabled = True
    config.libtorrent.enabled = False
    config.ipv8.port = ipv8_port
    config.ipv8.address = options.ipv8_address
    config.dht.enabled = True
    config.tunnel_community.exitnode_enabled = bool(options.exit)
    config.popularity_community.enabled = False
    config.tunnel_community.testnet = bool(options.testnet)
    config.chant.enabled = False
    config.bootstrap.enabled = False

    if not options.no_rest_api:
        https = bool(options.cert_file)
        config.api.https_enabled = https
        config.api.http_enabled = not https
        config.api.key = options.api_key

        api_port = options.restapi
        if "HELPER_INDEX" in os.environ and "HELPER_BASE" in os.environ:
            api_port = int(os.environ["HELPER_BASE"]) + 10000 + int(
                os.environ["HELPER_INDEX"])
        if https:
            config.api.https_port = api_port
            config.api.put_path_as_relative('https_certfile',
                                            options.cert_file,
                                            config.state_dir)
        else:
            config.api.http_port = api_port
    else:
        config.api.https_enabled = False
        config.api.http_enabled = False

    if options.ipv8_bootstrap_override is not None:
        config.ipv8.bootstrap_override = options.ipv8_bootstrap_override
    return config
コード例 #13
0
async def test_get_path_relative(tmpdir):
    config = TriblerConfig(state_dir=tmpdir)
    config.general.log_dir = None
    assert not config.general.log_dir

    config.general.log_dir = '.'
    assert config.general.get_path_as_absolute('log_dir',
                                               tmpdir) == Path(tmpdir)

    config.general.log_dir = '1'
    assert config.general.get_path_as_absolute('log_dir',
                                               tmpdir) == Path(tmpdir) / '1'
コード例 #14
0
def test_convert_tribler_conf_76(tmpdir):
    """
    Tests conversion of the Tribler 7.5 config
    """
    shutil.copy2(CONFIG_PATH / 'triblerd75.conf', tmpdir / 'triblerd.conf')
    convert_config_to_tribler76(tmpdir)

    config = TriblerConfig.load(file=tmpdir / 'triblerd.conf',
                                state_dir=tmpdir)
    assert config.api.key == '7671750ba34423c97dc3c6763041e4cb'
    assert config.api.http_port == 8085
    assert config.api.http_enabled
    assert not config.api.https_enabled
コード例 #15
0
ファイル: initial_filling.py プロジェクト: xoriole/tribler
 def __init__(self, timeout_in_sec, working_dir):
     super().__init__(config=TriblerConfig(state_dir=working_dir),
                      timeout_in_sec=timeout_in_sec,
                      working_dir=working_dir,
                      components=[
                          SocksServersComponent(),
                          LibtorrentComponent(),
                          TorrentCheckerComponent(),
                          MetadataStoreComponent(),
                          KeyComponent(),
                          RESTComponent(),
                          Ipv8Component(),
                          ObservablePopularityComponent()
                      ])
コード例 #16
0
ファイル: disseminator.py プロジェクト: xoriole/tribler
 def __init__(self, source_dir, working_dir):
     super().__init__(TriblerConfig(state_dir=working_dir),
                      working_dir=working_dir,
                      components=[
                          RESTComponent(),
                          KeyComponent(),
                          SocksServersComponent(),
                          LibtorrentComponent(),
                          Ipv8Component(),
                          MetadataStoreComponent(),
                          GigachannelManagerComponent(),
                          GigaChannelComponent()
                      ])
     self.source_dir = Path(source_dir)
コード例 #17
0
async def fixture_rest_manager(api_port, tmp_path, endpoint):
    config = TriblerConfig()
    config.api.http_enabled = True
    config.api.http_port = api_port
    root_endpoint = RootEndpoint(
        middlewares=[ApiKeyMiddleware(config.api.key), error_middleware])
    root_endpoint.add_endpoint('/events', endpoint)
    rest_manager = RESTManager(config=config.api,
                               root_endpoint=root_endpoint,
                               state_dir=tmp_path)

    await rest_manager.start()
    yield rest_manager
    await rest_manager.stop()
コード例 #18
0
def test_convert_tribler_conf_76(tmpdir):
    """
    Tests conversion of the Tribler 7.5 config
    """
    shutil.copy2(CONFIG_PATH / 'triblerd75.conf', tmpdir / 'triblerd.conf')
    convert_config_to_tribler76(tmpdir)
    new_config = TriblerConfig(tmpdir, tmpdir / 'triblerd.conf')
    assert new_config.get_api_key() == '7671750ba34423c97dc3c6763041e4cb'
    assert new_config.get_api_http_port() == 8085
    assert new_config.get_api_http_enabled()
    assert not new_config.get_api_https_enabled()
コード例 #19
0
def _tribler_config(tribler_state_dir, tribler_download_dir) -> TriblerConfig:
    config = TriblerConfig(state_dir=tribler_state_dir)
    config.download_defaults.put_path_as_relative('saveas', tribler_download_dir, state_dir=tribler_state_dir)
    config.torrent_checking.enabled = False
    config.ipv8.enabled = False
    config.ipv8.walk_scaling_enabled = False
    config.discovery_community.enabled = False
    config.libtorrent.enabled = False
    config.libtorrent.dht_readiness_timeout = 0
    config.tunnel_community.enabled = False
    config.popularity_community.enabled = False
    config.dht.enabled = False
    config.libtorrent.dht = False
    config.chant.enabled = False
    config.resource_monitor.enabled = False
    config.bootstrap.enabled = False
    return config
コード例 #20
0
    async def setUp(self):
        await super(TestDHTSession, self).setUp()

        self.session = Session(TriblerConfig(self.root_state_dir))
        self.session.dlmgr = MockObject()
        self.session.dlmgr.dht_health_manager = MockObject()
        dht_health_dict = {
            "infohash": hexlify(b'a' * 20),
            "seeders": 1,
            "leechers": 2
        }
        self.session.dlmgr.dht_health_manager.get_health = lambda *_, **__: succeed(
            {"DHT": [dht_health_dict]})

        self.dht_session = FakeDHTSession(self.session, b'a' * 20, 10)
        self.bep33_dht_session = FakeBep33DHTSession(self.session, b'a' * 20,
                                                     10)
コード例 #21
0
async def torrent_checker(loop, mock_dlmgr, metadata_store):
    # Initialize the torrent checker
    config = TriblerConfig()
    config.download_defaults.number_hops = 0
    tracker_manager = MagicMock()
    tracker_manager.blacklist = []
    notifier = MagicMock()
    torrent_checker = TorrentChecker(
        config=config,
        download_manager=mock_dlmgr,
        tracker_manager=tracker_manager,
        metadata_store=metadata_store,
        notifier=notifier,
        socks_listen_ports=[2000, 3000],
    )
    await torrent_checker.initialize()
    yield torrent_checker
    await torrent_checker.shutdown()
コード例 #22
0
ファイル: run_tribler.py プロジェクト: wsxy162/tribler
    async def start_tribler():
        # Check if we are already running a Tribler instance
        process_checker = ProcessChecker(root_state_dir)
        if process_checker.already_running:
            return
        process_checker.create_lock_file()

        # Before any upgrade, prepare a separate state directory for the update version so it does not
        # affect the older version state directory. This allows for safe rollback.
        version_history = VersionHistory(root_state_dir)
        version_history.fork_state_directory_if_necessary()
        version_history.save_if_necessary()
        state_dir = version_history.code_version.directory

        config = TriblerConfig(state_dir,
                               config_file=state_dir / CONFIG_FILENAME,
                               reset_config_on_error=True)

        if not config.get_core_error_reporting_requires_user_consent():
            SentryReporter.global_strategy = SentryStrategy.SEND_ALLOWED

        config.set_api_http_port(int(api_port))
        # If the API key is set to an empty string, it will remain disabled
        if config.get_api_key() not in ('', api_key):
            config.set_api_key(api_key)
            config.write(
            )  # Immediately write the API key so other applications can use it
        config.set_api_http_enabled(True)

        priority_order = config.get_cpu_priority_order()
        set_process_priority(pid=os.getpid(), priority_order=priority_order)

        global trace_logger
        # Enable tracer if --trace-debug or --trace-exceptions flag is present in sys.argv
        trace_logger = check_and_enable_code_tracing('core',
                                                     config.get_log_dir())

        session = Session(config, core_test_mode=core_test_mode)

        signal.signal(signal.SIGTERM,
                      lambda signum, stack: shutdown(session, signum, stack))
        await session.start()
コード例 #23
0
ファイル: base.py プロジェクト: xoriole/tribler
    def __init__(self,
                 config: TriblerConfig = None,
                 components: List[Component] = (),
                 shutdown_event: Event = None,
                 notifier: Notifier = None,
                 failfast: bool = True):
        # deepcode ignore unguarded~next~call: not necessary to catch StopIteration on infinite iterator
        self.id = next(Session._next_session_id)
        self.failfast = failfast
        self.logger = logging.getLogger(self.__class__.__name__)
        self.config: TriblerConfig = config or TriblerConfig()
        self.shutdown_event: Event = shutdown_event or Event()
        self.notifier: Notifier = notifier or Notifier()
        self.components: Dict[Type[Component], Component] = {}
        for component in components:
            self.register(component.__class__, component)

        # Reserve various (possibly) fixed ports to prevent
        # components from occupying those accidentally
        reserve_ports([
            config.libtorrent.port, config.api.http_port,
            config.api.https_port, config.ipv8.port
        ])
コード例 #24
0
class TestTriblerConfig(TriblerCoreTest):
    """
    This class contains tests for the tribler configuration file.
    """
    async def setUp(self):
        """
        Create a new TriblerConfig instance
        """
        await super(TestTriblerConfig, self).setUp()

        self.tribler_config = TriblerConfig(self.getRootStateDir())

        self.assertIsNotNone(self.tribler_config)

    def test_init_without_config(self):
        """
        A newly created TriblerConfig is valid.
        """
        self.tribler_config.validate()

    def test_write_load(self):
        """
        When writing and reading a config the options should remain the same.
        """
        port = 4444
        self.tribler_config.set_anon_listen_port(port)
        self.tribler_config.write()
        path = self.tribler_config.get_state_dir() / CONFIG_FILENAME
        read_config = TriblerConfig(self.root_state_dir, config_file=path)
        self.assertEqual(read_config.get_anon_listen_port(), port)

    def test_load(self):
        self.tribler_config.get_state_dir().is_dir()

    def test_libtorrent_proxy_settings(self):
        """
        Setting and getting of libtorrent proxy settings.
        """
        proxy_type, server, auth = 3, ['33.33.33.33', '22'], ['user', 'pass']
        self.tribler_config.set_libtorrent_proxy_settings(
            proxy_type, ':'.join(server), ':'.join(auth))
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[0], proxy_type)
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[1], server)
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[2], auth)

        # if the proxy type doesn't support authentication, auth setting should be saved as None
        proxy_type = 1
        self.tribler_config.set_libtorrent_proxy_settings(
            proxy_type, ':'.join(server), ':'.join(auth))
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[0], proxy_type)
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[1], server)
        self.assertEqual(
            self.tribler_config.get_libtorrent_proxy_settings()[2], ['', ''])

    def test_anon_proxy_settings(self):
        proxy_type, server, auth = 3, ("33.33.33.33",
                                       [2222, 2223, 4443, 58848]), 1
        self.tribler_config.set_anon_proxy_settings(proxy_type, server, auth)

        self.assertEqual(self.tribler_config.get_anon_proxy_settings()[0],
                         proxy_type)
        self.assertEqual(self.tribler_config.get_anon_proxy_settings()[1],
                         server)
        self.assertEqual(self.tribler_config.get_anon_proxy_settings()[2],
                         auth)

        proxy_type = 1
        self.tribler_config.set_anon_proxy_settings(proxy_type, server, auth)

        self.assertEqual(self.tribler_config.get_anon_proxy_settings()[0],
                         proxy_type)
        self.assertEqual(self.tribler_config.get_anon_proxy_settings()[1],
                         server)
        self.assertIsNone(self.tribler_config.get_anon_proxy_settings()[2])

    def test_tunnel_community_socks5_listen_ports(self):
        ports = [5554, 9949, 9588, 35555, 84899]
        self.tribler_config.set_tunnel_community_socks5_listen_ports(ports)
        self.assertListEqual(
            self.tribler_config.get_tunnel_community_socks5_listen_ports(),
            ports)

    def test_bootstrap_configs(self):

        self.tribler_config.set_bootstrap_enabled(False)
        self.assertFalse(self.tribler_config.get_bootstrap_enabled())

        self.tribler_config.set_bootstrap_max_download_rate(20)
        self.assertEqual(self.tribler_config.get_bootstrap_max_download_rate(),
                         20)

        self.tribler_config.set_bootstrap_infohash("TestInfohash")
        self.assertEqual(self.tribler_config.get_bootstrap_infohash(),
                         "TestInfohash")

    def test_relative_paths(self):
        # Default should be taken from config.spec
        self.assertEqual(
            self.tribler_config.get_trustchain_keypair_filename(),
            path_util.abspath(self.state_dir / "ec_multichain.pem"))

        local_name = Path("somedir") / "ec_multichain.pem"
        global_name = self.state_dir / local_name
        self.tribler_config.set_trustchain_keypair_filename(global_name)

        # It should always return global path
        self.assertEqual(self.tribler_config.get_trustchain_keypair_filename(),
                         global_name)
        # But internally it should be stored as a local path string
        self.assertEqual(
            self.tribler_config.config['trustchain']['ec_keypair_filename'],
            str(local_name))

        # If it points out of the state dir, it should be saved as a global path string
        out_of_dir_name_global = path_util.abspath(self.state_dir / ".." /
                                                   "filename").resolve()
        self.tribler_config.set_trustchain_keypair_filename(
            out_of_dir_name_global)
        self.assertEqual(
            self.tribler_config.config['trustchain']['ec_keypair_filename'],
            str(out_of_dir_name_global))

    def test_get_set_methods_general(self):
        """
        Check whether general get and set methods are working as expected.
        """
        self.assertEqual(
            self.tribler_config.get_trustchain_testnet_keypair_filename(),
            self.tribler_config.get_state_dir() / "ec_trustchain_testnet.pem")
        self.tribler_config.set_trustchain_testnet_keypair_filename("bla2")
        self.assertEqual(
            self.tribler_config.get_trustchain_testnet_keypair_filename(),
            self.tribler_config.get_state_dir() / "bla2")

        self.tribler_config.set_testnet(True)
        self.assertTrue(self.tribler_config.get_testnet())

    def test_get_set_methods_version_checker(self):
        """
        Checks whether version checker get and set methods are working as expected.
        """
        # Default is always true
        self.assertTrue(self.tribler_config.get_version_checker_enabled())
        # Test disabling
        self.tribler_config.set_version_checker_enabled(False)
        self.assertFalse(self.tribler_config.get_version_checker_enabled())
        # Test enabling
        self.tribler_config.set_version_checker_enabled(True)
        self.assertTrue(self.tribler_config.get_version_checker_enabled())

    def test_get_set_methods_torrent_checking(self):
        """
        Check whether torrent checking get and set methods are working as expected.
        """
        self.tribler_config.set_torrent_checking_enabled(True)
        self.assertEqual(self.tribler_config.get_torrent_checking_enabled(),
                         True)

    def test_get_set_methods_http_api(self):
        """
        Check whether http api get and set methods are working as expected.
        """
        self.tribler_config.set_http_api_enabled(True)
        self.assertEqual(self.tribler_config.get_http_api_enabled(), True)
        self.tribler_config.set_http_api_port(True)
        self.assertEqual(self.tribler_config.get_http_api_port(), True)
        self.tribler_config.set_http_api_retry_port(True)
        self.assertTrue(self.tribler_config.get_http_api_retry_port())

    def test_get_set_methods_ipv8(self):
        """
        Check whether IPv8 get and set methods are working as expected.
        """
        self.tribler_config.set_ipv8_enabled(False)
        self.assertEqual(self.tribler_config.get_ipv8_enabled(), False)
        self.tribler_config.set_ipv8_port(1234)
        self.assertEqual(self.tribler_config.get_ipv8_port(), 1234)
        self.tribler_config.set_ipv8_bootstrap_override("127.0.0.1:12345")
        self.assertEqual(self.tribler_config.get_ipv8_bootstrap_override(),
                         ("127.0.0.1", 12345))
        self.tribler_config.set_ipv8_statistics(True)
        self.assertTrue(self.tribler_config.get_ipv8_statistics())

    def test_get_set_methods_libtorrent(self):
        """
        Check whether libtorrent get and set methods are working as expected.
        """
        self.tribler_config.set_libtorrent_enabled(True)
        self.assertEqual(self.tribler_config.get_libtorrent_enabled(), True)
        self.tribler_config.set_libtorrent_utp(True)
        self.assertEqual(self.tribler_config.get_libtorrent_utp(), True)
        self.tribler_config.set_libtorrent_port(True)
        self.assertEqual(self.tribler_config.get_libtorrent_port(), True)
        self.tribler_config.set_libtorrent_port_runtime(True)
        self.assertEqual(self.tribler_config.get_libtorrent_port(), True)
        self.tribler_config.set_anon_listen_port(True)
        self.assertEqual(self.tribler_config.get_anon_listen_port(), True)
        proxy_server, proxy_auth = ["localhost", "9090"], ["user", "pass"]
        self.tribler_config.set_libtorrent_proxy_settings(
            3, ":".join(proxy_server), ":".join(proxy_auth))
        self.assertEqual(self.tribler_config.get_libtorrent_proxy_settings(),
                         (3, proxy_server, proxy_auth))
        self.tribler_config.set_anon_proxy_settings(0, None, None)
        self.assertEqual(self.tribler_config.get_anon_proxy_settings(),
                         (0, (None, None), None))
        self.tribler_config.set_anon_proxy_settings(3, ("TEST", [5]),
                                                    ("TUN", "TPW"))
        self.assertEqual(self.tribler_config.get_anon_proxy_settings(),
                         (3, ("TEST", [5]), ("TUN", "TPW")))
        self.tribler_config.set_libtorrent_max_conn_download(True)
        self.assertEqual(
            self.tribler_config.get_libtorrent_max_conn_download(), True)
        self.tribler_config.set_libtorrent_max_upload_rate(True)
        self.assertEqual(self.tribler_config.get_libtorrent_max_upload_rate(),
                         True)
        self.tribler_config.set_libtorrent_max_download_rate(True)
        self.assertEqual(
            self.tribler_config.get_libtorrent_max_download_rate(), True)
        self.tribler_config.set_libtorrent_dht_enabled(False)
        self.assertFalse(self.tribler_config.get_libtorrent_dht_enabled())

    def test_get_set_methods_tunnel_community(self):
        """
        Check whether tunnel community get and set methods are working as expected.
        """
        self.tribler_config.set_tunnel_community_enabled(True)
        self.assertEqual(self.tribler_config.get_tunnel_community_enabled(),
                         True)
        self.tribler_config.set_tunnel_community_socks5_listen_ports([-1])
        self.assertNotEqual(
            self.tribler_config.get_tunnel_community_socks5_listen_ports(),
            [-1])
        self.tribler_config.set_tunnel_community_socks5_listen_ports([5])
        self.assertEqual(
            self.tribler_config.get_tunnel_community_socks5_listen_ports(),
            [5])
        self.tribler_config.set_tunnel_community_exitnode_enabled(True)
        self.assertEqual(
            self.tribler_config.get_tunnel_community_exitnode_enabled(), True)
        self.tribler_config.set_default_number_hops(True)
        self.assertEqual(self.tribler_config.get_default_number_hops(), True)
        self.tribler_config.set_default_anonymity_enabled(True)
        self.assertEqual(self.tribler_config.get_default_anonymity_enabled(),
                         True)
        self.tribler_config.set_default_safeseeding_enabled(True)
        self.assertEqual(self.tribler_config.get_default_safeseeding_enabled(),
                         True)
        self.tribler_config.set_default_destination_dir(get_home_dir())
        self.assertEqual(self.tribler_config.get_default_destination_dir(),
                         path_util.Path(get_home_dir()))
        self.tribler_config.set_tunnel_community_random_slots(10)
        self.assertEqual(
            self.tribler_config.get_tunnel_community_random_slots(), 10)
        self.tribler_config.set_tunnel_community_competing_slots(20)
        self.assertEqual(
            self.tribler_config.get_tunnel_community_competing_slots(), 20)

    def test_get_set_methods_wallets(self):
        """
        Check whether wallet get and set methods are working as expected.
        """
        self.tribler_config.set_dummy_wallets_enabled(True)
        self.assertTrue(self.tribler_config.get_dummy_wallets_enabled())
        self.tribler_config.set_bitcoinlib_enabled(False)
        self.assertFalse(self.tribler_config.get_bitcoinlib_enabled())

    def test_get_set_chant_methods(self):
        """
        Check whether chant get and set methods are working as expected.
        """
        self.tribler_config.set_chant_enabled(False)
        self.assertFalse(self.tribler_config.get_chant_enabled())
        self.tribler_config.set_chant_channels_dir('test')
        self.assertEqual(self.tribler_config.get_chant_channels_dir(),
                         self.tribler_config.get_state_dir() / 'test')

    def test_get_set_is_matchmaker(self):
        """
        Check whether matchmaker get and set methods are working as expected.
        """
        self.tribler_config.set_is_matchmaker(False)
        self.assertFalse(self.tribler_config.get_is_matchmaker())

    def test_get_set_methods_popularity_community(self):
        """
        Check whether popularity community get and set methods are working as expected.
        """
        self.tribler_config.set_popularity_community_enabled(True)
        self.assertEqual(
            self.tribler_config.get_popularity_community_enabled(), True)

    def test_get_set_methods_watch_folder(self):
        """
        Check whether watch folder get and set methods are working as expected.
        """
        self.tribler_config.set_watch_folder_enabled(True)
        self.assertEqual(self.tribler_config.get_watch_folder_enabled(), True)
        self.tribler_config.set_watch_folder_path(get_home_dir())
        self.assertEqual(self.tribler_config.get_watch_folder_path(),
                         get_home_dir())

    def test_get_set_methods_resource_monitor(self):
        """
        Check whether resource monitor get and set methods are working as expected.
        """
        self.assertTrue(self.tribler_config.get_resource_monitor_enabled())
        self.tribler_config.set_resource_monitor_enabled(False)
        self.assertFalse(self.tribler_config.get_resource_monitor_enabled())
        self.tribler_config.set_resource_monitor_poll_interval(21)
        self.assertEqual(
            self.tribler_config.get_resource_monitor_poll_interval(), 21)
        self.tribler_config.set_resource_monitor_history_size(1234)
        self.assertEqual(
            self.tribler_config.get_resource_monitor_history_size(), 1234)

        self.assertEqual(self.tribler_config.get_cpu_priority_order(), 1)
        self.tribler_config.set_cpu_priority_order(3)
        self.assertEqual(self.tribler_config.get_cpu_priority_order(), 3)

    def test_get_set_methods_dht(self):
        """
        Check whether dht get and set methods are working as expected.
        """
        self.tribler_config.set_dht_enabled(False)
        self.assertFalse(self.tribler_config.get_dht_enabled())

    def test_get_set_methods_record_transactions(self):
        """
        Check whether record_transactions get and set methods are working as expected.
        """
        self.tribler_config.set_record_transactions(True)
        self.assertTrue(self.tribler_config.get_record_transactions())

    def test_get_set_default_add_download_to_channel(self):
        """
        Check whether set/get methods of default add download to channel works.
        """
        self.assertEqual(
            self.tribler_config.get_default_add_download_to_channel(), False)
        self.tribler_config.set_default_add_download_to_channel(True)
        self.assertEqual(
            self.tribler_config.get_default_add_download_to_channel(), True)
コード例 #25
0
ファイル: conftest.py プロジェクト: wsxy162/tribler
def _tribler_config(tribler_state_dir, tribler_download_dir):
    config = TriblerConfig(tribler_state_dir)
    config.set_default_destination_dir(tribler_download_dir)
    config.set_torrent_checking_enabled(False)
    config.set_ipv8_enabled(False)
    config.set_discovery_community_enabled(False)
    config.set_ipv8_walk_scaling_enabled(False)
    config.set_libtorrent_enabled(False)
    config.set_libtorrent_dht_readiness_timeout(0)
    config.set_api_http_enabled(False)
    config.set_tunnel_community_enabled(False)
    config.set_popularity_community_enabled(False)
    config.set_dht_enabled(False)
    config.set_version_checker_enabled(False)
    config.set_libtorrent_dht_enabled(False)
    config.set_chant_enabled(False)
    config.set_resource_monitor_enabled(False)
    config.set_bootstrap_enabled(False)

    return config
コード例 #26
0
    async def start_tribler(self, options):
        """
        Main method to startup Tribler.
        """
        async def signal_handler(sig):
            print(f"Received shut down signal {sig}")
            if not self._stopping:
                self._stopping = True
                await self.session.shutdown()
                print("Tribler shut down")
                get_event_loop().stop()
                self.process_checker.remove_lock_file()

        signal.signal(signal.SIGINT,
                      lambda sig, _: ensure_future(signal_handler(sig)))
        signal.signal(signal.SIGTERM,
                      lambda sig, _: ensure_future(signal_handler(sig)))

        statedir = Path(options.statedir
                        or Path(get_appstate_dir(), '.Tribler'))
        config = TriblerConfig(statedir,
                               config_file=statedir / 'triblerd.conf')

        # Check if we are already running a Tribler instance
        self.process_checker = ProcessChecker()
        if self.process_checker.already_running:
            print(
                f"Another Tribler instance is already using statedir {config.get_state_dir()}"
            )
            get_event_loop().stop()
            return

        print("Starting Tribler")

        if options.restapi > 0:
            config.set_api_http_enabled(True)
            config.set_api_http_port(options.restapi)

        if options.ipv8 > 0:
            config.set_ipv8_port(options.ipv8)
        elif options.ipv8 == 0:
            config.set_ipv8_enabled(False)

        if options.libtorrent != -1 and options.libtorrent > 0:
            config.set_libtorrent_port(options.libtorrent)

        if options.ipv8_bootstrap_override is not None:
            config.set_ipv8_bootstrap_override(options.ipv8_bootstrap_override)

        if options.testnet:
            config.set_tunnel_testnet(True)
            config.set_chant_testnet(True)
            config.set_bandwidth_testnet(True)

        self.session = Session(config)
        try:
            await self.session.start()
        except Exception as e:
            print(str(e))
            get_event_loop().stop()
        else:
            print("Tribler started")
コード例 #27
0
                      [KeyComponent(), Ipv8Component(), BandwidthAccountingComponent(crawler_mode=True)])
    signal.signal(signal.SIGTERM, lambda signum, stack: session.shutdown_event.set)
    async with session.start():
        await session.shutdown_event.wait()


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description=('Start a crawler in the bandwidth accounting community'))
    parser.add_argument('--statedir', '-s', default='bw_crawler', type=str, help='Use an alternate statedir')
    parser.add_argument('--restapi', '-p', default=52194, type=int, help='Use an alternate port for the REST API',
                        action=PortAction, metavar='{0..65535}')
    args = parser.parse_args(sys.argv[1:])

    logging.basicConfig(level=logging.INFO)

    state_dir = Path(args.statedir).absolute()
    config = TriblerConfig.load(file=state_dir / 'triblerd.conf', state_dir=state_dir)

    config.tunnel_community.enabled = False
    config.libtorrent.enabled = False
    config.bootstrap.enabled = False
    config.chant.enabled = False
    config.torrent_checking.enabled = False
    config.api.http_enabled = True
    config.api.http_port = args.restapi
    config.bandwidth_accounting.outgoing_query_interval = 5

    loop = get_event_loop()
    ensure_future(crawler_session(config))
    loop.run_forever()
コード例 #28
0
    def start_tribler(self, options):
        """
        Main method to startup Tribler.
        """
        def on_tribler_shutdown(_):
            msg("Tribler shut down")
            reactor.stop()
            self.process_checker.remove_lock_file()

        def signal_handler(sig, _):
            msg("Received shut down signal %s" % sig)
            if not self._stopping:
                self._stopping = True
                self.session.shutdown().addCallback(on_tribler_shutdown)

        signal.signal(signal.SIGINT, signal_handler)
        signal.signal(signal.SIGTERM, signal_handler)

        config = TriblerConfig()

        self.process_checker = ProcessChecker()
        if self.process_checker.already_running:
            self.shutdown_process(
                "Another Tribler instance is already using statedir %s" %
                config.get_state_dir())
            return

        # Enable exitnode if set in options
        if "exitnode" in options and options["exitnode"]:
            msg("Enabling exitnode")
            config.set_tunnel_community_enabled(True)
            config.set_tunnel_community_exitnode_enabled(True)
        else:
            config.set_tunnel_community_exitnode_enabled(False)

        # Enable bitcoin testnet
        if "testnet" in options and options["testnet"]:
            msg("Enabling bitcoin testnet")
            config.set_testnet(True)

        # Enable dummy wallets
        if "dummy" in options and options["dummy"]:
            msg("Enabling dummy wallets")
            config.set_dummy_wallets_enabled(True)

        # Enable record transactions
        msg("Enabling record transactions")
        config.set_record_transactions(True)

        # Minimize functionality enabled for plebnet
        # For now, config taken from market_plugin in devos tribler repo
        config.set_http_api_enabled(True)
        config.set_video_server_enabled(False)
        config.set_torrent_search_enabled(False)
        config.set_channel_search_enabled(False)
        config.set_mainline_dht_enabled(True)
        config.set_dht_enabled(True)
        config.set_chant_enabled(False)
        config.set_bitcoinlib_enabled(True)

        msg("Starting Tribler")

        if options["statedir"]:
            config.set_state_dir(options["statedir"])

        if options["restapi"] > 0:
            config.set_http_api_enabled(True)
            config.set_http_api_port(options["restapi"])

        if options["dispersy"] != -1 and options["dispersy"] > 0:
            config.set_dispersy_port(options["dispersy"])

        if options["libtorrent"] != -1 and options["libtorrent"] > 0:
            config.set_libtorrent_port(options["libtorrent"])

        self.session = Session(config)
        self.session.start().addErrback(
            lambda failure: self.shutdown_process(failure.getErrorMessage()))

        msg("Tribler started")
コード例 #29
0
def tribler_config(tmp_path):
    config = TriblerConfig(tmp_path)
    return config
コード例 #30
0
    async def start(self, options):
        # Determine ipv8 port
        ipv8_port = options.ipv8_port
        if ipv8_port == -1 and "HELPER_INDEX" in os.environ and "HELPER_BASE" in os.environ:
            base_port = int(os.environ["HELPER_BASE"])
            ipv8_port = base_port + int(os.environ["HELPER_INDEX"]) * 5

        statedir = Path(
            os.path.join(get_root_state_directory(), "tunnel-%d") % ipv8_port)
        config = TriblerConfig(statedir,
                               config_file=statedir / 'triblerd.conf')
        config.set_tunnel_community_socks5_listen_ports([])
        config.set_tunnel_community_random_slots(options.random_slots)
        config.set_tunnel_community_competing_slots(options.competing_slots)
        config.set_torrent_checking_enabled(False)
        config.set_ipv8_enabled(True)
        config.set_libtorrent_enabled(False)
        config.set_ipv8_port(ipv8_port)
        config.set_ipv8_address(options.ipv8_address)
        config.set_trustchain_enabled(True)
        config.set_market_community_enabled(False)
        config.set_dht_enabled(True)
        config.set_tunnel_community_exitnode_enabled(bool(options.exit))
        config.set_popularity_community_enabled(False)
        config.set_testnet(bool(options.testnet))
        config.set_chant_enabled(False)
        config.set_bootstrap_enabled(False)

        if not options.no_rest_api:
            config.set_http_api_enabled(True)
            api_port = options.restapi
            if "HELPER_INDEX" in os.environ and "HELPER_BASE" in os.environ:
                api_port = int(os.environ["HELPER_BASE"]) + 10000 + int(
                    os.environ["HELPER_INDEX"])
            config.set_http_api_port(api_port)

        if options.ipv8_bootstrap_override is not None:
            config.set_ipv8_bootstrap_override(options.ipv8_bootstrap_override)

        self.session = Session(config)

        self.log_circuits = options.log_circuits
        self.session.notifier.add_observer(NTFY.TUNNEL_REMOVE,
                                           self.circuit_removed)

        await self.session.start()

        if options.log_rejects:
            # We set this after Tribler has started since the tunnel_community won't be available otherwise
            self.session.tunnel_community.reject_callback = self.on_circuit_reject

        # Tunnel helpers store more TrustChain blocks
        self.session.trustchain_community.settings.max_db_blocks = 5000000

        self.tribler_started()