use serde::{Deserialize, Serialize};
use crate::validation::{Validate, ValidationError};
#[derive(Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct AgentCertificateSettingsResponse {
pub lifetime_hours: u32,
pub renewal_window_hours_override: Option<u16>,
pub effective_renewal_window_hours: u16,
}
#[derive(Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct UpdateAgentCertificateSettingsRequest {
pub lifetime_hours: Option<u32>,
pub renewal_window_hours: Option<u16>,
}
impl Validate for UpdateAgentCertificateSettingsRequest {
fn validate(&self) -> Result<(), ValidationError> {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn agent_cert_settings_response_round_trip_auto_mode() {
let resp = AgentCertificateSettingsResponse {
lifetime_hours: 8760,
renewal_window_hours_override: None,
effective_renewal_window_hours: 336,
};
let json = serde_json::to_string(&resp).expect("serialization should succeed");
let de: AgentCertificateSettingsResponse =
serde_json::from_str(&json).expect("deserialization should succeed");
assert_eq!(de.lifetime_hours, 8760);
assert_eq!(de.renewal_window_hours_override, None);
assert_eq!(de.effective_renewal_window_hours, 336);
}
#[test]
fn agent_cert_settings_response_round_trip_override() {
let resp = AgentCertificateSettingsResponse {
lifetime_hours: 8760,
renewal_window_hours_override: Some(72),
effective_renewal_window_hours: 72,
};
let json = serde_json::to_string(&resp).expect("serialization should succeed");
let de: AgentCertificateSettingsResponse =
serde_json::from_str(&json).expect("deserialization should succeed");
assert_eq!(de.lifetime_hours, 8760);
assert_eq!(de.renewal_window_hours_override, Some(72));
assert_eq!(de.effective_renewal_window_hours, 72);
}
#[test]
fn update_agent_cert_settings_request_round_trip() {
let req = UpdateAgentCertificateSettingsRequest {
lifetime_hours: Some(17_520),
renewal_window_hours: Some(336),
};
let json = serde_json::to_string(&req).expect("serialization should succeed");
let de: UpdateAgentCertificateSettingsRequest =
serde_json::from_str(&json).expect("deserialization should succeed");
assert_eq!(de.lifetime_hours, Some(17_520));
assert_eq!(de.renewal_window_hours, Some(336));
}
#[test]
fn update_agent_cert_settings_request_reset_sentinel() {
let req = UpdateAgentCertificateSettingsRequest {
lifetime_hours: None,
renewal_window_hours: Some(0),
};
let json = serde_json::to_string(&req).expect("serialization should succeed");
let de: UpdateAgentCertificateSettingsRequest =
serde_json::from_str(&json).expect("deserialization should succeed");
assert_eq!(de.renewal_window_hours, Some(0));
}
#[test]
fn update_agent_cert_settings_request_validate_is_ok() {
let req = UpdateAgentCertificateSettingsRequest {
lifetime_hours: Some(17_520),
renewal_window_hours: Some(336),
};
req.validate()
.expect("UpdateAgentCertificateSettingsRequest should validate");
}
}