Beispiel #1
0
def initialize_data_dir(trinity_config: TrinityConfig) -> None:
    should_create_data_dir = (
        not trinity_config.data_dir.exists() and
        is_under_path(trinity_config.trinity_root_dir, trinity_config.data_dir)
    )
    if should_create_data_dir:
        trinity_config.data_dir.mkdir(parents=True, exist_ok=True)
    elif not trinity_config.data_dir.exists():
        # we don't lazily create the base dir for non-default base directories.
        raise MissingPath(
            f"The base chain directory provided does not exist: `{str(trinity_config.data_dir)}`",
            trinity_config.data_dir,
        )

    # Logfile
    should_create_logdir = (
        not trinity_config.log_dir.exists() and
        (
            # If we're in the default path, always create the log directory
            is_under_path(trinity_config.trinity_root_dir, trinity_config.log_dir) or
            (
                # If we're in a custom path, create the log directory if the data dir is empty
                is_under_path(trinity_config.data_dir, trinity_config.log_dir) and
                not any(trinity_config.data_dir.iterdir())
            )
        )
    )
    if should_create_logdir:
        trinity_config.log_dir.mkdir(parents=True, exist_ok=True)
        trinity_config.logfile_path.touch()
    elif not trinity_config.log_dir.exists():
        # we don't lazily create the base dir for non-default base directories.
        raise MissingPath(
            "The base logging directory provided does not exist: `{0}`".format(
                trinity_config.log_dir,
            ),
            trinity_config.log_dir,
        )

    # Initialize chain, pid, ipc and enrdb directories
    os.makedirs(trinity_config.pid_dir, exist_ok=True)
    os.makedirs(trinity_config.ipc_dir, exist_ok=True)
    os.makedirs(trinity_config.node_db_dir, exist_ok=True)

    # Nodekey
    if trinity_config.nodekey is None:
        nodekey = ecies.generate_privkey()
        with open(trinity_config.nodekey_path, 'wb') as nodekey_file:
            nodekey_file.write(nodekey.to_bytes())
Beispiel #2
0
def xdg_trinity_root(monkeypatch, tmpdir):
    """
    Ensure proper test isolation as well as protecting the real directories.
    """
    trinity_root_dir = str(tmpdir.mkdir('trinity'))

    # The default path that pytest generates are too long to be allowed as
    # IPC Paths (hard UNIX rule). We are shorten them from something like:
    # /tmp/pytest-of-<username>/pytest-88/<test-name>_command1_0/trinity
    # to /tmp/pyt-<username>/88/<test-name>_command1_0/trinity

    fragment1 = 'pytest-of'
    fragment2 = 'pytest-'
    expected_fragments = (fragment1, fragment2)

    # If pytest ever changes the tmpdir generation layout, this breaks and we adapt
    is_expected_path = all(check_str in trinity_root_dir
                           for check_str in expected_fragments)
    assert is_expected_path, f"Unexpected pytest tmp dir: {trinity_root_dir}, expected fragments: {expected_fragments}"  # noqa: E501

    trinity_root_dir = trinity_root_dir.replace(fragment1,
                                                'pyt-').replace(fragment2, '')
    monkeypatch.setenv('XDG_TRINITY_ROOT', trinity_root_dir)

    assert not is_under_path(os.path.expandvars('$HOME'),
                             get_xdg_trinity_root())

    return Path(trinity_root_dir)
def test_creates_log_dir_in_non_default_data_dir_with_clean_folder(
        trinity_config):
    # log dir is not in default path, data dir has no other data/folders in it
    trinity_config.data_dir = trinity_config.trinity_root_dir.parent / "custom-data-dir"
    _manually_add_datadir(trinity_config)
    assert not is_under_path(trinity_config.trinity_root_dir,
                             trinity_config.log_dir)
    assert not is_under_path(trinity_config.trinity_root_dir,
                             trinity_config.data_dir)
    assert is_under_path(trinity_config.data_dir, trinity_config.log_dir)
    assert not any(trinity_config.data_dir.iterdir())
    assert not is_data_dir_initialized(trinity_config)

    # should create log dir
    initialize_data_dir(trinity_config)

    assert trinity_config.log_dir.exists()
Beispiel #4
0
def xdg_trinity_root(monkeypatch, tmpdir):
    """
    Ensure proper test isolation as well as protecting the real directories.
    """
    with tempfile.TemporaryDirectory() as tmp_dir:
        xdg_root_dir = Path(tmp_dir) / 'trinity'
        monkeypatch.setenv('XDG_TRINITY_ROOT', str(xdg_root_dir))
        assert not is_under_path(os.path.expandvars('$HOME'), get_xdg_trinity_root())
        yield xdg_root_dir
