From 6051a2b272e60cb51767e9c5ed77550a34fc76f1 Mon Sep 17 00:00:00 2001 From: Cecile Tonglet Date: Mon, 10 Feb 2020 13:21:21 +0100 Subject: [PATCH] Fix invalid argument order (#832) Make sure that --dev purge-chain is rejected ``` [0] [11:24:02] ~/r/polkadot master > ./target/debug/polkadot purge-chain --dev -y "/home/cecile/.local/share/polkadot/chains/dev/db" did not exist. [0] [11:25:36] ~/r/polkadot cecton-fix-invalid-argument-order > ./target/debug/polkadot --dev purge-chain -y error: Found argument 'purge-chain' which wasn't expected, or isn't valid in this context USAGE: polkadot --dev For more information try --help ``` --- polkadot/cli/src/cli.rs | 5 ++++ polkadot/tests/invalid_order_arguments.rs | 30 +++++++++++++++++++++++ polkadot/tests/purge_chain_works.rs | 1 + 3 files changed, 36 insertions(+) create mode 100644 polkadot/tests/invalid_order_arguments.rs diff --git a/polkadot/cli/src/cli.rs b/polkadot/cli/src/cli.rs index a7ffe0fff4..d63a9f903d 100644 --- a/polkadot/cli/src/cli.rs +++ b/polkadot/cli/src/cli.rs @@ -40,6 +40,11 @@ pub struct ValidationWorkerCommand { #[allow(missing_docs)] #[derive(Debug, StructOpt, Clone)] +#[structopt(settings = &[ + structopt::clap::AppSettings::GlobalVersion, + structopt::clap::AppSettings::ArgsNegateSubcommands, + structopt::clap::AppSettings::SubcommandsNegateReqs, +])] pub struct Cli { #[allow(missing_docs)] #[structopt(subcommand)] diff --git a/polkadot/tests/invalid_order_arguments.rs b/polkadot/tests/invalid_order_arguments.rs new file mode 100644 index 0000000000..8f3247bae2 --- /dev/null +++ b/polkadot/tests/invalid_order_arguments.rs @@ -0,0 +1,30 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use assert_cmd::cargo::cargo_bin; +use std::process::Command; + +#[test] +#[cfg(unix)] +fn invalid_order_arguments() { + let base_path = "invalid_order_arguments"; + + let status = Command::new(cargo_bin("polkadot")) + .args(&["--dev", "invalid_order_arguments", "-d", base_path, "-y"]) + .status() + .unwrap(); + assert!(!status.success()); +} diff --git a/polkadot/tests/purge_chain_works.rs b/polkadot/tests/purge_chain_works.rs index 157cd10f8e..5bd43ceeb8 100644 --- a/polkadot/tests/purge_chain_works.rs +++ b/polkadot/tests/purge_chain_works.rs @@ -41,6 +41,7 @@ fn purge_chain_works() { kill(Pid::from_raw(cmd.id().try_into().unwrap()), SIGINT).unwrap(); assert!(common::wait_for(&mut cmd, 30).map(|x| x.success()).unwrap_or_default()); + // Purge chain let status = Command::new(cargo_bin("polkadot")) .args(&["purge-chain", "--dev", "-d", base_path, "-y"]) .status()