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())
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()
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)
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()
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())
def test_is_under_path(base_path, path, expected): actual = is_under_path(base_path, path) assert actual is expected