pub mod metric_detail;
pub mod models;
pub mod review_config;
pub mod review_data;
pub mod stage_task;
pub mod v1;
use crate::{
core::config::Config,
service::performance::{
metric_detail::MetricDetailService, review_config::ReviewConfigService,
review_data::ReviewDataService, stage_task::StageTaskService,
},
};
pub struct PerformanceService {
pub review_config: ReviewConfigService,
pub stage_task: StageTaskService,
pub metric_detail: MetricDetailService,
pub review_data: ReviewDataService,
}
impl PerformanceService {
pub fn new(config: Config) -> Self {
Self {
review_config: ReviewConfigService::new(config.clone()),
stage_task: StageTaskService::new(config.clone()),
metric_detail: MetricDetailService::new(config.clone()),
review_data: ReviewDataService::new(config),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::time::Duration;
#[test]
fn test_performance_service_creation() {
let config = Config::default();
let service = PerformanceService::new(config.clone());
assert_eq!(service.review_config.config.app_id, config.app_id);
assert_eq!(service.review_config.config.app_secret, config.app_secret);
assert_eq!(service.stage_task.config.app_id, config.app_id);
assert_eq!(service.metric_detail.config.app_id, config.app_id);
assert_eq!(service.review_data.config.app_id, config.app_id);
}
#[test]
fn test_performance_service_with_custom_config() {
let config = Config::builder()
.app_id("performance_test_app")
.app_secret("performance_test_secret")
.req_timeout(Duration::from_secs(200))
.build();
let service = PerformanceService::new(config.clone());
assert_eq!(service.review_config.config.app_id, "performance_test_app");
assert_eq!(
service.review_config.config.app_secret,
"performance_test_secret"
);
assert_eq!(
service.review_config.config.req_timeout,
Some(Duration::from_secs(200))
);
assert_eq!(service.stage_task.config.app_id, "performance_test_app");
assert_eq!(
service.metric_detail.config.req_timeout,
Some(Duration::from_secs(200))
);
assert_eq!(
service.review_data.config.app_secret,
"performance_test_secret"
);
}
#[test]
fn test_performance_service_config_independence() {
let config1 = Config::builder().app_id("performance_app_1").build();
let config2 = Config::builder().app_id("performance_app_2").build();
let service1 = PerformanceService::new(config1);
let service2 = PerformanceService::new(config2);
assert_eq!(service1.review_config.config.app_id, "performance_app_1");
assert_eq!(service2.review_config.config.app_id, "performance_app_2");
assert_ne!(
service1.review_config.config.app_id,
service2.review_config.config.app_id
);
assert_ne!(
service1.stage_task.config.app_id,
service2.review_data.config.app_id
);
}
#[test]
fn test_performance_service_sub_services_accessible() {
let config = Config::default();
let service = PerformanceService::new(config.clone());
assert_eq!(service.review_config.config.app_id, config.app_id);
assert_eq!(service.stage_task.config.app_id, config.app_id);
assert_eq!(service.metric_detail.config.app_id, config.app_id);
assert_eq!(service.review_data.config.app_id, config.app_id);
}
#[test]
fn test_performance_service_config_cloning() {
let config = Config::builder()
.app_id("clone_test_app")
.app_secret("clone_test_secret")
.build();
let service = PerformanceService::new(config.clone());
assert_eq!(service.review_config.config.app_id, "clone_test_app");
assert_eq!(service.review_config.config.app_secret, "clone_test_secret");
assert_eq!(service.stage_task.config.app_secret, "clone_test_secret");
assert_eq!(service.metric_detail.config.app_id, "clone_test_app");
assert_eq!(service.review_data.config.app_secret, "clone_test_secret");
}
#[test]
fn test_performance_service_timeout_propagation() {
let config = Config::builder()
.req_timeout(Duration::from_secs(210))
.build();
let service = PerformanceService::new(config);
assert_eq!(
service.review_config.config.req_timeout,
Some(Duration::from_secs(210))
);
assert_eq!(
service.stage_task.config.req_timeout,
Some(Duration::from_secs(210))
);
assert_eq!(
service.metric_detail.config.req_timeout,
Some(Duration::from_secs(210))
);
assert_eq!(
service.review_data.config.req_timeout,
Some(Duration::from_secs(210))
);
}
#[test]
fn test_performance_service_multiple_instances() {
let config = Config::default();
let service1 = PerformanceService::new(config.clone());
let service2 = PerformanceService::new(config.clone());
assert_eq!(
service1.review_config.config.app_id,
service2.review_config.config.app_id
);
assert_eq!(
service1.review_config.config.app_secret,
service2.review_config.config.app_secret
);
assert_eq!(
service1.stage_task.config.app_id,
service2.stage_task.config.app_id
);
assert_eq!(
service1.metric_detail.config.app_secret,
service2.metric_detail.config.app_secret
);
assert_eq!(
service1.review_data.config.app_id,
service2.review_data.config.app_id
);
}
#[test]
fn test_performance_service_config_consistency() {
let config = Config::builder()
.app_id("consistency_test")
.app_secret("consistency_secret")
.req_timeout(Duration::from_secs(170))
.build();
let service = PerformanceService::new(config);
assert_eq!(service.review_config.config.app_id, "consistency_test");
assert_eq!(
service.review_config.config.app_secret,
"consistency_secret"
);
assert_eq!(
service.review_config.config.req_timeout,
Some(Duration::from_secs(170))
);
assert_eq!(service.stage_task.config.app_id, "consistency_test");
assert_eq!(
service.metric_detail.config.app_secret,
"consistency_secret"
);
assert_eq!(
service.review_data.config.req_timeout,
Some(Duration::from_secs(170))
);
}
}