use std::path::{Path, PathBuf};
pub fn load_real_port_and_assert_schema(
name: &str,
version: &semver::Version,
license: &str,
) -> cabin_port::PortDescriptor {
let manifest_dir =
std::env::var_os("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR set during tests");
let port_toml = PathBuf::from(manifest_dir)
.join(format!("../cabin-port/ports/{name}/{version}/port.toml"))
.canonicalize()
.unwrap_or_else(|err| panic!("canonicalize ports/{name}/{version}/port.toml: {err}"));
let descriptor = cabin_port::load_port(&port_toml)
.unwrap_or_else(|err| panic!("ports/{name}/{version}/port.toml should parse: {err:?}"));
assert_eq!(descriptor.name.as_str(), name);
assert_eq!(&descriptor.version, version);
match &descriptor.source {
cabin_port::PortSource::Archive { url, sha256, .. } => {
assert_eq!(url.scheme(), "https");
assert_eq!(sha256.to_hex().len(), 64);
}
}
assert_eq!(
descriptor.overlay.relative_path,
PathBuf::from("cabin.toml")
);
assert_eq!(descriptor.metadata.license.as_deref(), Some(license));
descriptor
}
pub fn assert_tar_gz_source(descriptor: &cabin_port::PortDescriptor, expected_strip_prefix: &str) {
match &descriptor.source {
cabin_port::PortSource::Archive {
url, strip_prefix, ..
} => {
assert!(
url.as_str().ends_with(".tar.gz"),
"expected a .tar.gz URL, got {url}"
);
assert_eq!(strip_prefix.as_deref(), Some(expected_strip_prefix));
}
}
}
pub fn assert_builtin_port_bundled_and_parses(name: &str, req: &str, version: &str) {
let entry = cabin_port::builtin::lookup(name, &semver::VersionReq::parse(req).unwrap())
.unwrap_or_else(|| panic!("{name} should be bundled"));
assert_eq!(entry.name, name);
assert_eq!(entry.version, version);
let descriptor = cabin_port::parse_port_str(
entry.port_toml,
Path::new(&format!("<builtin:{name}>/port.toml")),
)
.unwrap_or_else(|err| panic!("embedded {name} port.toml should parse: {err:?}"));
assert_eq!(descriptor.name.as_str(), name);
assert_eq!(descriptor.version.to_string(), version);
}
pub fn builtin_overlay(name: &str) -> &'static str {
cabin_port::builtin::lookup(name, &semver::VersionReq::parse(">=0").unwrap())
.unwrap_or_else(|| panic!("{name} should be bundled"))
.overlay_toml
}