-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test: Migrate git_auth to snapbox #14172
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,5 @@ | ||
//! Tests for git authentication. | ||
|
||
#![allow(deprecated)] | ||
|
||
use std::collections::HashSet; | ||
use std::io::prelude::*; | ||
use std::io::BufReader; | ||
|
@@ -12,7 +10,7 @@ use std::thread::{self, JoinHandle}; | |
|
||
use cargo_test_support::git::cargo_uses_gitoxide; | ||
use cargo_test_support::paths; | ||
use cargo_test_support::{basic_manifest, project}; | ||
use cargo_test_support::{basic_manifest, project, str}; | ||
|
||
fn setup_failed_auth_test() -> (SocketAddr, JoinHandle<()>, Arc<AtomicUsize>) { | ||
let server = TcpListener::bind("127.0.0.1:0").unwrap(); | ||
|
@@ -138,10 +136,10 @@ fn http_auth_offered() { | |
// may span multiple lines, and isn't relevant to this test. | ||
p.cargo("check") | ||
.with_status(101) | ||
.with_stderr_contains(&format!( | ||
.with_stderr_data(&format!( | ||
"\ | ||
[UPDATING] git repository `http://{addr}/foo/bar` | ||
[ERROR] failed to get `bar` as a dependency of package `foo v0.0.1 [..]` | ||
[ERROR] failed to get `bar` as a dependency of package `foo v0.0.1 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
failed to load source for dependency `bar` | ||
|
@@ -150,21 +148,29 @@ Caused by: | |
Unable to update http://{addr}/foo/bar | ||
|
||
Caused by: | ||
failed to clone into: [..] | ||
failed to clone into: [ROOT]/home/.cargo/git/db/bar-[HASH] | ||
|
||
Caused by: | ||
failed to authenticate when downloading repository | ||
|
||
* attempted to find username/password via `credential.helper`, but [..] | ||
* attempted to find username/password via `credential.helper`, but maybe the found credentials were incorrect | ||
|
||
if the git CLI succeeds then `net.git-fetch-with-cli` may help here | ||
https://[..] | ||
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli | ||
|
||
Caused by: | ||
" | ||
{trailer} | ||
", | ||
trailer = if cargo_uses_gitoxide() { | ||
format!(r#"[CREDENTIAL]s provided for "http://{addr}/foo/bar" were not accepted by the remote | ||
|
||
Caused by: | ||
Received HTTP status 401"#) | ||
} else { | ||
" no authentication methods succeeded".to_string() | ||
} | ||
)) | ||
.run(); | ||
|
||
assert_eq!(connections.load(SeqCst), 2); | ||
t.join().ok().unwrap(); | ||
} | ||
|
@@ -209,25 +215,42 @@ fn https_something_happens() { | |
|
||
p.cargo("check -v") | ||
.with_status(101) | ||
.with_stderr_contains(&format!( | ||
"[UPDATING] git repository `https://{addr}/foo/bar`" | ||
)) | ||
.with_stderr_contains(&format!( | ||
.with_stderr_data(&format!( | ||
"\ | ||
[UPDATING] git repository `https://{addr}/foo/bar` | ||
[ERROR] failed to get `bar` as a dependency of package `foo v0.0.1 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
failed to load source for dependency `bar` | ||
|
||
Caused by: | ||
Unable to update https://{addr}/foo/bar | ||
|
||
Caused by: | ||
{errmsg} | ||
failed to clone into: [ROOT]/home/.cargo/git/db/bar-[HASH] | ||
|
||
Caused by: | ||
{errmsg} | ||
", | ||
errmsg = if cargo_uses_gitoxide() { | ||
"[..]SSL connect error [..]" | ||
r" network failure seems to have happened | ||
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here | ||
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli | ||
|
||
Caused by: | ||
An IO error occurred when talking to the server | ||
|
||
Caused by: | ||
[35] SSL connect error ([..])" | ||
} else if cfg!(windows) { | ||
"[..]failed to send request: [..]" | ||
"[..]failed to send request: [..]\n..." | ||
} else if cfg!(target_os = "macos") { | ||
// macOS is difficult to tests as some builds may use Security.framework, | ||
// while others may use OpenSSL. In that case, let's just not verify the error | ||
// message here. | ||
"[..]" | ||
"..." | ||
} else { | ||
"[..]SSL error: [..]" | ||
"[..]SSL [ERROR][..]" | ||
} | ||
)) | ||
.run(); | ||
|
@@ -264,7 +287,7 @@ fn ssh_something_happens() { | |
.file("src/main.rs", "") | ||
.build(); | ||
|
||
let (expected_ssh_message, expected_update) = if cargo_uses_gitoxide() { | ||
let expected = if cargo_uses_gitoxide() { | ||
// Due to the usage of `ssh` and `ssh.exe` respectively, the messages change. | ||
// This will be adjusted to use `ssh2` to get rid of this dependency and have uniform messaging. | ||
let message = if cfg!(windows) { | ||
|
@@ -281,27 +304,47 @@ fn ssh_something_happens() { | |
} else { | ||
"[..]Connection [..] by [..]" | ||
}; | ||
( | ||
message, | ||
format!("[..]Unable to update ssh://{addr}/foo/bar"), | ||
format!( | ||
"\ | ||
[UPDATING] git repository `ssh://{addr}/foo/bar` | ||
... | ||
{message} | ||
... | ||
" | ||
) | ||
} else { | ||
( | ||
format!( | ||
"\ | ||
[UPDATING] git repository `ssh://{addr}/foo/bar` | ||
[ERROR] failed to get `bar` as a dependency of package `foo v0.0.1 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
[..]failed to start SSH session: Failed getting banner[..] | ||
", | ||
format!("[UPDATING] git repository `ssh://{addr}/foo/bar`"), | ||
failed to load source for dependency `bar` | ||
|
||
Caused by: | ||
Unable to update ssh://{addr}/foo/bar | ||
|
||
Caused by: | ||
failed to clone into: [ROOT]/home/.cargo/git/db/bar-[HASH] | ||
|
||
Caused by: | ||
network failure seems to have happened | ||
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here | ||
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli | ||
|
||
Caused by: | ||
failed to start SSH session: Failed getting banner; class=Ssh (23) | ||
" | ||
) | ||
}; | ||
p.cargo("check -v") | ||
.with_status(101) | ||
.with_stderr_contains(&expected_update) | ||
.with_stderr_contains(expected_ssh_message) | ||
.with_stderr_data(expected) | ||
.run(); | ||
t.join().ok().unwrap(); | ||
} | ||
|
||
#[allow(deprecated)] | ||
#[cargo_test] | ||
fn net_err_suggests_fetch_with_cli() { | ||
let p = project() | ||
|
@@ -323,13 +366,13 @@ fn net_err_suggests_fetch_with_cli() { | |
|
||
p.cargo("check -v") | ||
.with_status(101) | ||
.with_stderr(format!( | ||
.with_stderr_data(format!( | ||
"\ | ||
[UPDATING] git repository `ssh://needs-proxy.invalid/git` | ||
warning: spurious network error[..] | ||
warning: spurious network error[..] | ||
warning: spurious network error[..] | ||
[ERROR] failed to get `foo` as a dependency of package `foo v0.0.0 [..]` | ||
[WARNING] spurious network error (3 tries remaining): [..] resolve [..] needs-proxy.invalid: [..] known[..] | ||
[WARNING] spurious network error (2 tries remaining): [..] resolve [..] needs-proxy.invalid: [..] known[..] | ||
[WARNING] spurious network error (1 tries remaining): [..] resolve [..] needs-proxy.invalid: [..] known[..] | ||
[ERROR] failed to get `foo` as a dependency of package `foo v0.0.0 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
failed to load source for dependency `foo` | ||
|
@@ -338,20 +381,23 @@ Caused by: | |
Unable to update ssh://needs-proxy.invalid/git | ||
|
||
Caused by: | ||
failed to clone into: [..] | ||
failed to clone into: [ROOT]/home/.cargo/git/db/git-[HASH] | ||
|
||
Caused by: | ||
network failure seems to have happened | ||
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here | ||
https://[..] | ||
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli | ||
|
||
Caused by: | ||
{trailer} | ||
{trailer} | ||
", | ||
trailer = if cargo_uses_gitoxide() { | ||
"An IO error occurred when talking to the server\n\nCaused by:\n ssh: Could not resolve hostname needs-proxy.invalid[..]" | ||
r" An IO error occurred when talking to the server | ||
|
||
Caused by: | ||
ssh: Could not resolve hostname needs-proxy.invalid[..]" | ||
} else { | ||
"failed to resolve address for needs-proxy.invalid[..]" | ||
" failed to resolve address for needs-proxy.invalid: [..] known[..]; class=Net (12)" | ||
} | ||
)) | ||
.run(); | ||
|
@@ -366,7 +412,29 @@ Caused by: | |
|
||
p.cargo("check -v") | ||
.with_status(101) | ||
.with_stderr_contains("[..]Unable to update[..]") | ||
.with_stderr_data(str![[r#" | ||
[UPDATING] git repository `ssh://needs-proxy.invalid/git` | ||
[RUNNING] `git fetch --verbose --force --update-head-ok [..]ssh://needs-proxy.invalid/git[..] [..]+HEAD:refs/remotes/origin/HEAD[..]` | ||
ssh: Could not resolve hostname needs-proxy.invalid: [..] not known | ||
fatal: Could not read from remote repository. | ||
|
||
Please make sure you have the correct access rights | ||
and the repository exists. | ||
Comment on lines
+418
to
+422
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was thinking we shouldn't over matching against Git and SSH output, but meh we've already done that so leave it. |
||
[ERROR] failed to get `foo` as a dependency of package `foo v0.0.0 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
failed to load source for dependency `foo` | ||
|
||
Caused by: | ||
Unable to update ssh://needs-proxy.invalid/git | ||
|
||
Caused by: | ||
failed to fetch into: [ROOT]/home/.cargo/git/db/git-[HASH] | ||
|
||
Caused by: | ||
process didn't exit successfully: `git fetch --verbose --force --update-head-ok [..]ssh://needs-proxy.invalid/git[..] [..]+HEAD:refs/remotes/origin/HEAD[..]` ([EXIT_STATUS]: 128) | ||
|
||
"#]]) | ||
.with_stderr_does_not_contain("[..]try enabling `git-fetch-with-cli`[..]") | ||
.run(); | ||
} | ||
|
@@ -401,10 +469,10 @@ fn instead_of_url_printed() { | |
|
||
p.cargo("check") | ||
.with_status(101) | ||
.with_stderr(&format!( | ||
.with_stderr_data(&format!( | ||
"\ | ||
[UPDATING] git repository `https://foo.bar/foo/bar` | ||
[ERROR] failed to get `bar` as a dependency of package `foo [..]` | ||
[ERROR] failed to get `bar` as a dependency of package `foo v0.0.1 ([ROOT]/foo)` | ||
|
||
Caused by: | ||
failed to load source for dependency `bar` | ||
|
@@ -413,20 +481,19 @@ Caused by: | |
Unable to update https://foo.bar/foo/bar | ||
|
||
Caused by: | ||
failed to clone into: [..] | ||
failed to clone into: [ROOT]/home/.cargo/git/db/bar-[HASH] | ||
|
||
Caused by: | ||
failed to authenticate when downloading repository: http://{addr}/foo/bar | ||
|
||
* attempted to find username/password via `credential.helper`, but maybe the found credentials were incorrect | ||
|
||
if the git CLI succeeds then `net.git-fetch-with-cli` may help here | ||
https://[..] | ||
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli | ||
|
||
Caused by: | ||
[..] | ||
{trailer}", | ||
trailer = if cargo_uses_gitoxide() { "\nCaused by:\n [..]" } else { "" } | ||
... | ||
" | ||
)) | ||
.run(); | ||
|
||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a false positive redaction :)