From b51066e9864196fd04737e1faeb4343270720de9 Mon Sep 17 00:00:00 2001 From: f1shl3gs Date: Sun, 14 Jul 2024 18:12:58 +0800 Subject: [PATCH] fix tests --- lib/codecs/src/encoding/config.rs | 37 ++++++++++++++++++--- lib/codecs/src/encoding/format/json.rs | 4 ++- lib/codecs/src/encoding/mod.rs | 46 +++++++++++++++++++------- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/lib/codecs/src/encoding/config.rs b/lib/codecs/src/encoding/config.rs index 8059432c5..7d76b1a1c 100644 --- a/lib/codecs/src/encoding/config.rs +++ b/lib/codecs/src/encoding/config.rs @@ -48,10 +48,9 @@ impl FramingConfig { /// Encoding configuration #[derive(Configurable, Clone, Debug, Deserialize, Serialize)] -#[serde(deny_unknown_fields)] pub struct EncodingConfig { /// The encoding codec used to serialize the events before outputting. - #[configurable(required)] + #[serde(flatten)] codec: SerializerConfig, #[serde(flatten)] @@ -172,10 +171,38 @@ where #[cfg(test)] mod tests { + use event::log::parse_value_path; + use super::*; use crate::encoding::format::json::JsonSerializerConfig; use crate::encoding::TimestampFormat; - use event::log::parse_value_path; + + #[test] + fn json() { + for (input, want) in [ + ( + r#"codec: json"#, + SerializerConfig::Json(JsonSerializerConfig { pretty: false }), + ), + ( + r#" + codec: json + pretty: false + "#, + SerializerConfig::Json(JsonSerializerConfig { pretty: false }), + ), + ( + r#" + codec: json + pretty: true + "#, + SerializerConfig::Json(JsonSerializerConfig { pretty: true }), + ), + ] { + let got = serde_yaml::from_str::(input).unwrap(); + assert_eq!(got, want); + } + } #[test] fn deserialize() { @@ -242,7 +269,7 @@ encoding: only_fields: [ "a.b.c" ] "#, Some(FramingConfig::NewlineDelimited), - SerializerConfig::Json, + SerializerConfig::Json(JsonSerializerConfig { pretty: false }), Transformer::new(Some(vec![parse_value_path("a.b.c").unwrap()]), None, None) .unwrap(), ), @@ -253,7 +280,7 @@ encoding: only_fields: [ "a.b.c" ] "#, None, - SerializerConfig::Json, + SerializerConfig::Json(JsonSerializerConfig { pretty: false }), Transformer::new(Some(vec![parse_value_path("a.b.c").unwrap()]), None, None) .unwrap(), ), diff --git a/lib/codecs/src/encoding/format/json.rs b/lib/codecs/src/encoding/format/json.rs index 1fa8b55eb..a9074fc85 100644 --- a/lib/codecs/src/encoding/format/json.rs +++ b/lib/codecs/src/encoding/format/json.rs @@ -5,12 +5,14 @@ use serde::{Deserialize, Serialize}; use tokio_util::codec::Encoder; use super::SerializeError; +use crate::serde::skip_serializing_if_default; /// Config used to build a `JsonSerializer` #[derive(Clone, Configurable, Debug, Deserialize, Serialize)] +#[cfg_attr(test, derive(PartialEq))] pub struct JsonSerializerConfig { /// Whether to use pretty JSON formatting. - #[serde(default)] + #[serde(default, skip_serializing_if = "skip_serializing_if_default")] pub pretty: bool, } diff --git a/lib/codecs/src/encoding/mod.rs b/lib/codecs/src/encoding/mod.rs index b6610bed6..3a3549ff9 100644 --- a/lib/codecs/src/encoding/mod.rs +++ b/lib/codecs/src/encoding/mod.rs @@ -18,20 +18,17 @@ use serde::{Deserialize, Serialize}; pub use config::{EncodingConfig, EncodingConfigWithFraming, FramingConfig, SinkType}; pub use encoder::{Encoder, EncodingError}; -pub use format::{ - json::JsonSerializer, logfmt::LogfmtSerializer, native_json::NativeJsonSerializer, - text::TextSerializer, -}; -pub use framing::{ - bytes::BytesEncoder, - character::{CharacterDelimitedEncoder, CharacterDelimitedFramerConfig}, - length_delimited::LengthDelimitedEncoder, - newline::NewlineDelimitedEncoder, -}; +pub use format::json::{JsonSerializer, JsonSerializerConfig}; +pub use format::logfmt::LogfmtSerializer; +pub use format::native_json::NativeJsonSerializer; +pub use format::text::TextSerializer; +pub use framing::bytes::BytesEncoder; +pub use framing::character::{CharacterDelimitedEncoder, CharacterDelimitedFramerConfig}; +pub use framing::length_delimited::LengthDelimitedEncoder; +pub use framing::newline::NewlineDelimitedEncoder; pub use transformer::{TimestampFormat, Transformer}; use super::FramingError; -pub use crate::encoding::format::json::JsonSerializerConfig; /// The error returned when serializing a structured event into bytes. #[derive(Debug)] @@ -80,7 +77,8 @@ impl Display for SerializeError { /// Configuration for building a `Serializer` #[derive(Configurable, Clone, Debug, Deserialize, Serialize)] -#[serde(rename_all = "snake_case")] +#[serde(tag = "codec", rename_all = "snake_case")] +#[cfg_attr(test, derive(PartialEq))] pub enum SerializerConfig { /// Configures the `JsonSerializer` Json(JsonSerializerConfig), @@ -112,10 +110,13 @@ impl SerializerConfig { pub enum Serializer { /// Uses a `JsonSerializer` for serialization. Json(JsonSerializer), + /// Uses a `LogfmtSerializer` for serialization. Logfmt(LogfmtSerializer), + /// Uses a `NativeJsonSerializer` for serialization. Native(NativeJsonSerializer), + /// Uses a `TextSerializer` for serialization. Text(TextSerializer), } @@ -182,3 +183,24 @@ impl tokio_util::codec::Encoder<()> for Framer { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn config_json() { + let config = SerializerConfig::Json(JsonSerializerConfig { pretty: false }); + let json = serde_json::to_string_pretty(&config).unwrap(); + let got = serde_json::from_str::(&json).unwrap(); + assert_eq!(config, got); + } + + #[test] + fn config_yaml() { + let config = SerializerConfig::Json(JsonSerializerConfig { pretty: false }); + let json = serde_yaml::to_string(&config).unwrap(); + let got = serde_yaml::from_str::(&json).unwrap(); + assert_eq!(config, got); + } +}