// file: crates/ksp-app-raw-transaction-ingest-desk/unit_tests/frontend_logging.rs // version: 2 #[test] fn frontend_log_levels_are_explicit_and_case_insensitive() { assert!(matches!(super::parse_level(" TRACE "), std::result::Result::Ok(super::FrontendLogLevel::Trace))); assert!(matches!(super::parse_level("debug"), std::result::Result::Ok(super::FrontendLogLevel::Debug))); assert!(matches!(super::parse_level("Info"), std::result::Result::Ok(super::FrontendLogLevel::Info))); assert!(matches!(super::parse_level("warn"), std::result::Result::Ok(super::FrontendLogLevel::Warn))); assert!(matches!(super::parse_level("ERROR"), std::result::Result::Ok(super::FrontendLogLevel::Error))); } #[test] fn unsupported_frontend_log_level_is_rejected() { let result = super::parse_level("notice"); assert!(result.is_err()); let error = match result { std::result::Result::Ok(_) => return, std::result::Result::Err(error) => error, }; assert_eq!(error.code(), crate::ERROR_CODE_FRONTEND_LOG_LEVEL_INVALID); } #[test] fn frontend_log_targets_are_whitelisted() { assert!(matches!(super::parse_target("frontend"), std::result::Result::Ok(super::FrontendLogTarget::Frontend))); assert!(matches!(super::parse_target(" MAIN "), std::result::Result::Ok(super::FrontendLogTarget::Main))); assert!(matches!(super::parse_target("Splash"), std::result::Result::Ok(super::FrontendLogTarget::Splash))); } #[test] fn arbitrary_frontend_log_target_is_rejected() { let result = super::parse_target("ksp-app-raw-transaction-ingest-desk.test.logging"); assert!(result.is_err()); let error = match result { std::result::Result::Ok(_) => return, std::result::Result::Err(error) => error, }; assert_eq!(error.code(), crate::ERROR_CODE_FRONTEND_LOG_TARGET_INVALID); } #[test] fn pre_012_frontend_log_ipc_rejects_unknown_fields_and_unbounded_or_control_messages() { let unknown = serde_json::from_value::(serde_json::json!({ "level": "info", "targetId": "main", "message": "safe", "endpointUrl": "https://forbidden.invalid" })); assert!(unknown.is_err()); let oversized = crate::FrontendLogPayloadDto { level: "info".to_owned(), target_id: "main".to_owned(), message: "x".repeat(super::FRONTEND_LOG_MESSAGE_MAX_BYTES + 1), }; let result = super::validate_payload_shape(&oversized); assert!(result.is_err()); if let std::result::Result::Err(error) = result { assert_eq!(error.code(), crate::ERROR_CODE_FRONTEND_LOG_PAYLOAD_INVALID); } let nul = crate::FrontendLogPayloadDto { level: "info".to_owned(), target_id: "main".to_owned(), message: "safe\0hostile".to_owned() }; assert!(super::validate_payload_shape(&nul).is_err()); }