Ejemplo n.º 1
0
async def test_from_disk(tmp_path: pathlib.Path) -> None:
    path = tmp_path / "config.json"
    await concurrency.to_thread(
        path.write_text, '{"text_field": "value", '
        '"numeric_field": 123}')
    config = await config_lib.Config.from_disk(path)
    assert config == config_lib.Config(text_field="value", numeric_field=123)
Ejemplo n.º 2
0
 async def test_get(self) -> None:
     config = config_lib.Config(await
                                asyncio.wait_for(services.get_config(), 5))
     config["test"] = "test"
     r = await self.client.post("/config", json=config)
     self.assertEqual(r.status_code, 200)
     self.assertEqual((await asyncio.wait_for(services.get_config(),
                                              5))["test"], "test")
Ejemplo n.º 3
0
async def test_write(tmp_path: pathlib.Path) -> None:
    path = tmp_path / "config.json"
    config = config_lib.Config(text_field="value", numeric_field=123)
    await config.write_to_disk(path)
    config_text = await concurrency.to_thread(path.read_text)
    assert (config_text == "{\n"
            '    "numeric_field": 123,\n'
            '    "text_field": "value"\n'
            "}")
Ejemplo n.º 4
0
    async def test_save_path_loop(self) -> None:
        bad_link = pathlib.Path("bad_link")
        await concurrency.to_thread(bad_link.symlink_to,
                                    bad_link,
                                    target_is_directory=True)

        config = config_lib.Config(torrent_default_save_path=str(bad_link))
        with self.assertRaises(config_lib.InvalidConfigError):
            await asyncio.wait_for(services.set_config(config), 5)
Ejemplo n.º 5
0
def create_isolated_config() -> config_lib.Config:
    return config_lib.Config(
        session_enable_dht=False,
        session_enable_lsd=False,
        session_enable_natpmp=False,
        session_enable_upnp=False,
        session_listen_interfaces="127.0.0.1:0",
        session_alert_mask=0,
        session_dht_bootstrap_nodes="",
    )
Ejemplo n.º 6
0
async def lifespan(
        chdir_tmp_path: pathlib.Path,
        lifecycle: Any) -> AsyncIterator[asgi_lifespan.LifespanManager]:
    config = config_lib.Config(public_enable=False, )
    config.update(
        {f"session_{k}": v
         for k, v in get_isolated_settings().items()})
    await config.write_to_disk(services.CONFIG_PATH)
    async with asgi_lifespan.LifespanManager(app_lib.APP,
                                             startup_timeout=None,
                                             shutdown_timeout=None) as manager:
        yield manager
Ejemplo n.º 7
0
async def test_success() -> None:
    config = config_lib.Config(new=True)

    receiver1 = Receiver()
    receiver2 = Receiver()

    async with config_lib.stage_config(config, receiver1.stage_config,
                                       receiver2.stage_config):
        pass

    assert receiver1.config == config
    assert receiver2.config == config
Ejemplo n.º 8
0
async def test_fail() -> None:
    config = config_lib.Config(new=True)

    good_receiver = Receiver()
    fail_receiver = FailReceiver()

    # fail_receiver should cause an exception to be raised
    with pytest.raises(DummyException):
        async with config_lib.stage_config(config, good_receiver.stage_config,
                                           fail_receiver.stage_config):
            pass

    # fail_receiver should prevent good_receiver from updating
    assert good_receiver.config == config_lib.Config()

    # Order should be independent
    with pytest.raises(DummyException):
        async with config_lib.stage_config(config, fail_receiver.stage_config,
                                           good_receiver.stage_config):
            pass

    assert good_receiver.config == config_lib.Config()
