use holger_server_lib::{read_ron_config, wire_holger};
use std::io::Write;
use tempfile::NamedTempFile;
const MINIMAL_CONFIG: &str = r#"(
repositories: [
(
ron_name: "rust-test",
ron_repo_type: "rust",
ron_upstreams: [],
ron_in: None,
ron_out: Some((
ron_storage_endpoint: "test-storage",
ron_exposed_endpoint: "test-ep",
)),
),
],
exposed_endpoints: [
(
ron_name: "test-ep",
ron_url: "127.0.0.1:50051",
),
],
storage_endpoints: [
(
ron_name: "test-storage",
ron_storage_type: "rocksdb",
ron_path: "/tmp/holger-test-data",
),
],
)"#;
#[test]
fn test_parse_minimal_config() {
let mut f = NamedTempFile::new().unwrap();
f.write_all(MINIMAL_CONFIG.as_bytes()).unwrap();
let holger = read_ron_config(f.path()).unwrap();
assert_eq!(holger.repositories.len(), 1);
assert_eq!(holger.exposed_endpoints.len(), 1);
assert_eq!(holger.storage_endpoints.len(), 1);
assert_eq!(holger.repositories[0].ron_name, "rust-test");
}
#[test]
fn test_wire_holger() {
let mut f = NamedTempFile::new().unwrap();
f.write_all(MINIMAL_CONFIG.as_bytes()).unwrap();
let mut holger = read_ron_config(f.path()).unwrap();
holger.instantiate_backends().unwrap();
wire_holger(&mut holger).unwrap();
let ep = &holger.exposed_endpoints[0];
assert!(ep.aggregated_routes.is_some());
}
#[test]
fn test_rust_api_fetch() {
let mut f = NamedTempFile::new().unwrap();
f.write_all(MINIMAL_CONFIG.as_bytes()).unwrap();
let mut holger = read_ron_config(f.path()).unwrap();
holger.instantiate_backends().unwrap();
wire_holger(&mut holger).unwrap();
let id = holger_traits::ArtifactId {
namespace: None,
name: "nonexistent".into(),
version: "0.0.0".into(),
};
let result = holger.fetch("rust-test", &id).unwrap();
assert!(result.is_none());
}
#[test]
fn test_list_repositories() {
let mut f = NamedTempFile::new().unwrap();
f.write_all(MINIMAL_CONFIG.as_bytes()).unwrap();
let mut holger = read_ron_config(f.path()).unwrap();
holger.instantiate_backends().unwrap();
wire_holger(&mut holger).unwrap();
let repos = holger.list_repositories();
assert_eq!(repos, vec!["rust-test"]);
}
#[test]
fn test_fetch_unknown_repo_errors() {
let mut f = NamedTempFile::new().unwrap();
f.write_all(MINIMAL_CONFIG.as_bytes()).unwrap();
let mut holger = read_ron_config(f.path()).unwrap();
holger.instantiate_backends().unwrap();
wire_holger(&mut holger).unwrap();
let id = holger_traits::ArtifactId {
namespace: None,
name: "x".into(),
version: "1".into(),
};
assert!(holger.fetch("nonexistent-repo", &id).is_err());
}
#[test]
fn test_maven_config() {
let config = r#"(
repositories: [
(
ron_name: "maven-prod",
ron_repo_type: "maven3",
ron_upstreams: [],
ron_archive_path: Some("/tmp/nonexistent.znippy"),
ron_in: None,
ron_out: Some((
ron_storage_endpoint: "storage",
ron_exposed_endpoint: "grpc-ep",
)),
),
],
exposed_endpoints: [
(
ron_name: "grpc-ep",
ron_url: "0.0.0.0:50051",
),
],
storage_endpoints: [
(
ron_name: "storage",
ron_storage_type: "znippy",
ron_path: "/tmp/holger-maven",
),
],
)"#;
let mut f = NamedTempFile::new().unwrap();
f.write_all(config.as_bytes()).unwrap();
let mut holger = read_ron_config(f.path()).unwrap();
let result = holger.instantiate_backends();
assert!(result.is_err());
}