mirror of
https://github.com/readur/readur.git
synced 2025-12-21 06:10:45 -06:00
125 lines
4.3 KiB
Rust
125 lines
4.3 KiB
Rust
use reqwest;
|
|
use std::time::Duration;
|
|
|
|
#[tokio::test]
|
|
async fn test_health_endpoint_responds() {
|
|
// Test that the health endpoint responds correctly
|
|
let client = reqwest::Client::builder()
|
|
.timeout(Duration::from_secs(5))
|
|
.build()
|
|
.unwrap();
|
|
|
|
// Assuming the server is running on the default port
|
|
let base_url = std::env::var("TEST_BASE_URL").unwrap_or_else(|_| "http://localhost:8000".to_string());
|
|
|
|
let response = client
|
|
.get(&format!("{}/api/health", base_url))
|
|
.send()
|
|
.await;
|
|
|
|
match response {
|
|
Ok(resp) => {
|
|
assert_eq!(resp.status(), 200, "Health endpoint should return 200 OK");
|
|
|
|
let body: serde_json::Value = resp.json().await.unwrap();
|
|
assert_eq!(body["status"], "ok", "Health status should be 'ok'");
|
|
}
|
|
Err(e) => {
|
|
// If server is not running, skip the test
|
|
eprintln!("Warning: Server not running, skipping health check test: {}", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_health_endpoint_different_ports() {
|
|
// Test that health endpoint works on different configured ports
|
|
let ports = vec![8000, 8001, 8080];
|
|
let client = reqwest::Client::builder()
|
|
.timeout(Duration::from_secs(2))
|
|
.build()
|
|
.unwrap();
|
|
|
|
for port in ports {
|
|
let url = format!("http://localhost:{}/api/health", port);
|
|
let response = client.get(&url).send().await;
|
|
|
|
if let Ok(resp) = response {
|
|
if resp.status() == 200 {
|
|
let body: serde_json::Value = resp.json().await.unwrap();
|
|
assert_eq!(body["status"], "ok", "Health status should be 'ok' on port {}", port);
|
|
println!("✓ Health check successful on port {}", port);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod docker_health_tests {
|
|
use super::*;
|
|
use std::process::Command;
|
|
|
|
#[test]
|
|
fn test_dockerfile_has_curl() {
|
|
// Verify that the Dockerfile includes curl for healthchecks
|
|
let dockerfile_content = std::fs::read_to_string("Dockerfile")
|
|
.expect("Should be able to read Dockerfile");
|
|
|
|
assert!(
|
|
dockerfile_content.contains("curl"),
|
|
"Dockerfile should install curl for healthchecks"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_docker_compose_health_check_port_matches() {
|
|
// Verify docker-compose.yml healthcheck uses correct port
|
|
let compose_content = std::fs::read_to_string("docker-compose.yml")
|
|
.expect("Should be able to read docker-compose.yml");
|
|
|
|
// Check that if SERVER_PORT is 8000, healthcheck also uses 8000
|
|
if compose_content.contains("SERVER_PORT: 8000") || compose_content.contains("SERVER_PORT=8000") {
|
|
assert!(
|
|
compose_content.contains("http://localhost:8000/api/health"),
|
|
"Healthcheck should use port 8000 when SERVER_PORT is 8000"
|
|
);
|
|
}
|
|
|
|
// Check that healthcheck URL is present
|
|
assert!(
|
|
compose_content.contains("/api/health"),
|
|
"docker-compose.yml should have health check endpoint"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_docker_compose_test_health_check_port_matches() {
|
|
// Verify docker-compose.test.yml healthcheck uses correct port
|
|
let compose_test_content = std::fs::read_to_string("docker-compose.test.yml")
|
|
.expect("Should be able to read docker-compose.test.yml");
|
|
|
|
// The test compose file uses port 8001
|
|
if compose_test_content.contains("SERVER_PORT: 8001") {
|
|
assert!(
|
|
compose_test_content.contains("http://localhost:8001/api/health"),
|
|
"Test healthcheck should use port 8001 when SERVER_PORT is 8001"
|
|
);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_curl_available_in_container() {
|
|
// This test only runs if we're in a Docker environment
|
|
if std::path::Path::new("/.dockerenv").exists() {
|
|
let output = Command::new("which")
|
|
.arg("curl")
|
|
.output()
|
|
.expect("Failed to check for curl");
|
|
|
|
assert!(
|
|
output.status.success(),
|
|
"curl should be available in the container"
|
|
);
|
|
}
|
|
}
|
|
} |