use quarb_objstore::ObjstoreAdapter;
fn values(a: &impl quarb::AstAdapter, q: &str) -> Vec<String> {
match quarb::run(q, a).unwrap() {
quarb::QueryResult::Values(vs) => vs.iter().map(|v| v.to_string()).collect(),
quarb::QueryResult::Nodes(ns) => ns.iter().map(|n| format!("{n:?}")).collect(),
}
}
#[test]
#[ignore = "needs network"]
fn gcs_public_listing() {
let a = ObjstoreAdapter::connect("gs://gcp-public-data-landsat").unwrap();
let v = values(&a, "/*<prefix> @| count");
assert!(v[0].parse::<i64>().unwrap() >= 3, "prefixes: {v:?}");
}
#[test]
#[ignore = "needs network"]
fn s3_public_listing_and_content() {
let a = ObjstoreAdapter::connect("s3://noaa-ghcn-pds").unwrap();
assert_eq!(
values(&a, "/*[:::name = \"ghcnd-states.txt\"];;;size"),
["1086"]
);
let content = values(&a, "/*[:::name = \"ghcnd-countries.txt\"]::");
assert!(content[0].contains("Afghanistan"));
}
#[test]
#[ignore = "needs QUARB_S3_TEST + credentials (e.g. a seeded MinIO)"]
fn s3_signed_listing_and_content() {
let target = std::env::var("QUARB_S3_TEST").expect("QUARB_S3_TEST target");
let a = ObjstoreAdapter::connect(&target).unwrap();
let names = values(&a, "/configs/*:::name");
assert!(
names.contains(&"services.json".to_string()),
"listing under a signed prefix: {names:?}"
);
let content = values(&a, "/configs/services.json::");
assert!(content[0].contains("services"), "signed content read");
}
#[test]
#[ignore = "needs QUARB_AZ_TEST + AZURE_STORAGE_KEY (e.g. a seeded Azurite)"]
fn azure_shared_key_listing_and_content() {
let target = std::env::var("QUARB_AZ_TEST").expect("QUARB_AZ_TEST target");
let a = ObjstoreAdapter::connect(&target).unwrap();
let names = values(&a, "/*:::name");
assert!(
names.contains(&"readme.md".to_string()),
"signed listing: {names:?}"
);
let content = values(&a, "/readme.md::");
assert!(!content[0].is_empty(), "signed content read");
}