@@ -300,6 +300,8 @@
mod tests {
use super::*;
use serde_json::json;
use wiremock::matchers::{method, path as req_path};
use wiremock::{Mock, MockServer, ResponseTemplate};
#[test]
fn reads_the_architecture_prefixed_context_length() {
@@ -368,15 +370,7 @@
Some("llama3.2:latest".to_string())
);
}
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
use wiremock::matchers::{method, path as req_path};
use wiremock::{Mock, MockServer, ResponseTemplate};
/// An Ollama that answers `/api/tags` with `body`.
async fn ollama_serving(body: serde_json::Value) -> MockServer {
let server = MockServer::start().await;
@@ -454,6 +448,6 @@
]}))
.await;
let models = local_models(&reqwest::Client::new(), &ollama.uri())
let models = local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.expect("a served model must be reported");
@@ -470,6 +464,6 @@
// empty list would read as "supports nothing" and hide it forever.
let ollama = ollama_serving(json!({"models": [{"name": "mystery:latest"}]})).await;
let models = local_models(&reqwest::Client::new(), &ollama.uri())
let models = local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.expect("the model is still served");
@@ -486,6 +480,6 @@
async fn an_empty_capabilities_array_is_also_reported_as_unknown() {
let ollama = ollama_serving(json!({"models": [{"name": "m", "capabilities": []}]})).await;
let models = local_models(&reqwest::Client::new(), &ollama.uri())
let models = local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.unwrap();
@@ -504,6 +498,6 @@
]}))
.await;
let models = local_models(&reqwest::Client::new(), &ollama.uri())
let models = local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.unwrap();
@@ -519,6 +513,6 @@
]}))
.await;
let models = local_models(&reqwest::Client::new(), &ollama.uri())
let models = local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.unwrap();
@@ -532,18 +526,22 @@
// advertised a moment ago; omitting the key leaves them in place.
let ollama = ollama_serving(json!({"models": []})).await;
assert!(local_models(&reqwest::Client::new(), &ollama.uri())
.await
.is_none());
assert!(
local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.is_none()
);
}
#[tokio::test]
async fn a_response_without_a_models_key_reports_none() {
let ollama = ollama_serving(json!({"something_else": true})).await;
assert!(local_models(&reqwest::Client::new(), &ollama.uri())
.await
.is_none());
assert!(
local_models(&reqwest::Client::new(), &ollama.uri(), &mut HashMap::new())
.await
.is_none()
);
}
#[tokio::test]
@@ -555,9 +553,11 @@
.mount(&server)
.await;
assert!(local_models(&reqwest::Client::new(), &server.uri())
.await
.is_none());
assert!(
local_models(&reqwest::Client::new(), &server.uri(), &mut HashMap::new())
.await
.is_none()
);
}
#[tokio::test]
@@ -569,18 +569,24 @@
.mount(&server)
.await;
assert!(local_models(&reqwest::Client::new(), &server.uri())
.await
.is_none());
assert!(
local_models(&reqwest::Client::new(), &server.uri(), &mut HashMap::new())
.await
.is_none()
);
}
#[tokio::test]
async fn an_unreachable_ollama_reports_none_rather_than_costing_a_heartbeat() {
// Best-effort is the whole contract here: a dead Ollama must not
// stop the runner reporting that it is alive.
assert!(local_models(&reqwest::Client::new(), &closed_port_url())
.await
.is_none());
assert!(local_models(
&reqwest::Client::new(),
&closed_port_url(),
&mut HashMap::new()
)
.await
.is_none());
}
#[tokio::test]
@@ -590,7 +596,7 @@
let with_slash = format!("{}/", ollama.uri());
assert!(
local_models(&reqwest::Client::new(), &with_slash)
local_models(&reqwest::Client::new(), &with_slash, &mut HashMap::new())
.await
.is_some(),
"the mock only answers /api/tags, so a doubled slash means None"