use kopi::metadata::{HttpMetadataSource, MetadataSource};
const TEST_METADATA_URL: &str = "https://kopi-vm.github.io/metadata";
#[test]
fn test_real_github_pages_fetch_index() {
let source = HttpMetadataSource::new(TEST_METADATA_URL.to_string());
match source.is_available() {
Ok(available) => {
if !available {
eprintln!("Metadata server at {TEST_METADATA_URL} is not available");
return;
}
}
Err(e) => {
eprintln!("Failed to check availability: {e}");
return;
}
}
match source.fetch_all() {
Ok(metadata) => {
println!("Successfully fetched metadata");
println!(" Total packages: {}", metadata.len());
let mut distributions = std::collections::HashSet::new();
for jdk in &metadata {
distributions.insert(&jdk.distribution);
}
println!(" Available distributions: {distributions:?}");
assert!(!metadata.is_empty());
}
Err(e) => {
eprintln!("Failed to fetch metadata: {e}");
panic!("Test failed");
}
}
}
#[test]
fn test_real_github_pages_fetch_all() {
let source = HttpMetadataSource::new(TEST_METADATA_URL.to_string());
match source.fetch_all() {
Ok(metadata) => {
println!("Successfully fetched {} metadata entries", metadata.len());
for (i, jdk) in metadata.iter().take(3).enumerate() {
println!("\nJDK {}:", i + 1);
println!(" Distribution: {}", jdk.distribution);
println!(" Version: {}", jdk.version);
println!(" Architecture: {:?}", jdk.architecture);
println!(" OS: {:?}", jdk.operating_system);
println!(" Package Type: {:?}", jdk.package_type);
println!(" Is Complete: {}", jdk.is_complete());
}
assert!(metadata.iter().all(|m| m.is_complete()));
let current_arch = kopi::platform::get_current_architecture();
let current_os = kopi::platform::get_current_os();
for jdk in &metadata {
assert_eq!(jdk.architecture.to_string(), current_arch);
assert_eq!(jdk.operating_system.to_string(), current_os);
}
}
Err(e) => {
eprintln!("Failed to fetch metadata: {e}");
eprintln!("Note: This test requires a metadata server at {TEST_METADATA_URL}");
panic!("Test failed");
}
}
}
#[test]
fn test_real_github_pages_fetch_distribution() {
let source = HttpMetadataSource::new(TEST_METADATA_URL.to_string());
match source.fetch_distribution("temurin") {
Ok(metadata) => {
println!("Successfully fetched {} temurin entries", metadata.len());
assert!(metadata.iter().all(|m| m.distribution == "temurin"));
assert!(metadata.iter().all(|m| m.is_complete()));
if !metadata.is_empty() {
println!("Sample temurin JDK:");
println!(" Version: {}", metadata[0].version);
println!(" Download URL: {:?}", metadata[0].download_url);
println!(" Checksum: {:?}", metadata[0].checksum);
println!(" Size: {} bytes", metadata[0].size);
}
}
Err(e) => {
eprintln!("Failed to fetch temurin distribution: {e}");
eprintln!("This might be expected if no temurin metadata exists for your platform");
}
}
}
#[test]
fn test_custom_server() {
let url = std::env::var("TEST_METADATA_URL").unwrap_or_else(|_| TEST_METADATA_URL.to_string());
println!("Testing against: {url}");
let source = HttpMetadataSource::new(url.clone());
match source.last_updated() {
Ok(Some(updated)) => {
println!("Metadata last updated: {updated}");
}
Ok(None) => {
println!("No last updated timestamp available");
}
Err(e) => {
eprintln!("Failed to get last updated: {e}");
}
}
}