use std::io::{Read, Write};
use std::net::TcpListener;
use std::thread;
use assert_fs::TempDir;
use indoc::{formatdoc, indoc};
use crate::support::command::Scarb;
use crate::support::project_builder::ProjectBuilder;
#[test]
fn https_something_happens() {
thread::scope(|ts| {
let server = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = server.local_addr().unwrap();
let port = addr.port();
ts.spawn(move || {
let mut conn = server.accept().unwrap().0;
drop(conn.write(b"1234"));
drop(conn.shutdown(std::net::Shutdown::Write));
drop(conn.read(&mut [0; 16]));
});
let t = TempDir::new().unwrap();
ProjectBuilder::start()
.name("hello")
.version("1.0.0")
.dep(
"dep",
formatdoc! {r#"
git = "https://127.0.0.1:{port}/foo/bar"
"#},
)
.build(&t);
Scarb::quick_snapbox()
.arg("build")
.current_dir(&t)
.assert()
.failure()
.stdout_matches(indoc! {r#"
[..] Updating git repository https://127.0.0.1:[..]/foo/bar
error: failed to clone into: [..]
Caused by:
process did not exit successfully: exit [..]: 128
"#});
});
}
#[test]
fn ssh_something_happens() {
thread::scope(|ts| {
let server = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = server.local_addr().unwrap();
let port = addr.port();
ts.spawn(move || {
drop(server.accept().unwrap());
});
let t = TempDir::new().unwrap();
ProjectBuilder::start()
.name("hello")
.version("1.0.0")
.dep(
"dep",
formatdoc! {r#"
git = "ssh://127.0.0.1:{port}/foo/bar"
"#},
)
.build(&t);
Scarb::quick_snapbox()
.arg("build")
.current_dir(&t)
.assert()
.failure()
.stdout_matches(indoc! {r#"
[..] Updating git repository ssh://127.0.0.1:[..]/foo/bar
error: failed to clone into: [..]
Caused by:
process did not exit successfully: exit [..]: 128
"#});
});
}