diff options
Diffstat (limited to 'src/tools/cargo/tests/testsuite/logout.rs')
-rw-r--r-- | src/tools/cargo/tests/testsuite/logout.rs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/logout.rs b/src/tools/cargo/tests/testsuite/logout.rs new file mode 100644 index 000000000..7b5e10de2 --- /dev/null +++ b/src/tools/cargo/tests/testsuite/logout.rs @@ -0,0 +1,104 @@ +//! Tests for the `cargo logout` command. + +use super::login::check_token; +use cargo_test_support::paths::{self, CargoPathExt}; +use cargo_test_support::registry::TestRegistry; +use cargo_test_support::{cargo_process, registry}; + +fn simple_logout_test(registry: &TestRegistry, reg: Option<&str>, flag: &str, note: &str) { + let msg = reg.unwrap_or("crates-io"); + check_token(Some(registry.token()), reg); + let mut cargo = cargo_process(&format!("logout {}", flag)); + if reg.is_none() { + cargo.replace_crates_io(registry.index_url()); + } + cargo + .with_stderr(&format!( + "\ +[LOGOUT] token for `{msg}` has been removed from local storage +[NOTE] This does not revoke the token on the registry server.\n \ +If you need to revoke the token, visit {note} and follow the instructions there. +" + )) + .run(); + check_token(None, reg); + + let mut cargo = cargo_process(&format!("logout {}", flag)); + if reg.is_none() { + cargo.replace_crates_io(registry.index_url()); + } + cargo + .with_stderr(&format!("[LOGOUT] not currently logged in to `{msg}`")) + .run(); + check_token(None, reg); +} + +#[cargo_test] +fn default_registry_unconfigured() { + let registry = registry::init(); + simple_logout_test(®istry, None, "", "<https://crates.io/me>"); +} + +#[cargo_test] +fn other_registry() { + let registry = registry::alt_init(); + simple_logout_test( + ®istry, + Some("alternative"), + "--registry alternative", + "the `alternative` website", + ); + // It should not touch crates.io. + check_token(Some("sekrit"), None); +} + +#[cargo_test] +fn default_registry_configured() { + // When registry.default is set, logout should use that one when + // --registry is not used. + let cargo_home = paths::home().join(".cargo"); + cargo_home.mkdir_p(); + cargo_util::paths::write( + &cargo_home.join("config.toml"), + r#" + [registry] + default = "dummy-registry" + + [registries.dummy-registry] + index = "https://127.0.0.1/index" + "#, + ) + .unwrap(); + cargo_util::paths::write( + &cargo_home.join("credentials.toml"), + r#" + [registry] + token = "crates-io-token" + + [registries.dummy-registry] + token = "dummy-token" + "#, + ) + .unwrap(); + check_token(Some("dummy-token"), Some("dummy-registry")); + check_token(Some("crates-io-token"), None); + + cargo_process("logout -Zunstable-options") + .masquerade_as_nightly_cargo(&["cargo-logout"]) + .with_stderr( + "\ +[LOGOUT] token for `dummy-registry` has been removed from local storage +[NOTE] This does not revoke the token on the registry server. + If you need to revoke the token, visit the `dummy-registry` website \ + and follow the instructions there. +", + ) + .run(); + check_token(None, Some("dummy-registry")); + check_token(Some("crates-io-token"), None); + + cargo_process("logout -Zunstable-options") + .masquerade_as_nightly_cargo(&["cargo-logout"]) + .with_stderr("[LOGOUT] not currently logged in to `dummy-registry`") + .run(); +} |