use std::sync::Arc;
use tracing_test::traced_test;
use super::*;
use crate::Error;
use crate::MockRaftLog;
use crate::MockTypeConfig;
#[tokio::test]
#[traced_test]
async fn test_default_purge_executor_execute_purge_success() {
let mut mock_raft_log = MockRaftLog::new();
mock_raft_log.expect_purge_logs_up_to().returning(|_| Ok(()));
let executor = DefaultPurgeExecutor::<MockTypeConfig>::new(Arc::new(mock_raft_log));
let last_included = LogId {
index: 100,
term: 1,
};
let result = executor.execute_purge(last_included).await;
assert!(result.is_ok());
assert!(executor.validate_purge(LogId::default()).await.is_ok());
assert!(executor.pre_purge().await.is_ok());
assert!(executor.post_purge().await.is_ok());
}
#[tokio::test]
#[traced_test]
async fn test_default_purge_executor_execute_purge_error() {
let mut mock_raft_log = MockRaftLog::new();
mock_raft_log
.expect_purge_logs_up_to()
.returning(|_| Err(Error::Fatal("test".to_string())));
let executor = DefaultPurgeExecutor::<MockTypeConfig>::new(Arc::new(mock_raft_log));
let last_included = LogId {
index: 100,
term: 1,
};
let result = executor.execute_purge(last_included).await;
assert!(result.is_err());
}
#[tokio::test]
#[traced_test]
async fn test_default_purge_executor_pending_purge() {
let mut mock_raft_log = MockRaftLog::new();
mock_raft_log.expect_purge_logs_up_to().returning(|_| Ok(()));
let executor = DefaultPurgeExecutor::<MockTypeConfig>::new(Arc::new(mock_raft_log));
assert_eq!(executor.pending_purge, None);
}
#[tokio::test]
#[traced_test]
async fn test_default_purge_executor_multiple_purges() {
let mut mock_raft_log = MockRaftLog::new();
mock_raft_log.expect_purge_logs_up_to().times(3).returning(|_| Ok(()));
let executor = DefaultPurgeExecutor::<MockTypeConfig>::new(Arc::new(mock_raft_log));
let last_included1 = LogId {
index: 100,
term: 1,
};
let last_included2 = LogId {
index: 200,
term: 1,
};
let last_included3 = LogId {
index: 300,
term: 1,
};
executor.execute_purge(last_included1).await.unwrap();
executor.execute_purge(last_included2).await.unwrap();
executor.execute_purge(last_included3).await.unwrap();
}
#[tokio::test]
#[traced_test]
async fn test_default_purge_executor_with_large_log_id() {
let mut mock_raft_log = MockRaftLog::new();
mock_raft_log.expect_purge_logs_up_to().returning(|_| Ok(()));
let executor = DefaultPurgeExecutor::<MockTypeConfig>::new(Arc::new(mock_raft_log));
let last_included = LogId {
index: u64::MAX,
term: 1,
}; let result = executor.execute_purge(last_included).await;
assert!(result.is_ok());
}