use reqwest::StatusCode;
use sal_net::HttpConnector;
use std::time::Duration;
#[tokio::test]
async fn test_http_connector_new() {
let result = HttpConnector::new();
assert!(result.is_ok());
}
#[tokio::test]
async fn test_http_connector_with_timeout() {
let timeout = Duration::from_secs(10);
let result = HttpConnector::with_timeout(timeout);
assert!(result.is_ok());
}
#[tokio::test]
async fn test_http_connector_default() {
let connector = HttpConnector::default();
let result = connector.check_url("https://httpbin.org/status/200").await;
match result {
Ok(_) => {} Err(_) => {} }
}
#[tokio::test]
async fn test_check_url_valid() {
let connector = HttpConnector::new().unwrap();
let result = connector.check_url("https://httpbin.org/status/200").await;
match result {
Ok(is_reachable) => {
println!("URL reachable: {}", is_reachable);
}
Err(e) => {
println!("Network error (expected in some environments): {}", e);
}
}
}
#[tokio::test]
async fn test_check_url_invalid() {
let connector = HttpConnector::new().unwrap();
let result = connector.check_url("not-a-valid-url").await;
assert!(result.is_err()); }
#[tokio::test]
async fn test_check_url_unreachable() {
let connector = HttpConnector::new().unwrap();
let result = connector
.check_url("https://this-domain-definitely-does-not-exist-12345.com")
.await;
assert!(result.is_ok());
assert!(!result.unwrap()); }
#[tokio::test]
async fn test_check_status_valid() {
let connector = HttpConnector::new().unwrap();
let result = connector
.check_status("https://httpbin.org/status/200")
.await;
match result {
Ok(Some(status)) => {
assert_eq!(status, StatusCode::OK);
}
Ok(None) => {
println!("No status returned (network might not be available)");
}
Err(e) => {
println!("Network error: {}", e);
}
}
}
#[tokio::test]
async fn test_check_status_404() {
let connector = HttpConnector::new().unwrap();
let result = connector
.check_status("https://httpbin.org/status/404")
.await;
match result {
Ok(Some(status)) => {
assert_eq!(status, StatusCode::NOT_FOUND);
}
Ok(None) => {
println!("No status returned (network might not be available)");
}
Err(e) => {
println!("Network error: {}", e);
}
}
}
#[tokio::test]
async fn test_check_status_invalid_url() {
let connector = HttpConnector::new().unwrap();
let result = connector.check_status("not-a-valid-url").await;
assert!(result.is_err()); }
#[tokio::test]
async fn test_get_content_valid() {
let connector = HttpConnector::new().unwrap();
let result = connector.get_content("https://httpbin.org/json").await;
match result {
Ok(content) => {
assert!(!content.is_empty());
assert!(content.contains("{") && content.contains("}"));
}
Err(e) => {
println!("Network error: {}", e);
}
}
}
#[tokio::test]
async fn test_get_content_404() {
let connector = HttpConnector::new().unwrap();
let result = connector
.get_content("https://httpbin.org/status/404")
.await;
assert!(result.is_err());
}
#[tokio::test]
async fn test_get_content_invalid_url() {
let connector = HttpConnector::new().unwrap();
let result = connector.get_content("not-a-valid-url").await;
assert!(result.is_err()); }
#[tokio::test]
async fn test_verify_status_success() {
let connector = HttpConnector::new().unwrap();
let result = connector
.verify_status("https://httpbin.org/status/200", StatusCode::OK)
.await;
match result {
Ok(matches) => {
assert!(matches); }
Err(e) => {
println!("Network error: {}", e);
}
}
}
#[tokio::test]
async fn test_verify_status_mismatch() {
let connector = HttpConnector::new().unwrap();
let result = connector
.verify_status("https://httpbin.org/status/200", StatusCode::NOT_FOUND)
.await;
match result {
Ok(matches) => {
assert!(!matches); }
Err(e) => {
println!("Network error: {}", e);
}
}
}
#[tokio::test]
async fn test_verify_status_unreachable() {
let connector = HttpConnector::new().unwrap();
let result = connector
.verify_status(
"https://this-domain-definitely-does-not-exist-12345.com",
StatusCode::OK,
)
.await;
assert!(result.is_ok());
assert!(!result.unwrap()); }