use kilar::{
commands::{CheckCommand, ListCommand},
utils::{validate_port, validate_protocol, validate_sort_option},
Error,
};
#[tokio::test]
async fn test_check_command_with_unused_port() {
let result = CheckCommand::execute(65432, "tcp", false, true, false, false).await;
match result {
Ok(_) => {
}
Err(e) => {
let error_msg = e.to_string();
eprintln!("CheckCommand error (expected in CI): {error_msg}");
}
}
}
#[test]
fn test_validation_functions() {
assert!(validate_port(80).is_ok());
assert!(validate_port(0).is_err());
assert!(validate_protocol("tcp").is_ok());
assert!(validate_protocol("udp").is_ok());
assert!(validate_protocol("all").is_ok());
assert!(validate_protocol("invalid").is_err());
assert!(validate_sort_option("port").is_ok());
assert!(validate_sort_option("pid").is_ok());
assert!(validate_sort_option("name").is_ok());
assert!(validate_sort_option("invalid").is_err());
}
#[test]
fn test_error_types() {
let error = Error::PortNotFound(8080);
assert!(error.to_string().contains("8080"));
assert!(error.to_string().contains("not in use"));
let error = Error::InvalidPort("test".to_string());
assert!(error.to_string().contains("Invalid port"));
let error = Error::ProcessNotFound(1234);
assert!(error.to_string().contains("1234"));
assert!(error.to_string().contains("not found"));
}
#[tokio::test]
async fn test_list_command_port_range_parsing() {
let result = ListCommand::execute(
Some("1-1000".to_string()),
None,
"port",
"tcp",
false,
true,
true,
false,
)
.await;
match result {
Ok(_) => {
}
Err(e) => {
let error_msg = e.to_string();
eprintln!("ListCommand error (expected in CI): {error_msg}");
}
}
}
#[tokio::test]
async fn test_list_command_invalid_port_range() {
let result = ListCommand::execute(
Some("5000-3000".to_string()), None,
"port",
"tcp",
false,
true,
true,
false,
)
.await;
assert!(result.is_err());
}
#[test]
fn test_error_chain() {
let io_error = std::io::Error::new(std::io::ErrorKind::PermissionDenied, "test");
let our_error: Error = io_error.into();
assert!(matches!(our_error, Error::IoError(_)));
let error: Box<dyn std::error::Error> = Box::new(Error::Other("test".to_string()));
assert_eq!(error.to_string(), "test");
}