Skip to content

Commit

Permalink
Merge pull request #898 from rainlanguage/2024-09-27-add-order-cli-ra…
Browse files Browse the repository at this point in the history
…index-version-check

add order cli reindex version check
  • Loading branch information
rouzwelt authored Sep 30, 2024
2 parents 5c688ae + f753d37 commit e31b182
Showing 1 changed file with 59 additions and 4 deletions.
63 changes: 59 additions & 4 deletions crates/cli/src/commands/order/add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use rain_orderbook_app_settings::Config;
use rain_orderbook_common::add_order::AddOrderArgs;
use rain_orderbook_common::frontmatter::parse_frontmatter;
use rain_orderbook_common::transaction::TransactionArgs;
use rain_orderbook_common::GH_COMMIT_SHA;
use std::fs::read_to_string;
use std::ops::Deref;
use std::path::PathBuf;
Expand All @@ -30,12 +31,32 @@ pub struct CliOrderAddArgs {
/// Do NOT broadcast the transaction to the network, only simulate the transaction
#[arg(long, action = ArgAction::SetTrue)]
pub no_broadcast: bool,

/// Skips checking the `raindex-version` against this cli app current version
#[arg(long, action = ArgAction::SetTrue)]
pub skip_version_check: bool,
}

impl CliOrderAddArgs {
async fn to_add_order_args(&self) -> Result<AddOrderArgs> {
let text = read_to_string(&self.dotrain_file).map_err(|e| anyhow!(e))?;
let config: Config = parse_frontmatter(text.clone()).await?.try_into()?;

if !self.skip_version_check {
if let Some(ver) = config.raindex_version {
if ver.to_ascii_lowercase() != GH_COMMIT_SHA.to_ascii_lowercase() {
return Err(anyhow!(format!(
"mismatch raindex version: expected: {}, got: {}",
GH_COMMIT_SHA, ver
)));
}
} else {
return Err(anyhow!(
"missing 'raindex-version' field in .rain file frontmatter"
));
}
}

let config_deployment = config
.deployments
.get(&self.deployment)
Expand Down Expand Up @@ -82,7 +103,7 @@ mod tests {

#[tokio::test]
async fn test_to_add_order_args() {
let dotrain = get_dotrain();
let dotrain = get_dotrain(GH_COMMIT_SHA);

let dotrain_path = "./test_dotrain_add_order.rain";
std::fs::write(dotrain_path, dotrain).unwrap();
Expand All @@ -91,6 +112,7 @@ mod tests {
no_broadcast: false,
dotrain_file: dotrain_path.into(),
deployment: "some-deployment".to_string(),
skip_version_check: false,
transaction_args: CliTransactionArgs {
orderbook_address: Address::random(),
derivation_index: None,
Expand All @@ -104,7 +126,7 @@ mod tests {

let result = cli_order_add_args.to_add_order_args().await.unwrap();
let expected = AddOrderArgs {
dotrain: get_dotrain(),
dotrain: get_dotrain(GH_COMMIT_SHA),
inputs: vec![IO {
token: Address::from_str("0xc2132d05d31c914a87c6611c10748aeb04b58e8f").unwrap(),
decimals: 6,
Expand All @@ -124,7 +146,40 @@ mod tests {
std::fs::remove_file(dotrain_path).unwrap();
}

fn get_dotrain() -> String {
#[tokio::test]
async fn test_to_add_order_args_version_check_unhappy() {
let dotrain = get_dotrain("1234");

let dotrain_path = "./test_dotrain_add_order2.rain";
std::fs::write(dotrain_path, dotrain).unwrap();

let cli_order_add_args = CliOrderAddArgs {
no_broadcast: false,
dotrain_file: dotrain_path.into(),
deployment: "some-deployment".to_string(),
skip_version_check: false,
transaction_args: CliTransactionArgs {
orderbook_address: Address::random(),
derivation_index: None,
chain_id: Some(123),
rpc_url: "https://some-rpc.com".to_string(),
max_fee_per_gas: None,
max_priority_fee_per_gas: None,
gas_fee_speed: None,
},
};
let result = cli_order_add_args.to_add_order_args().await;

// rm test file
std::fs::remove_file(dotrain_path).unwrap();

assert!(result
.unwrap_err()
.to_string()
.contains("mismatch raindex version"));
}

fn get_dotrain(raindex_version: &str) -> String {
format!(
r#"
raindex-version: {raindex_version}
Expand Down Expand Up @@ -190,7 +245,7 @@ _ _: 0 0;
:;
#handle-add-order
:;"#,
raindex_version = "1234"
raindex_version = raindex_version
)
.to_string()
}
Expand Down

0 comments on commit e31b182

Please sign in to comment.