use pkgcraft::repo::ebuild::EbuildRepoBuilder;
use pkgcruft_git::service::PkgcruftServiceBuilder;
use tempfile::NamedTempFile;
use tokio::process::Command;
use crate::git::GitRepo;
#[tokio::test]
async fn uds() {
let repo = EbuildRepoBuilder::new().name("repo").build().unwrap();
GitRepo::init(&repo).unwrap();
let tmp = NamedTempFile::new().unwrap();
let socket = tmp.path().to_str().unwrap();
for socket in [Some(socket), None] {
let mut service = PkgcruftServiceBuilder::new(repo.path());
if let Some(value) = socket {
service = service.socket(value);
}
service.spawn().await.unwrap();
let ver = env!("CARGO_PKG_VERSION");
let expected = format!("client: {ver}, server: {ver}\n");
let mut cmd = Command::new(env!("CARGO_BIN_EXE_pkgcruft-git"));
if let Some(value) = socket {
cmd.args(["-c", value]);
}
cmd.arg("version");
let output = cmd.output().await.unwrap();
let data = String::from_utf8(output.stdout).unwrap();
assert_eq!(data, expected);
}
}
#[tokio::test]
async fn tcp() {
let repo = EbuildRepoBuilder::new().name("repo").build().unwrap();
GitRepo::init(&repo).unwrap();
for addr in ["127.0.0.1:0", "[::]:0"] {
let service = PkgcruftServiceBuilder::new(repo.path())
.socket(addr)
.spawn()
.await
.unwrap();
let url = format!("http://{}", &service.socket);
let ver = env!("CARGO_PKG_VERSION");
let expected = format!("client: {ver}, server: {ver}\n");
for serve_addr in [&service.socket, &url] {
let mut cmd = Command::new(env!("CARGO_BIN_EXE_pkgcruft-git"));
cmd.arg("-c");
cmd.arg(serve_addr);
cmd.arg("version");
let output = cmd.output().await.unwrap();
let data = String::from_utf8(output.stdout).unwrap();
assert_eq!(data, expected);
}
}
}
#[tokio::test]
async fn scan() {
let mut repo = EbuildRepoBuilder::new().name("repo").build().unwrap();
git2::Repository::init(repo.path()).unwrap();
let tmp = NamedTempFile::new().unwrap();
let socket = tmp.path().to_str().unwrap();
let _service = PkgcruftServiceBuilder::new(repo.path())
.socket(socket)
.spawn()
.await
.unwrap();
let mut cmd = Command::new(env!("CARGO_BIN_EXE_pkgcruft-git"));
cmd.args(["-c", socket]);
cmd.arg("scan");
let output = cmd.output().await.unwrap();
let data = String::from_utf8(output.stdout).unwrap();
assert_eq!(data, "");
repo.create_ebuild("cat/pkg-1", &["EAPI=invalid"]).unwrap();
let mut cmd = Command::new(env!("CARGO_BIN_EXE_pkgcruft-git"));
cmd.args(["-c", socket]);
cmd.arg("scan");
let output = cmd.output().await.unwrap();
let data = String::from_utf8(output.stdout).unwrap();
let expected = indoc::indoc! {"
cat/pkg
MetadataError: version 1: unsupported EAPI: invalid
"};
assert_eq!(data, expected);
}