use ri::log::{RiLogContext, RiLogLevel, RiLogConfig, RiLogger};
use ri::fs::RiFileSystem;
use tempfile::tempdir;
#[test]
fn test_log_level_as_str() {
assert_eq!(RiLogLevel::Debug.as_str(), "DEBUG");
assert_eq!(RiLogLevel::Info.as_str(), "INFO");
assert_eq!(RiLogLevel::Warn.as_str(), "WARN");
assert_eq!(RiLogLevel::Error.as_str(), "ERROR");
}
#[test]
fn test_log_config_default() {
let config = RiLogConfig::default();
assert_eq!(config.level.as_str(), "INFO");
assert!(config.console_enabled);
assert!(config.file_enabled);
assert_eq!(config.sampling_default, 1.0);
assert_eq!(config.file_name, "dms.log");
assert!(!config.json_format);
assert_eq!(config.rotate_when, "size");
assert_eq!(config.max_bytes, 10 * 1024 * 1024);
}
#[test]
fn test_log_context_put_get() {
RiLogContext::clear();
RiLogContext::put("test_key", "test_value");
assert_eq!(RiLogContext::get("test_key"), Some("test_value".to_string()));
assert_eq!(RiLogContext::get("non_existent_key"), None);
RiLogContext::remove("test_key");
assert_eq!(RiLogContext::get("test_key"), None);
}
#[test]
fn test_log_context_put_all() {
RiLogContext::clear();
let mut values = std::collections::HashMap::new();
values.insert("key1".to_string(), "value1".to_string());
values.insert("key2".to_string(), "value2".to_string());
RiLogContext::put_all(values);
assert_eq!(RiLogContext::get("key1"), Some("value1".to_string()));
assert_eq!(RiLogContext::get("key2"), Some("value2".to_string()));
}
#[test]
fn test_log_context_get_all() {
RiLogContext::clear();
RiLogContext::put("key1", "value1");
RiLogContext::put("key2", "value2");
let all = RiLogContext::get_all();
assert_eq!(all.get("key1"), Some(&"value1".to_string()));
assert_eq!(all.get("key2"), Some(&"value2".to_string()));
assert_eq!(all.len(), 2);
}
#[test]
fn test_log_context_clear() {
RiLogContext::clear();
RiLogContext::put("key1", "value1");
RiLogContext::put("key2", "value2");
assert_eq!(RiLogContext::get_all().len(), 2);
RiLogContext::clear();
assert_eq!(RiLogContext::get_all().len(), 0);
}
#[test]
fn test_log_context_tracing_support() {
RiLogContext::clear();
let trace_id = "test-trace-id-123";
RiLogContext::set_trace_id(trace_id);
assert_eq!(RiLogContext::get_trace_id(), Some(trace_id.to_string()));
let span_id = "test-span-id-456";
RiLogContext::set_span_id(span_id);
assert_eq!(RiLogContext::get_span_id(), Some(span_id.to_string()));
let parent_span_id = "test-parent-span-id-789";
RiLogContext::set_parent_span_id(parent_span_id);
assert_eq!(RiLogContext::get_parent_span_id(), Some(parent_span_id.to_string()));
let generated_trace_id = RiLogContext::generate_trace_id();
assert!(!generated_trace_id.is_empty());
let generated_span_id = RiLogContext::generate_span_id();
assert!(!generated_span_id.is_empty());
}
#[test]
fn test_logger_creation() {
let temp_dir = tempdir().unwrap();
let fs = RiFileSystem::new_with_root(temp_dir.path().to_path_buf());
let config = RiLogConfig::default();
let logger = RiLogger::new(&config, fs);
assert!(logger.info("test_target", "test_message").is_ok());
}
#[test]
fn test_logger_different_levels() {
let temp_dir = tempdir().unwrap();
let fs = RiFileSystem::new_with_root(temp_dir.path().to_path_buf());
let mut config = RiLogConfig::default();
config.level = RiLogLevel::Info;
config.console_enabled = false; let logger = RiLogger::new(&config, fs.clone());
assert!(logger.debug("test_target", "debug_message").is_ok());
assert!(logger.info("test_target", "info_message").is_ok());
assert!(logger.warn("test_target", "warn_message").is_ok());
assert!(logger.error("test_target", "error_message").is_ok());
let mut config = RiLogConfig::default();
config.level = RiLogLevel::Error;
config.console_enabled = false;
let logger = RiLogger::new(&config, fs);
assert!(logger.debug("test_target", "debug_message").is_ok());
assert!(logger.info("test_target", "info_message").is_ok());
assert!(logger.warn("test_target", "warn_message").is_ok());
assert!(logger.error("test_target", "error_message").is_ok());
}
#[test]
fn test_logger_with_json_format() {
let temp_dir = tempdir().unwrap();
let fs = RiFileSystem::new_with_root(temp_dir.path().to_path_buf());
let mut config = RiLogConfig::default();
config.json_format = true;
config.console_enabled = false; let logger = RiLogger::new(&config, fs);
assert!(logger.info("test_target", "test_message").is_ok());
}
#[test]
fn test_logger_with_context() {
let temp_dir = tempdir().unwrap();
let fs = RiFileSystem::new_with_root(temp_dir.path().to_path_buf());
let mut config = RiLogConfig::default();
config.console_enabled = false; let logger = RiLogger::new(&config, fs);
RiLogContext::clear();
RiLogContext::put("test_context_key", "test_context_value");
assert!(logger.info("test_target", "test_message").is_ok());
RiLogContext::clear();
}