Skip to content

Commit

Permalink
Add integration tests
Browse files Browse the repository at this point in the history
- for default fs permissions config
- for parsing custom fs permissions
- to resolve symlink permissions
  • Loading branch information
grandizzy committed Feb 7, 2024
1 parent 7e8259b commit 3f79c70
Showing 1 changed file with 79 additions and 2 deletions.
81 changes: 79 additions & 2 deletions crates/forge/tests/cli/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ use foundry_cli::utils as forge_utils;
use foundry_compilers::artifacts::{OptimizerDetails, RevertStrings, YulDetails};
use foundry_config::{
cache::{CachedChains, CachedEndpoints, StorageCachingConfig},
Config, FuzzConfig, InvariantConfig, SolcReq,
fs_permissions::{FsAccessPermission, PathPermission},
Config, FsPermissions, FuzzConfig, InvariantConfig, SolcReq,
};
use foundry_evm::opts::EvmOpts;
use foundry_test_utils::{
Expand All @@ -14,7 +15,11 @@ use foundry_test_utils::{
};
use path_slash::PathBufExt;
use pretty_assertions::assert_eq;
use std::{fs, path::PathBuf, str::FromStr};
use std::{
fs,
path::{Path, PathBuf},
str::FromStr,
};

// tests all config values that are in use
forgetest!(can_extract_config_values, |prj, cmd| {
Expand Down Expand Up @@ -625,3 +630,75 @@ forgetest_init!(can_skip_remappings_auto_detection, |prj, cmd| {
assert_eq!(config.remappings.len(), 1);
assert_eq!("remapping/=lib/remapping/", config.remappings[0].to_string());
});

forgetest_init!(can_parse_default_fs_permissions, |_prj, cmd| {
let config = cmd.config();

assert_eq!(config.fs_permissions.len(), 1);
let out_permission = config.fs_permissions.find_permission(Path::new("out")).unwrap();
assert_eq!(FsAccessPermission::Read, out_permission);
});

forgetest_init!(can_parse_custom_fs_permissions, |prj, cmd| {
// explicitly set fs permissions
let custom_permissions = FsPermissions::new(vec![
PathPermission::read("./read"),
PathPermission::write("./write"),
PathPermission::read_write("./write/contracts"),
]);

let config = Config { fs_permissions: custom_permissions, ..Default::default() };
prj.write_config(config);

let config = cmd.config();

assert_eq!(config.fs_permissions.len(), 3);

// check read permission
let permission = config.fs_permissions.find_permission(Path::new("./read")).unwrap();
assert_eq!(permission, FsAccessPermission::Read);
// check nested write permission
let permission =
config.fs_permissions.find_permission(Path::new("./write/MyContract.sol")).unwrap();
assert_eq!(permission, FsAccessPermission::Write);
// check nested read-write permission
let permission = config
.fs_permissions
.find_permission(Path::new("./write/contracts/MyContract.sol"))
.unwrap();
assert_eq!(permission, FsAccessPermission::ReadWrite);
// check no permission
let permission =
config.fs_permissions.find_permission(Path::new("./bogus")).unwrap_or_default();
assert_eq!(permission, FsAccessPermission::None);
});

#[cfg(not(target_os = "windows"))]
forgetest_init!(can_resolve_symlink_fs_permissions, |prj, cmd| {
// write config in packages/files/config.json
let packages_path = prj.root().join("packages");
fs::create_dir_all(&packages_path.join("files")).unwrap();
fs::write(&packages_path.join("files").join("config.json"), "{ enabled: true }").unwrap();

// symlink packages/files dir/ as links/
std::os::unix::fs::symlink(
Path::new("./packages/../packages/../packages/files"),
prj.root().join("links"),
)
.unwrap();

// write config, give read access to links/ symlink to packages/files/
let permissions = FsPermissions::new(vec![PathPermission::read(Path::new("./links"))]);
let config = Config { fs_permissions: permissions, ..Default::default() };
prj.write_config(config);

let config = cmd.config();
let mut fs_permissions = config.fs_permissions;
fs_permissions.join_all(prj.root());
assert_eq!(fs_permissions.len(), 1);

// read permission to file should be granted through sym link
let permission =
fs_permissions.find_permission(&packages_path.join("files").join("config.json")).unwrap();
assert_eq!(permission, FsAccessPermission::Read);
});

0 comments on commit 3f79c70

Please sign in to comment.