Ejemplo n.º 9
0
    async def test_set_non_defaults(self) -> None:
        # Set all non-default configs
        config = config_lib.Config(
            torrent_default_save_path=self.tempdir.name,
            torrent_default_flags_apply_ip_filter=False,
            torrent_default_storage_mode="allocate",
        )
        await asyncio.wait_for(services.set_config(config), 5)

        atp = await asyncio.wait_for(atp_services.get_default(), 5)

        self.assertEqual(
            pathlib.Path(atp.save_path).resolve(),
            pathlib.Path(self.tempdir.name).resolve(),
        )
        self.assertEqual(
            atp.flags,
            lt.torrent_flags.default_flags & ~lt.torrent_flags.apply_ip_filter,
        )
        self.assertEqual(atp.storage_mode,
                         lt.storage_mode_t.storage_mode_allocate)
Ejemplo n.º 10
0
 async def test_alert_mask_invalid_type(self) -> None:
     with self.assertRaises(config_lib.InvalidConfigError):
         session_lib.SessionService(
             config=config_lib.Config(session_alert_mask="invalid")
         )
Ejemplo n.º 11
0
def test_require_str() -> None:
    config = config_lib.Config(key="value")
    assert config.require_str("key") == "value"
Ejemplo n.º 12
0
 def __init__(self) -> None:
     self.config = config_lib.Config()
Ejemplo n.º 13
0
def test_require_bool() -> None:
    config = config_lib.Config(key=True)
    assert config.require_bool("key") is True
Ejemplo n.º 14
0
def test_get_str() -> None:
    config = config_lib.Config(key="value")
    assert config.get_str("key") == "value"
Ejemplo n.º 15
0
def test_get_int() -> None:
    config = config_lib.Config(key=123)
    assert config.get_int("key") == 123
Ejemplo n.º 16
0
def test_get_bool_missing() -> None:
    config = config_lib.Config()
    assert config.get_bool("key") is None
Ejemplo n.º 17
0
def test_get_bool() -> None:
    config = config_lib.Config(key=True)
    assert config.get_bool("key") is True
Ejemplo n.º 18
0
 async def test_setting_invalid_type(self) -> None:
     with self.assertRaises(config_lib.InvalidConfigError):
         session_lib.SessionService(
             config=config_lib.Config(session_cache_size="invalid")
         )
Ejemplo n.º 19
0
 async def test_storage_mode_invalid(self) -> None:
     config = config_lib.Config(torrent_default_storage_mode="invalid")
     with self.assertRaises(config_lib.InvalidConfigError):
         await asyncio.wait_for(services.set_config(config), 5)
Ejemplo n.º 20
0
def test_get_bool_invalid() -> None:
    config = config_lib.Config(key=1)
    with pytest.raises(config_lib.InvalidConfigError):
        config.get_bool("key")
Ejemplo n.º 21
0
def test_require_int_invalid() -> None:
    config = config_lib.Config(key="not an int")
    with pytest.raises(config_lib.InvalidConfigError):
        config.require_int("key")
Ejemplo n.º 22
0
def test_require_int() -> None:
    config = config_lib.Config(key=123)
    assert config.require_int("key") == 123
Ejemplo n.º 23
0
 async def test_flags_apply_ip_filter_null(self) -> None:
     config = config_lib.Config(torrent_default_flags_apply_ip_filter=None)
     with self.assertRaises(config_lib.InvalidConfigError):
         await asyncio.wait_for(services.set_config(config), 5)
Ejemplo n.º 24
0
def test_require_str_missing() -> None:
    config = config_lib.Config()
    with pytest.raises(config_lib.InvalidConfigError):
        config.require_str("key")
Ejemplo n.º 25
0
def test_require_str_invalid() -> None:
    config = config_lib.Config(key=123)
    with pytest.raises(config_lib.InvalidConfigError):
        config.require_str("key")
Ejemplo n.º 26
0
 async def test_settings_base_invalid(self) -> None:
     with self.assertRaises(config_lib.InvalidConfigError):
         session_lib.SessionService(
             config=config_lib.Config(session_settings_base="invalid")
         )