Skip to content

Commit

Permalink
chore(infra): share get_absolute_path infra util with snapi test utils (
Browse files Browse the repository at this point in the history
  • Loading branch information
ArniStarkware authored Nov 21, 2024
1 parent b204349 commit 74b80c4
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 31 deletions.
5 changes: 5 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 12 additions & 4 deletions crates/infra_utils/src/path.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
use std::env;
use std::path::PathBuf;
use std::path::{Path, PathBuf};
use std::sync::LazyLock;

static PATH_TO_CARGO_MANIFEST_DIR: LazyLock<Option<PathBuf>> =
LazyLock::new(|| env::var("CARGO_MANIFEST_DIR").ok().map(|dir| Path::new(&dir).into()));

pub fn cargo_manifest_dir() -> Option<PathBuf> {
PATH_TO_CARGO_MANIFEST_DIR.clone()
}

// TODO(Tsabary/ Arni): consolidate with other get_absolute_path functions.
/// Resolves a relative path from the project root directory and returns its absolute path.
Expand All @@ -14,10 +22,10 @@ pub fn resolve_project_relative_path(relative_path: &str) -> PathBuf {
}

fn path_of_project_root() -> PathBuf {
env::var("CARGO_MANIFEST_DIR")
cargo_manifest_dir()
// Attempt to get the `CARGO_MANIFEST_DIR` environment variable and convert it to `PathBuf`.
// Ascend two directories ("../..") to get to the project root.
.map(|dir| PathBuf::from(dir).join("../.."))
.map(|dir| dir.join("../.."))
// If `CARGO_MANIFEST_DIR` isn't set, fall back to the current working directory
.unwrap_or_else(|_| env::current_dir().expect("Failed to get current directory"))
.unwrap_or(env::current_dir().expect("Failed to get current directory"))
}
1 change: 1 addition & 0 deletions crates/mempool_test_utils/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ workspace = true
[dependencies]
assert_matches.workspace = true
blockifier = { workspace = true, features = ["testing"] }
infra_utils.workspace = true
pretty_assertions.workspace = true
serde_json.workspace = true
starknet-types-core.workspace = true
Expand Down
6 changes: 4 additions & 2 deletions crates/mempool_test_utils/src/starknet_api_test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use std::sync::LazyLock;
use assert_matches::assert_matches;
use blockifier::test_utils::contracts::FeatureContract;
use blockifier::test_utils::{create_trivial_calldata, CairoVersion};
use infra_utils::path::resolve_project_relative_path;
use pretty_assertions::assert_ne;
use serde_json::to_string_pretty;
use starknet_api::block::GasPrice;
Expand All @@ -18,7 +19,7 @@ use starknet_api::rpc_transaction::{ContractClass, RpcDeployAccountTransactionV3
use starknet_api::test_utils::declare::rpc_declare_tx;
use starknet_api::test_utils::deploy_account::DeployAccountTxArgs;
use starknet_api::test_utils::invoke::{rpc_invoke_tx, InvokeTxArgs};
use starknet_api::test_utils::{get_absolute_path, NonceManager};
use starknet_api::test_utils::NonceManager;
use starknet_api::transaction::fields::{
AllResourceBounds,
ContractAddressSalt,
Expand Down Expand Up @@ -66,7 +67,8 @@ pub fn test_valid_resource_bounds() -> ValidResourceBounds {

/// Get the contract class used for testing.
pub fn contract_class() -> ContractClass {
env::set_current_dir(get_absolute_path(TEST_FILES_FOLDER)).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path(TEST_FILES_FOLDER))
.expect("Couldn't set working dir.");
let json_file_path = Path::new(CONTRACT_CLASS_FILE);
serde_json::from_reader(File::open(json_file_path).unwrap()).unwrap()
}
Expand Down
1 change: 1 addition & 0 deletions crates/papyrus_config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ validator = { workspace = true, features = ["derive"] }

[dev-dependencies]
assert_matches.workspace = true
infra_utils.workspace = true
itertools.workspace = true
lazy_static.workspace = true
papyrus_test_utils.workspace = true
Expand Down
4 changes: 2 additions & 2 deletions crates/papyrus_config/src/config_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ use std::time::Duration;

use assert_matches::assert_matches;
use clap::Command;
use infra_utils::path::resolve_project_relative_path;
use itertools::chain;
use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};
use serde_json::json;
use starknet_api::test_utils::get_absolute_path;
use tempfile::TempDir;
use validator::Validate;

Expand Down Expand Up @@ -52,7 +52,7 @@ use crate::{

lazy_static! {
static ref CUSTOM_CONFIG_PATH: PathBuf =
get_absolute_path("crates/papyrus_config/resources/custom_config_example.json");
resolve_project_relative_path("crates/papyrus_config/resources/custom_config_example.json");
}

#[derive(Clone, Copy, Default, Serialize, Deserialize, Debug, PartialEq, Validate)]
Expand Down
1 change: 1 addition & 0 deletions crates/papyrus_node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ tokio-stream = { workspace = true, optional = true }
[dev-dependencies]
assert-json-diff.workspace = true
colored.workspace = true
infra_utils.workspace = true
insta = { workspace = true, features = ["json"] }
metrics-exporter-prometheus.workspace = true
papyrus_test_utils.workspace = true
Expand Down
14 changes: 7 additions & 7 deletions crates/papyrus_node/src/config/config_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use std::str::FromStr;

use assert_json_diff::assert_json_eq;
use colored::Colorize;
use infra_utils::path::resolve_project_relative_path;
use itertools::Itertools;
use papyrus_base_layer::ethereum_base_layer_contract::EthereumBaseLayerConfig;
use papyrus_config::dumping::SerializeConfig;
Expand All @@ -18,7 +19,6 @@ use papyrus_monitoring_gateway::MonitoringGatewayConfig;
use pretty_assertions::assert_eq;
use serde_json::{json, Map, Value};
use starknet_api::core::ChainId;
use starknet_api::test_utils::get_absolute_path;
use tempfile::NamedTempFile;
use validator::Validate;

Expand Down Expand Up @@ -73,14 +73,14 @@ fn get_args(additional_args: Vec<&str>) -> Vec<String> {

#[test]
fn load_default_config() {
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
NodeConfig::load_and_process(get_args(vec![])).expect("Failed to load the config.");
}

#[test]
fn load_http_headers() {
let args = get_args(vec!["--central.http_headers", "NAME_1:VALUE_1 NAME_2:VALUE_2"]);
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
let config = NodeConfig::load_and_process(args).unwrap();
let target_http_headers = HashMap::from([
("NAME_1".to_string(), "VALUE_1".to_string()),
Expand All @@ -96,7 +96,7 @@ fn load_http_headers() {
// Regression test which checks that the default config dumping hasn't changed.
fn test_dump_default_config() {
let mut default_config = NodeConfig::default();
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
let dumped_default_config = default_config.dump();
insta::assert_json_snapshot!(dumped_default_config);

Expand All @@ -108,7 +108,7 @@ fn test_dump_default_config() {

#[test]
fn test_default_config_process() {
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
assert_eq!(NodeConfig::load_and_process(get_args(vec![])).unwrap(), NodeConfig::default());
}

Expand All @@ -120,7 +120,7 @@ fn test_update_dumped_config_by_command() {
"--storage.db_config.path_prefix",
"/abc",
]);
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
let config = NodeConfig::load_and_process(args).unwrap();

assert_eq!(config.central.retry_config.retry_max_delay_millis, 1234);
Expand All @@ -130,7 +130,7 @@ fn test_update_dumped_config_by_command() {
#[cfg(feature = "rpc")]
#[test]
fn default_config_file_is_up_to_date() {
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
let from_default_config_file: serde_json::Value =
serde_json::from_reader(File::open(DEFAULT_CONFIG_PATH).unwrap()).unwrap();

Expand Down
1 change: 1 addition & 0 deletions crates/starknet_api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ cairo-lang-runner.workspace = true
derive_more.workspace = true
hex.workspace = true
indexmap = { workspace = true, features = ["serde"] }
infra_utils.workspace = true
itertools.workspace = true
num-bigint.workspace = true
pretty_assertions.workspace = true
Expand Down
13 changes: 2 additions & 11 deletions crates/starknet_api/src/test_utils.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use std::collections::HashMap;
use std::env;
use std::fs::read_to_string;
use std::path::{Path, PathBuf};
use std::sync::LazyLock;

use infra_utils::path::cargo_manifest_dir;
use starknet_types_core::felt::Felt;

use crate::core::{ContractAddress, Nonce};
Expand All @@ -13,19 +12,11 @@ pub mod deploy_account;
pub mod invoke;
pub mod l1_handler;

static PATH_TO_CARGO_MANIFEST_DIR: LazyLock<PathBuf> =
LazyLock::new(|| Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).into());

/// Returns the absolute path from the project root.
pub fn get_absolute_path<P: AsRef<Path>>(relative_path: P) -> PathBuf {
PATH_TO_CARGO_MANIFEST_DIR.join("../..").join(relative_path)
}

/// Returns the path to a file in the resources directory. This assumes the current working
/// directory has a `resources` folder. The value for file_path should be the path to the required
/// file in the folder "resources".
pub fn path_in_resources<P: AsRef<Path>>(file_path: P) -> PathBuf {
PATH_TO_CARGO_MANIFEST_DIR.join("resources").join(file_path)
cargo_manifest_dir().unwrap().join("resources").join(file_path)
}

/// Reads from the directory containing the manifest at run time, same as current working directory.
Expand Down
1 change: 1 addition & 0 deletions crates/starknet_sequencer_node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ validator.workspace = true
assert-json-diff.workspace = true
assert_matches.workspace = true
colored.workspace = true
infra_utils.workspace = true
mempool_test_utils.workspace = true
pretty_assertions.workspace = true
serde_json.workspace = true
Expand Down
6 changes: 3 additions & 3 deletions crates/starknet_sequencer_node/src/config/config_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ use std::fs::File;
use assert_json_diff::assert_json_eq;
use assert_matches::assert_matches;
use colored::Colorize;
use infra_utils::path::resolve_project_relative_path;
use papyrus_config::dumping::SerializeConfig;
use papyrus_config::validators::config_validate;
use papyrus_config::SerializedParam;
use rstest::rstest;
use starknet_api::test_utils::get_absolute_path;
use starknet_sequencer_infra::component_definitions::{
LocalServerConfig,
RemoteClientConfig,
Expand Down Expand Up @@ -63,7 +63,7 @@ fn test_valid_component_execution_config(
/// cargo run --bin sequencer_dump_config -q
#[test]
fn test_default_config_file_is_up_to_date() {
env::set_current_dir(get_absolute_path("")).expect("Couldn't set working dir.");
env::set_current_dir(resolve_project_relative_path("")).expect("Couldn't set working dir.");
let from_default_config_file: serde_json::Value =
serde_json::from_reader(File::open(DEFAULT_CONFIG_PATH).unwrap()).unwrap();

Expand Down Expand Up @@ -115,7 +115,7 @@ fn test_config_parsing() {
#[test]
fn test_required_params_setting() {
// Load the default config file.
let file = std::fs::File::open(get_absolute_path(DEFAULT_CONFIG_PATH)).unwrap();
let file = std::fs::File::open(resolve_project_relative_path(DEFAULT_CONFIG_PATH)).unwrap();
let mut deserialized = serde_json::from_reader::<_, serde_json::Value>(file).unwrap();
let expected_required_params = deserialized.as_object_mut().unwrap();
expected_required_params.retain(|_, value| {
Expand Down
1 change: 1 addition & 0 deletions crates/starknet_sierra_compile/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@ validator.workspace = true

[dev-dependencies]
assert_matches.workspace = true
infra_utils.workspace = true
mempool_test_utils.workspace = true
rstest.workspace = true
5 changes: 3 additions & 2 deletions crates/starknet_sierra_compile/src/compile_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ use std::path::Path;

use assert_matches::assert_matches;
use cairo_lang_starknet_classes::contract_class::ContractClass;
use infra_utils::path::resolve_project_relative_path;
use mempool_test_utils::{FAULTY_ACCOUNT_CLASS_FILE, TEST_FILES_FOLDER};
use rstest::rstest;
use starknet_api::test_utils::get_absolute_path;

use crate::cairo_lang_compiler::CairoLangSierraToCasmCompiler;
use crate::command_line_compiler::CommandLineCompiler;
Expand All @@ -26,7 +26,8 @@ fn command_line_compiler() -> CommandLineCompiler {
CommandLineCompiler::new(SIERRA_TO_CASM_COMPILATION_CONFIG)
}
fn get_test_contract() -> ContractClass {
env::set_current_dir(get_absolute_path(TEST_FILES_FOLDER)).expect("Failed to set current dir.");
env::set_current_dir(resolve_project_relative_path(TEST_FILES_FOLDER))
.expect("Failed to set current dir.");
let sierra_path = Path::new(FAULTY_ACCOUNT_CLASS_FILE);
contract_class_from_file(sierra_path)
}
Expand Down

0 comments on commit 74b80c4

Please sign in to comment.