Add typed SSH remote endpoints
This commit is contained in:
@@ -137,13 +137,11 @@ fn nested_repository_selection_is_innermost() -> TestResult {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn remotes_and_config_are_local_https_only() -> TestResult {
|
||||
fn remotes_and_config_reject_local_helper_and_credential_urls() -> TestResult {
|
||||
let temporary = tempfile::tempdir()?;
|
||||
let store = Repository::open(temporary.path())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
for forbidden in [
|
||||
"ssh://example.test/store.git",
|
||||
"git@example.test:store.git",
|
||||
"git://example.test/store.git",
|
||||
"file:///tmp/store.git",
|
||||
"../store.git",
|
||||
@@ -172,6 +170,52 @@ fn remotes_and_config_are_local_https_only() -> TestResult {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "ssh"))]
|
||||
#[test]
|
||||
fn ssh_remotes_are_typed_but_unavailable_before_transport_or_mutation() -> TestResult {
|
||||
let temporary = tempfile::tempdir()?;
|
||||
let store = Repository::open(temporary.path())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
let remote = GitRemote::ssh("origin", "git@example.test:team/store.git")?;
|
||||
let unsupported = GitError::UnsupportedRemoteTransport {
|
||||
transport: ironstorage::config::RemoteTransport::Ssh,
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
git.add_remote(remote.name().as_str(), remote.url()),
|
||||
Err(unsupported.clone())
|
||||
);
|
||||
assert!(git.remotes().is_empty());
|
||||
assert_eq!(
|
||||
git.config_set("remote.origin.url", remote.url()),
|
||||
Err(unsupported.clone())
|
||||
);
|
||||
assert!(git.config_get("remote.origin.url")?.is_none());
|
||||
assert_eq!(
|
||||
GitRepository::discover_remote_branches_with_transport(
|
||||
temporary.path(),
|
||||
identity(),
|
||||
&remote,
|
||||
&Credentials,
|
||||
&CloningFetch,
|
||||
&GitOperationControl::default(),
|
||||
),
|
||||
Err(unsupported)
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(feature = "ssh")]
|
||||
#[test]
|
||||
fn ssh_feature_allows_repository_remote_configuration() -> TestResult {
|
||||
let temporary = tempfile::tempdir()?;
|
||||
let store = Repository::open(temporary.path())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", "git@example.test:team/store.git")?;
|
||||
assert_eq!(git.remote_url("origin")?, "git@example.test:team/store.git");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
struct Credentials;
|
||||
|
||||
impl GitCredentialProvider for Credentials {
|
||||
@@ -347,7 +391,7 @@ fn injected_smart_http_push_sends_a_complete_pack_and_credentials() -> TestResul
|
||||
let remote: &GitRemote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
git.add_remote("origin", remote.url())?;
|
||||
fs::write(config.vault().join("secret.gpg"), b"ciphertext")?;
|
||||
git.stage(&["secret.gpg".into()])?;
|
||||
let head = git.commit("Add secret to store.")?;
|
||||
@@ -381,7 +425,7 @@ fn controlled_sync_pulls_then_pushes_with_one_progress_and_cancellation_contract
|
||||
let remote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
git.add_remote("origin", remote.url())?;
|
||||
let head = git.log(Some(1))?[0].id().to_owned();
|
||||
set_remote_tracking(config.vault(), &head)?;
|
||||
let phases = Arc::new(Mutex::new(Vec::new()));
|
||||
@@ -409,7 +453,7 @@ fn push_propagates_authentication_and_rejects_non_fast_forward_before_upload() -
|
||||
let remote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
git.add_remote("origin", remote.url())?;
|
||||
assert_eq!(
|
||||
git.push_with_transport(remote, Some("main"), &Credentials, &AuthenticationFailure),
|
||||
Err(GitError::AuthenticationFailed)
|
||||
@@ -433,7 +477,7 @@ fn fetched_branches_fast_forward_and_report_typed_conflicts() -> TestResult {
|
||||
let remote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
git.add_remote("origin", remote.url())?;
|
||||
|
||||
fs::write(config.vault().join("secret.gpg"), b"base")?;
|
||||
git.stage(&["secret.gpg".into()])?;
|
||||
@@ -511,7 +555,7 @@ fn cancelled_operations_stop_before_credentials_or_transport() -> TestResult {
|
||||
let remote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
git.add_remote("origin", remote.url())?;
|
||||
let control = GitOperationControl::default();
|
||||
control.cancel();
|
||||
assert_eq!(
|
||||
|
||||
Reference in New Issue
Block a user