def test_ignore_log_dir_in_non_default_data_dir_with_dirty_folder(
        trinity_config):
    # log dir is not in default path, data dir has other data in it, and is missing logs folder
    trinity_config.data_dir = trinity_config.trinity_root_dir.parent / "custom-data-dir"
    _manually_add_datadir(trinity_config)
    assert not is_under_path(trinity_config.trinity_root_dir,
                             trinity_config.log_dir)
    assert is_under_path(trinity_config.data_dir, trinity_config.log_dir)
    file_in_data_dir = trinity_config.data_dir / "other_things_present"
    file_in_data_dir.touch()
    assert not trinity_config.log_dir.exists()
    assert not is_data_dir_initialized(trinity_config)

    # should *not* create log dir
    with pytest.raises(MissingPath, match="logging"):
        initialize_data_dir(trinity_config)

    assert not trinity_config.log_dir.exists()
def test_trinity_config_computed_properties_custom_xdg(tmpdir, xdg_trinity_root):
    alt_xdg_root = tmpdir.mkdir('trinity-custom')
    assert not is_under_path(alt_xdg_root, xdg_trinity_root)

    data_dir = get_data_dir_for_network_id(1, alt_xdg_root)
    trinity_config = TrinityConfig(trinity_root_dir=alt_xdg_root, network_id=1)

    assert trinity_config.network_id == 1
    assert trinity_config.data_dir == data_dir
    assert trinity_config.nodekey_path == get_nodekey_path(data_dir)
Beispiel #7
0
def xdg_trinity_root(monkeypatch, tmpdir):
    """
    Ensure proper test isolation as well as protecting the real directories.
    """
    dir_path = tmpdir.mkdir('trinity')
    monkeypatch.setenv('XDG_TRINITY_ROOT', str(dir_path))

    assert not is_under_path(os.path.expandvars('$HOME'),
                             get_xdg_trinity_root())

    return Path(str(dir_path))
def test_always_creates_logs_folder_in_default_dir(trinity_config):
    # log dir is in default path, data dir has other data in it, but is missing logs folder
    assert is_under_path(trinity_config.trinity_root_dir,
                         trinity_config.log_dir)
    _manually_add_datadir(trinity_config)
    file_in_data_dir = trinity_config.data_dir / "other_things_present"
    file_in_data_dir.touch()
    assert not trinity_config.log_dir.exists()
    assert not is_data_dir_initialized(trinity_config)

    # should create log dir
    initialize_data_dir(trinity_config)

    assert trinity_config.log_dir.exists()
Beispiel #9
0
def initialize_data_dir(trinity_config: TrinityConfig) -> None:
    should_create_data_dir = (not trinity_config.data_dir.exists()
                              and is_under_path(
                                  trinity_config.trinity_root_dir,
                                  trinity_config.data_dir))
    if should_create_data_dir:
        trinity_config.data_dir.mkdir(parents=True, exist_ok=True)
    elif not trinity_config.data_dir.exists():
        # we don't lazily create the base dir for non-default base directories.
        raise MissingPath(
            f"The base chain directory provided does not exist: `{str(trinity_config.data_dir)}`",
            trinity_config.data_dir,
        )

    # Logfile
    should_create_logdir = (not trinity_config.logdir_path.exists()
                            and is_under_path(trinity_config.trinity_root_dir,
                                              trinity_config.logdir_path))
    if should_create_logdir:
        trinity_config.logdir_path.mkdir(parents=True, exist_ok=True)
        trinity_config.logfile_path.touch()
    elif not trinity_config.logdir_path.exists():
        # we don't lazily create the base dir for non-default base directories.
        raise MissingPath(
            "The base logging directory provided does not exist: `{0}`".format(
                trinity_config.logdir_path, ),
            trinity_config.logdir_path,
        )

    # Chain data-dir
    os.makedirs(trinity_config.database_dir, exist_ok=True)

    # Nodekey
    if trinity_config.nodekey is None:
        nodekey = ecies.generate_privkey()
        with open(trinity_config.nodekey_path, 'wb') as nodekey_file:
            nodekey_file.write(nodekey.to_bytes())
Beispiel #10
0
def test_is_under_path(base_path, path, expected):
    actual = is_under_path(base_path, path)
    assert actual is expected